Making progress on side projects with content-driven development

Monday, September 9, 2024

It's hard to make progress on side projects sometimes. Getting started is easy when we see the bright future of the project. Then somewhere in the middle, we get stuck in lists of tasks to do, a long way in and still a long way from the finish line.

This happens to me as much as anyone. In the last couple of years, I stumbled into a way to avoid getting stuck midway in my projects. It's not just about productivity: this also lets me let go of things when I reach a good stopping point. It helps me figure out what that stopping point should be.

Where projects get stuck

There are a lot of reasons that projects get stuck. Maybe we don't know how to do something, and it's a big hurdle to overcome. Or maybe life gets in the way, we put down the project, and we never pick it back up. Or we make progress, but we keep adding features that we think it "needs." Or as time drags on, we just kind of lose interest and the project peters out before it ever got shipped.

For me, each of these shares a common characteristic: an overwhelming task list.

It can be overwhelming for different reasons. If the next task is something we don't know how to do, then even a short list can be overwhelming—it's tough to decide to work on something you have no idea how to approach! Or if the task list is a lot and you put it down for some time, it can be overwhelming to decide where to dive back in. And when it's just a big project, it's hard to keep interest levels high for the duration, so eventually there's a point where that interest dips below what you need to keep going.

I've had each of these happen to me, but losing interest from a big project over a long time is the most common. My interests can shift around a lot and I like to do varied things, so if a project takes too long, it might end up on the shelf, half finished, never to be worked on again. Besides, I usually started it to learn something, and the rest of the project can feel like a lot of busy work to get there.

But if I get a quick win with something, that dopamine hit can keep the interest up, and make it easier to keep going.

Sequencing via content

When I started writing more regularly, I noticed that I was also making more regular progress on my projects. This was not just because I wanted things to write about, but because writing about my projects changes how I approach them. Instead of building one big task list, I think about what small things I can work toward to write about.

You see this in workplaces sometimes. One form is with agile development in general, where each sprint is supposed to result in something shippable to deliver value. This can also look like demo-driven development, where each sprint you try to get a good demo ready to show off.

What these have in common, and why they work, is that they make you sequence things into smaller deliverable chunks. When I'm working on a project I want to write about, I think about which pieces I can work on independently to get something that is worth writing about, worth explaining to people. Maybe that means that for this upcoming project, I'll do the parser first, and write a post about some of the neat things with parsers! Or maybe it means that we cut out things like permissions for a demo web app, since that's not at all core to what we're doing (where what we're doing is not deployed software).

By thinking about the sequence for sharing updates, it is a lot easier to cut away the cruft and focus on the core. Each time you get to share your work, that can give a good dopamine hit. It also gives a good motivation for some of the things you might not be as excited about!

Where to share progress

A lot of my updates are posted on my blog or in my newsletter, but there are so many ways to do content-driven development! It mostly comes down to where you want to share your progress.

A few formats that I've seen work well are:

  • Blog posts: this is my default, because I like blogging!
  • YouTube videos: if you're into video instead of writing, you can also make demo and update videos and post those.
  • Microblogs: a lighter weight alternative to blogging, posting on places like Mastodon can give a good way to share updates.
  • Forums: I'm specifically thinking of the Recurse Center forums/chat tool where people post check-ins periodically with progress. These sorts of groups can be great for sharing!
  • With a friend: You can also just share periodically with one or two other people! It doesn't have to be very public.

As I wrote this out, I realized that I do almost all of these. I ultimately end up with blog posts, but along the way I share tidbits on Mastodon and in my RC threads, and I tell friends about exciting things as I go.

You decide when you're done

Projects don't last forever, at least until we figure out immortality. One bonus of working on projects through the lens of writing about my progress/learnings is that I stop more intentionally.

Without this lens, I look at all the features I don't have as something that is wrong, where I've failed. With this perspective, though, I look at the features I don't have as where I chose to stop because it was orthogonal to my goals!

If you are focused on what you want to learn and how to share or communicate that, then you'll have that in mind as you pick what to work on. This will let you be aware of the things that are not important to you so you can let go of them. You can separate the wheat from the chaff and just get what is really important, then abandon the rest. It's freeing!

Let the projects continue as long as they need to for you to get what you want out of them. Once you've learned what you came for, demonstrated what you wanted to, or made that useful little tool for yourself? Then you can just be... done. Even if the task list isn't.


If this post was enjoyable or useful for you, please share it! If you have comments, questions, or feedback, you can email my personal email. To get new posts and support my work, subscribe to the newsletter. There is also an RSS feed.

Want to become a better programmer? Join the Recurse Center!
Want to hire great programmers? Hire via Recurse Center!