NEW: Also subscribe to my new series, Programming Feedback for Advanced Beginners.
“Where do you get your blog post ideas?” people occasionally ask me. “Uh, I’m not sure,” I usually quip back.
In the future I’ll just link them to this post.
I’m going to start with what I believe the marketers call “establishing credibility”.
I’ve published 140 blog posts, or 270,000 words, or 1.5 Fellowship of the Rings. According to Google Analytics, these posts have been read by over 2 million people. I’d guess that the true number is at least 20% higher than this, since no doubt a good fraction of my audience block third-party web trackers (I may have a visceral dislike of online tracking but I still find surveillance capitalism as useful as the next publisher of online content, although no one pays me to do this so I don’t think it counts). Either way, my blog is one of my main hobbies, and I’m always very happy when it comes up in conversation with friends or strangers. I get to talk about myself, they get to talk about me, and everyone has a good time.
In this post I’m going to explain how I come up with blog posts ideas and give suggestions for how you can come up with ideas of your own. I’m going to reference my own work a lot, because I find specifics and examples useful. This may make this post read like content marketing for everything else I’ve ever written, which is itself content marketing for nothing. But I think it’s worth it in order to be able to talk about “technical stories” or “gentle introductions for generalist programmers” in concrete terms.
When deciding what to write about, I have two principles that I try to follow:
Let’s go into more detail.
For every post I write, especially those whose primary goal is to teach the reader something, I try to ensure that there exists at least one category, however specific, for which my post is the best on the internet. This might sound over-ambitious and self-aggrandizing, but it’s not. You can win a lot of imaginary awards when you get to define the judging criteria:
Many of my technical, explanatory posts have come from times when I had originally wanted to spend 30 minutes learning the basics of something. Finding no existing material targeted at whatever my specific level of knowledge and depth of interest happened to be, I instead spent 10 hours or more writing the post that I wish had been there already. These posts are by definition entering a relatively sparsely-populated market, which gives them a decent shot at being the best at what they do. For example:
Many of my more off-the-wall posts have come from times when I had found a topic that I thought was interesting, but for which I didn’t think I could write the best vanilla explanation on the internet for even a very specific audience. This might have been because the topic was too broad, too well-covered, too detail-dependent, or too controversial. I therefore sought out an oddball angle that didn’t require either the reader or the writer to have a PhD, but still added something to an interested reader’s Google-searching experience. In such posts I try to make it clear that I’m not being serious or intellectually rigorous through the use of wacky characters and an even wackier narrative, and my hope is that these posts come across as “thought-provoking” (which I believe is commentariat-speak for “I have not considered any of the details”). Some examples:
It doesn’t even matter whether or not a post does in fact turn out to be the best on the internet. Often it won’t, but I still find the framing helpful for focus and motivation. I’m not writing for the advertising revenue, because I don’t get any. I’m writing for myself and for the satisfaction of clicks well-earned. There’s no point in me or you writing dreary clickbait unless it’s as a writing exercise, which come to think of it might actually be quite educational the first few times.
On an old episode of “The Exponent” podcast, host Ben Thompson points out that almost every show on Netflix has a very long shelf-life. Good dramas are watched by millions of people for years after they are first released. Even bad dramas are watched by thousands of people who don’t read reviews for a good few months. By contrast, most sports and news shows go stale after 24 hours, tops. Netflix’s focus on the former type of evergreen content means that every show that it adds to its catalog makes Netflix permanently better for every future subscriber. Even though its share price has been wobbling rather violently over the last year, this makes Netflix a big, unstoppable ball of continuously agglomerating value.
I don’t know if this is really how Netflix really thinks about their portfolio of shows, but it nicely encapsulates how I think about writing. I want every new post I publish to durably increase the amount of enjoyment that someone has access to while browsing through my archives, for at least the next 5 years. This explains why I’ll write about general concepts like self-hosting compilers, but rarely about specifics with a short shelf-life, like new features in Terraform 0.12.
Why do I care about this? The same reason I care about anything - a combination of vanity and a desire to be enduringly useful.
I’ve said that I’m looking for ideas for posts that will stand the test of time (where time is defined as the next 5 years) and are sufficiently tight and well-targeted so as to be the best on the internet at something. That’s all very well in theory, but how does one come up with such ideas?
I like to think about post ideas in two parts:
Let’s talk about each part in turn.
First I decide which subject area to write about. I maintain an enormous list of hundreds of possible subjects, which contains:
A lot of the non-technical posts that I’ve written have come from writing down ideas or sentence fragments about a topic that I find interesting, and then eventually realizing that I’ve got enough of these fragments to form the kernel of a blog post (“Oscar Heaton: Quarterly Baby Review”, “Lessons from my first 20 office hours”, “How to read”). The key to good writing is to seamlessly stitch together these disparate fragments into a coherent tapestry. The key to quick writing is to slap together a listicle and call it a day.
Once I’ve picked a subject area to write about, I still have to figure out how to write about it. Simply put, what’s the angle? For technical topics my default angle is “moderately-detailed introduction, written for a generalist computer programmer”. However, sometimes I don’t think I can or want to pull this off for a subject, which is when I go searching for alternatives like:
Non-technical blog posts need angles too:
An post’s angle can be almost anything, but once I know what it is I find it extremely useful to explicitly write it down. Knowing a post’s angle helps with deciding what information should go into it, and what can be skipped.
Sometimes an angle, or a combination of an angle and a topic, is sufficiently successful and reproducible that I’ll reuse the entire thing, sometimes multiple times. Posts that reuse an existing template are often the most enjoyable to write, because the difficult questions of “what am I writing about?” and “how am I writing about it?” come pre-answered. I can think of at least 7 templates that I have reused, or intend to reuse in the future:
If you find something that works, keep doing it.
Some prompts to help you come up with post ideas:
Every post that I’ve written has made it easier to write the next one. This is in part simply because the more you write, the better you get. But it’s also because writing more today makes it easier to find the time and energy to write more in the future, and writing more at any time increases your confidence, making you more likely to feel qualified to write even more and about a wider range of subjects (nb. on the internet there are actually no qualifications and you can already write about almost anything you want). I haven’t drawn the flow chart but I’m pretty sure there’s a virtuous circle in there somewhere.
So despite everything that I’ve just said, the best post to write is the one that you are able and excited to start writing immediately. Hopefully this post helps you methodically devise your own topics and angles, but any idea that you come up with is perfect if you can and want to begin work on it right now.
NEW: Also subscribe to my new series, Programming Feedback for Advanced Beginners.