blog: writing about writing
Signed-off-by: Xe <me@christine.website>
This commit is contained in:
parent
a1974a5948
commit
13f28eae67
|
@ -0,0 +1,202 @@
|
|||
---
|
||||
title: Writing Coherently At Scale
|
||||
date: 2022-06-26
|
||||
tags:
|
||||
- writing
|
||||
---
|
||||
|
||||
As someone who does a lot of writing, I have been asked how to write about
|
||||
things. I have been asked about it enough that I am documenting this here so you
|
||||
can all understand my process. This is not a prescriptive system that you must
|
||||
do in order to make Quality Content™️, this is what I do.
|
||||
|
||||
<xeblog-conv name="Cadey" mood="coffee">I honestly have no idea if this is a
|
||||
"correct" way of doing things, but it seems to work well enough. Especially so
|
||||
if you are reading this.</xeblog-conv>
|
||||
|
||||
<xeblog-hero file="great-wave-cyberpunk" prompt="the great wave off of kanagawa, cyberpunk, hanzi inscription"></xeblog-hero>
|
||||
|
||||
## The Planning Phase
|
||||
|
||||
To start out the process of writing about something, I usually like to start
|
||||
with the end goal in mind. If I am writing about an event or technology thing,
|
||||
I'll start out with a goal that looks something like this:
|
||||
|
||||
> Explain a split DNS setup and its advantages and weaknesses so that people can
|
||||
> make more informed decisions about their technical setups.
|
||||
|
||||
It doesn't have to be very complicated or intricate. Most of the complexity
|
||||
comes up naturally during the process of writing the intermediate steps. Think
|
||||
about the end goal or what you want people to gain from reading the article.
|
||||
|
||||
I've also found it helps to think about the target audience and assumed skills
|
||||
of the reader. I'll usually list out the kind of person that would benefit from
|
||||
this the most and how it will help them. Here's an example:
|
||||
|
||||
> The reader is assumed to have some context about what DNS is and wants to help
|
||||
> make their production environment more secure, but isn't totally clear on how
|
||||
> it helps and what tradeoffs are made.
|
||||
|
||||
State what the reader is to you and how the post benefits them. Underthink it.
|
||||
It's tempting to overthink this, but really don't. You can overthink the
|
||||
explanations later.
|
||||
|
||||
### The Outline
|
||||
|
||||
Once I have an end goal and the target audience in mind, then I make an outline
|
||||
of what I want the post to contain. This outline will have top level items for
|
||||
generic parts of the article or major concepts/steps and then I will go in and
|
||||
add more detail inside each top level item. Here is an example set of top level
|
||||
items for that split DNS post:
|
||||
|
||||
```markdown
|
||||
- Introduction
|
||||
- Define split DNS
|
||||
- How split DNS is different
|
||||
- Where you can use split DNS
|
||||
- Advantages of split DNS
|
||||
- Tradeoffs of split DNS
|
||||
- Conclusion
|
||||
```
|
||||
|
||||
Each step should build on the last and help you reach towards the end goal.
|
||||
|
||||
After I write the top level outline, I start drilling down into more detail. As
|
||||
I drill down into more detail about a thing, the bullet points get nested
|
||||
deeper, but when topics change then I go down a line. Here's an example:
|
||||
|
||||
```markdown
|
||||
- Introduction
|
||||
- What is DNS?
|
||||
- Domain Name Service
|
||||
- Maps names to IP addresses
|
||||
- Sometimes it does other things, but we're not worrying about that today
|
||||
- Distributed system
|
||||
- Intended to have the same data everywhere in the world
|
||||
- It can take time for records to be usable from everywhere
|
||||
```
|
||||
|
||||
Then I will go in and start filling in the bullet tree with links and references
|
||||
to each major concept or other opinions that people have had about the topic.
|
||||
For example:
|
||||
|
||||
```markdown
|
||||
- Introduction
|
||||
- What is DNS?
|
||||
- Domain Name Service
|
||||
- https://datatracker.ietf.org/doc/html/rfc1035
|
||||
- Maps names to IP addresses
|
||||
- Sometimes it does other things, but we're not worrying about that today
|
||||
- Distributed system
|
||||
- Intended to have the same data everywhere in the world
|
||||
- It can take time for records to be usable from everywhere
|
||||
- https://jvns.ca/blog/2021/12/06/dns-doesn-t-propagate/
|
||||
```
|
||||
|
||||
These help me write about the topic and give me links to add to the post so that
|
||||
people can understand more if they want to. You should spend most of your time
|
||||
writing the outline. The rest is really just restating the outline in sentences.
|
||||
|
||||
## Writing The Post
|
||||
|
||||
After each top level item is fleshed out enough, I usually pick somewhere to
|
||||
start and add some space after a top level item. Then I just start writing. Each
|
||||
top level item usually maps to a few paragraphs / a section of the post. I
|
||||
usually like to have each section have its own little goal / context to it so
|
||||
that readers start out from not understanding something and end up understanding
|
||||
it better. Here's an example:
|
||||
|
||||
> If you have used a computer in the last few decades or so, you have probably
|
||||
> used the Domain Name Service (DNS). DNS maps human-readable names (like
|
||||
> `google.com`) to machine-readable IP addresses (like `182.48.247.12`). Because
|
||||
> of this, DNS is one of the bedrock protocols of the modern internet and it
|
||||
> usually is the cause of most failures in big companies.
|
||||
>
|
||||
> DNS is a globally distributed system without any authentication or way to
|
||||
> ensure that only authorized parties can query IP addresses for specific domain
|
||||
> names. As a consequence of this, this means that anyone can get the IP address
|
||||
> of a given server if they have the DNS name for it. This also means that
|
||||
> updating a DNS record can take a nontrivial amount of time to be visible from
|
||||
> everywhere in the world.
|
||||
>
|
||||
> Instead of using public DNS records for internal services, you can set up a
|
||||
> split DNS configuration so that you run an internal DNS server that has your
|
||||
> internal service IP addresses obscured away from the public internet. This
|
||||
> means that attackers can't get their hands on the IP addresses of your
|
||||
> services so that they are harder to attack. In this article, I'm going to
|
||||
> spell out how this works, the advantages of this setup, the tradeoffs made in
|
||||
> the process and how you can implement something like this for yourself.
|
||||
|
||||
In the process of writing, I will find gaps in the outline and just fix it by
|
||||
writing more words than the outline suggested. This is okay, and somewhat
|
||||
normal. Go with the flow.
|
||||
|
||||
I expand each major thing into its component paragraphs and will break things up
|
||||
into sections with markdown headers if there is a huge change in topics. Adding
|
||||
section breaks can also help people stay engaged with the post. Giant walls of
|
||||
text are hard to read and can make people lose focus easily.
|
||||
|
||||
Another trick I use to avoid my posts being giant walls of text is what I call
|
||||
"conversation snippets". These look like this:
|
||||
|
||||
<xeblog-conv name="Mara" mood="hacker">These are words and I am saying
|
||||
them!</xeblog-conv>
|
||||
|
||||
I use them for both creating [Socratic
|
||||
dialogue](https://en.wikipedia.org/wiki/Socratic_dialogue) and to add prose
|
||||
flair to my writing. I am more of a prose writer [by
|
||||
nature](https://xeiaso.net/blog/the-oasis), and I find that this mix allows me
|
||||
to keep both technical and artistic writing up to snuff.
|
||||
|
||||
<xeblog-conv name="Cadey" mood="enby">Amusingly, I get asked if the characters
|
||||
in my blog are separate people all giving their input into things. They are
|
||||
characters, nothing more. If you ever got an impression otherwise, then I have
|
||||
done my job as a writer _incredibly well_.</xeblog-conv>
|
||||
|
||||
Just flesh things out and progressively delete parts of the outline as you go.
|
||||
It gets easier.
|
||||
|
||||
### Writing The Conclusion
|
||||
|
||||
I have to admit, I really suck at writing conclusions. They are annoying for me
|
||||
to write because I usually don't know what to put there. Sometimes I won't even
|
||||
write a conclusion at all and just end the article there. This doesn't always
|
||||
work though.
|
||||
|
||||
A lot of the time when I am describing how to do things I will end the article
|
||||
with a "call to action". This is a few sentences that encourages the reader to
|
||||
try the thing that I've been writing about out for themselves. If I was turning
|
||||
that split DNS article from earlier into a full article, the conclusion
|
||||
could look something like this:
|
||||
|
||||
> ---
|
||||
>
|
||||
> If you want an easy way to try out a split DNS configuration, install
|
||||
> [Tailscale](https://tailscale.com/) on a couple virtual machines and enable
|
||||
> [MagicDNS](https://tailscale.com/kb/1081/magicdns/). This will set up a split
|
||||
> DNS configuration with a domain that won't resolve globally, such as
|
||||
> `hostname.example.com.beta.tailscale.net`, or just `hostname` for short.
|
||||
>
|
||||
> I use this in my own infrastructure constantly. It has gotten to the point
|
||||
> where I regularly forget that Tailscale is involved at all, and become
|
||||
> surprised when I can't just access machines by name.
|
||||
>
|
||||
> A split DNS setup isn't a security feature (if anything, it's more of an
|
||||
> obscurity feature), but you can use it to help administrate your systems by
|
||||
> making your life easier. You can update records on your own schedule and you
|
||||
> don't have to worry about outside attackers getting the IP addresses of your
|
||||
> services.
|
||||
|
||||
I don't like giving the conclusion a heading, so I'll usually use a [horizontal
|
||||
rule (`---` or `<hr
|
||||
/>`)](https://www.coffeecup.com/help/articles/what-is-a-horizontal-rule/) to
|
||||
break it off.
|
||||
|
||||
---
|
||||
|
||||
This is how I write about things. Do you have a topic in mind that you have
|
||||
wanted to write about for a while? Try this system out! If you get something
|
||||
that you like and want feedback on how to make it shine, email me at
|
||||
`iwroteanarticle at xeserv dot us` with either a link to it or the draft
|
||||
somehow. I'll be sure to read it and reply back with both what I liked and some
|
||||
advice on how to make it even better.
|
Loading…
Reference in New Issue