Ask HN: How do you stay organized for solo dev?
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 ] threadhttps://tom.preston-werner.com/2010/08/23/readme-driven-deve...
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 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.
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.
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.
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.
>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?
GitHub flavored markdown will format a list like this:
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.- 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.
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.
- 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 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.
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.
This of course only works at a desk. I've never done work on a laptop so my system is very YMMV.
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.
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.)
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/
Organizing that: gitlab issues
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 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"