For my personal projects, I often find myself jumping straight into coding instead of doing much brainstorming or planning.

This “jump into code” approach has its benefits, but also its downfalls, but those downfalls can be mitigated by following certain habits.

🎉 Benefits

Often, you have a lot of initial excitement when you first think of an idea. Jumping right into the code allows you to leverage that excitement/motivation to make progress quickly.

This allows you to quickly see what works, what doesn’t, what is fun, and what isn’t.

⚠️ Downfalls

The main problem I face with this wild west approach is that I often lose focus on priorities. I end up implementing nice-to-haves instead of core features.

The other issue is when I take a break for a few days, I forget what I was doing, and what I should do next. I also have to re-read/skim the code to understand high level design/architecture, and “how it works”. I really think I can benefit from some visuals about high level design/architecture/how-it-works, especially after breaks.

🛠️ Mitigation

Just to re-iterate, I still want to follow the low planning, high execution approach, but I want to mitigate the downfalls stated above.

📝 Do a 5-15 Minute Planning Session

In order to mitigate the “losing focus on priorities” problem, I will spend about 5-15 minutes planning before I start the project, I’ll write down:

  • Overall, one statement goal of the project. E.g. “A tool that gives you visual context as you browse your codebase.”
  • The core features that I want to implement.
  • Questions I may have. This is to try to illicit risks early on. What are the different approaches to do X? What libraries are available?
  • The nice-to-haves that I can implement later.

Remember, you should only spend 5-15 minutes on this. You will get it wrong, but that is okay. It’ll still help a lot.

🗒️ Write Brief Note Before Ending Each Session

To mitigate the “forgetting what I was doing” problem, I will jot down a note before the end of each session explaining what I was working on, and what I should do next. I can write this note in a sticky, or if I am using a lightweight kanban, I can write it as a comment on the card I’m currently working on.

🏗️ Write High Level Design/Architecture/How-It-Works

In order to mitigate the “needing to re-read/skim the code to understand it” problem, I have a few ideas.

For one, I can write a high level design description, a “how it works” in the README and maybe include a hastily drawn diagram.

I can also leverage AI each time I need to re-understand the code. Especially for small codebases, which most personal projects are, I can pass the entire codebase to the AI (or at least the entire repo map) and ask it to explain me the high level design and data flow.

Sometimes I don’t need diagrams, I can just explain with words, but I need to ensure that I use formatting (headings, bold, frequent blank lines), structure, and even emojis to make it more engaging (for myself) to read. Just staring at a wall of text is hard. I want to emphasize the importance of frequent blank lines. It makes it much easier for me to read.