Ask HN: How do you stay organized for solo dev?

92 points by pta2002 ↗ HN
When working with a team, I've found that Scrum-like short-term goals and organized task backlogs really help keep me focused and on track with the work I have to do. For solo development, however, I've never really found any approach that sticks and often end up getting sidetracked and losing track of my objectives.

So my question to all of you is, what tools and techniques have you used to ensure you stick to your objectives?

72 comments

[ 2.3 ms ] story [ 155 ms ] thread
Paper notebook.

When you don't need to share information, there's nothing better than a notebook to see all of your ideas spread out and iterated. No need to log into anything. Take it with you anywhere -- sit on a bench and ideate. Go to the gym and jot down ideas.

I can keep my daily goals in a checklist in there and just check them off 1 by 1. No need for GitHub projects or anything like that because there's no need to communicate status with anyone.

I retired fairly recently and I seem to have largely gone back to a Moleskin weekly calendar and a couple of notebooks. (I do try to avoid too many random pieces of paper.) For more detailed tracking for dev (etc.), I could see using GitHub or something along those lines but paper works pretty well as long as you don't need to share.
I'm curious what different notebooks you use.

I tried to differentiate mine a lot, but I often found I had the "wrong" notebook at the "wrong" times. Now I have have a general notebook, and other notebooks that might live in 1 place. E.g. all my D&D campaign notebooks sit with my D&D stuff.

But I don't have a separate work/life/personal dev notebook. Shuffling them got annoying.

Nothing nearly systematic enough. I do use some back of calendar pages for simple stuff. And small separate notebooks for specific projects. But I found a few books were better than an electronic thing for most purposes for an individual.
Well, some sort of log, be it paper or a text file of whatever works for you.

Keeping track of the decisions you make, both to do things and to NOT DO THINGS (and why) is almost a superpower. You can save so much time when you come up with a 'new but vaguely familiar' idea by being able to check back through your notes and see what you came up with last time it occurred to you. Maybe circumstances changed, maybe they haven't, but you can bring yourself back up to speed on what you've done previously with little effort.

you don't need a lot of the overhead in team-focused working models. As suggested already, paper based lists work well. Only you need to know what needs to be done, and you are generally focused on only a handful of things at a time.

Pomodoro has been another thing that works well for me to split up my time/keep getting things done while making sure I'm taking frequent breaks.

as CharlieDigital said, a paper notebook. would recommend art store quality large and wide sheets and a handful of pens. depending on work, you can get different colors of pen. the very fine archival widths are great but easily bend outta shape. ideation and project development has phases, you must uncover and scope, and then implement. this oscillation of tides is natural and ensures healthy progress. for here, once the app is adequately scoped it's time to implemenr. but pretty much everything is designed on paper first
Trello board with three lists Done/Doing/ToDo

Make a list of all the stuff you need to do.

Prioritize it.

Move the top item to the doing list and start working on it.

When you’re done move it to done. Take the next item off the to do list and repeat.

I use other lists on trello to maintain cards for my research or to move features off the to do list that aren’t necessary for v1.

I second this but with a tiny addition: for software, I have a 4th column called "Bugs" and any time I come across a bug, I chuck it in there and get round to it eventually.
Yea I do this too or find the card the bug represents and move it back to the ToDo with a description of the bug
>Move the top item to the doing list and start working on it.

>When you’re done move it to done. Take the next item off the to do list and repeat.

What do you do if you need or want to switch to working on another item before the top one is complete?

trello boards are overkill you could just use markdown checklists

  - [x] A
    - [x] AA
    - [x] AB
  - [ ] B
    - [x] BA
    - [ ] BB
And if you want to document an item you can link to it with [[A wiki link]]

  - [ ] [[A wiki link to another markdown file]]
I use a `TODO.md` file.

GitHub flavored markdown will format a list like this:

    1. [X] Dockerfile
    2. [ ] Bulk Inference
    3. [ ] CLI
    4. [ ] Logging
as a neat little list of checked/unchecked checkboxes. I create a section called "Backlog" for future ideas, a section called "Bugs" for bugs to fix, and an unnamed section at the top with current items. Once I reach a milestone like a release, I delete all the completed items.
Does X mark mean you won't do it or does it mean you already did it?
Usually for me I use Obsidian so [ ] means todo, [/] is in progress, [-] is cancelled and [x] is completed
You can also nest them which is nice

  - [x] A
    - [x] AA
    - [x] AB
  - [ ] B
    - [x] BA
    - [ ] BB
And if you want to document an item you can link to it with [[A wiki link]]

  - [ ] [[A wiki link to another markdown file]]
Scrap paper with list of todos. Throw away or transfer to new list if down to one or two items.
I make daily/weekly/monthly goals, and structure it in whatever App I use e.g. Linear, Todoist, or Notion.

- Monthly goals are very high level and few (e.g. “Make PoC for this”, “Redesign and relaunch blog”)

- Weekly goals are more tangible and limited (e.g. “Settle on approach for calling Rust from Swift code”, or “Finish design and styling of posts”)

- Daily are very concrete (e.g. “Set up UniFFI pipeline to generate Swift bindings” or “Implement new theme across blog pages”)

Sometimes things come up that I discover during implementation, and then I typically shift a daily goal to the next day.

Has worked well so far for giving me focus, and I then pick the daily goals based on the weekly focus from the list of many open tasks/issues I have in my various projects.

I set up each thing I’m working on as a Project in e.g. Linear, and immediately add a priority when I add things, which allows me to easily keep an overview of many smaller or larger projects I might have going on or want to do in the future.

While I do like paper, for me that’s only for ephemeral things. I prefer to keep things digital, allowing me to easily add stuff from my phone in the go when I get an idea while being out-and-about. I also write much faster on a keyboard and use the various tasks as the dumping ground for info while I’m working through something or researching something.

I really like using nested bullet lists. When I think of a project idea, I create a new list.

Each bullet is a goal of the project, and then I split it into sub goals and problems, and keep notes as I go. One thing that really helped was the soft rule of only allowing leaf nodes to be actual tasks, everything else has to be a problem or goal. If it turns out a leaf node needs to be split up further, I gotta re-formulate it as a goal/problem.

Also, I try not to work on anything before I've written it down first. Since I've been doing this, it's easier than ever to come back to a project after not working on it for a while. I've always thought that people write things down to remember them, but for me at least it seems that it helps me forget and free my mind for other things.

It's important to me that the software supports infinite bullet nesting. I use Dynalist but there are other good ones out there, I'd love to switch to RemNote actually.

I use a cascading "knowledge" system myself:

- A pocket Moleskin notebook keeps track of random thoughts, notes, scratches, diagrams, and more.

- This eventually becomes either "tickets" in my issue tracker, or becomes "wikis" or "wiki updates" on my wiki server.

- This eventually leads to things like: snippets, configuration notes, historical documents, record keeping, runbooks, and more.

Eventually it just became "natural" to keep my documents up-to-date, or as issues are discovered get them thrown into the correct backlog.

I write sprawling semi-structured webs of markdown in obsidian. Thoughts written on android while walking around, more coherent long form things at a physical keyboard.

I thought that producing a bunch of trello style cards to look at would help and it kind of did, but in practice I don't seem to look at them as often as the raw markdown.

YMMV though, my solo work is a weighted random walk in the direction of things that look interesting, not an optimal shortest path to a product. Which might be the sidetracked you're talking about. E.g. I'm currently writing a regex engine and that's not especially well correlated with where I was a few months ago.

Emacs/org-mode/org-roam managed, org-agenda on current year notes, notes are time-divided in files, one file per day, one dir per year under a common org-roam-directory. This reduce the amount of files org-agenda have to traverse and long running stuff got passed from an year to another in yearly summary notes.

It's a long road, I've hesitated much since for me it was a slow full migration to Emacs and EXWM at the same time than another step moving most of my configs to org-mode notes, tangle-ed from them and finally org-attaching files.

One part still left behind is literate programming though, I do for something, but not for most of the thing, since I tend to disperse myself in lengthy prose, loosing focus on the code and the available tooling inside org-babel blocks are limited/hard to use respect of a direct-code codebase.

Quarterly goals one year out, monthly goals the next quarter. Keeping these as few as possible, high level but concrete, stretch but attainable. Then re-ranking actual TODOs regularly with respect to these, with low barriers to dropping things that do not contribute to overall goals.
I've been using Post-Its along the bottom of my monitor for 25 years. Works fairly well as they are always right there in front of your face, and if one loses it's stick, well, you know that's the one to focus on or move it to long-term.

This of course only works at a desk. I've never done work on a laptop so my system is very YMMV.

I’m a solo dev. At a high level, I find that just writing down what I’m trying to achieve and referring to it often is critical. The most important things to understand are what you’re building, who your users are, and when you want to launch. Use this as a razor to determine what features to add/remove. This should not be complex - one sentence each! Try to make all decisions through this lens. Revise the lens as you learn more.

In terms of managing the day to do, my project has 4 or 5 modules and each has its own TODO and README in markdown. The README is where I explore the design and the TODO is obvious.

You don’t need fancy tools, what you need is a vision that pulls you along.

You can start with the same tools you would use on a team, and tune for your needs, just like a team leader might do for a team.

For example, for one early startup, while I was the only engineer, and operating in a somewhat reactive mode, I used GitLab Issues to track tasks, and their Structured Labels and Board view to give a modified Kanban-ish view.

For a different solo-engineering project, which nevertheless had lots of interdependencies, and needed some estimating, I used a Gantt-based tool (unfortunately not integrated with GitLab Issues, though it really-really should've been).

That's the tools part. What you might be missing is the social part. If that's bothering you, maybe find a way to get some human accountability, team feedback, etc., even if you're the only engineer. (I'm pretty self-motivated, but I'd do things like show the biz people milestones, achievements, funny or cool things, etc.)

I use our https://github.com/GeneralBots open-source LLM Orchestrator (chat-gpt and claude) to manage a list called ALM with requirements, bugs, tasks and so on. So WhatsApp is a channel to anything that we need. If you need more info, message me.
I'm still trying this out, but I've been using Superlist [0] (no affiliation) for different projects. For me, having a single app that is both a Markdown document <-> todo app has been helpful. I'm able to jot down notes in greater structure and depth than in another todo app and interweave todo items throughout, which helps contextualize tasks a lot better (especially when working across different projects).

Reminds me of org-mode in Emacs - overall, I'm really liking the cross-platform sync and Markdown interface out-of-the-box.

[0] https://www.superlist.com/

Talking with my clients and setting goals keeps me on track.

Organizing that: gitlab issues

Trello board (also use it for personal life). I have lists that separate the different kinds of work that need to be done (dev, marketing, research, website, etc...) and then label them according to how easy/challenging the task feels to me. This allows me to easily be able to pick something to work on every single time.
It kinda depends upon the project.

Small ones just get a todo.org file that I commit with the project.

For medium ones I put a .org file in my "Projects" directory in Dropbox.

For larger ones I put a subdirectory in my "Projects" directory in Dropbox.

i did an hour and fifteen minutes of project management today for some product features, using github issues and their project board.

i use obsidian as a dump for things. i use boards in obsidian to track higher level product stuff + capture any fleeting todos/ideas as obsidian notes, then move that to github issues once i do project mgmt time. and i use obsidian for non-dev project management, like marketing/sales/operations stuff. i also use obsidian for todos like "do some project management for X features or whatever"

long-term notes go into Notion. Short-term notes go into Excalidraw which I treat as a digital whiteboard.