Getting things done in small increments (2022)
dubroy.com
dubroy.com
Everything I'm working on, no matter how small, starts as an issue.
I post a continuous stream of comments on that issue as I make progress - documenting what I tried, what failed, what I've figured out, what micro-decisions I've made.
Many of my GitHub repos, both public and private, have issues with dozens of comments, all of which are me just talking to myself.
This is the single best solution I've ever found to the "interruption" problem. If I get interrupted, or distracted, I can read through my issue thread later and pick up where I left off.
I wrote a bit more about this approach here: https://simonwillison.net/2022/Nov/26/productivity/
A recent example issue: https://github.com/datasette/datasette-enrichments-gpt/issue...
I use org-mode for personal project management, and by design it intermingles notes and todos. But it never fully clicked until I started putting the notes closer and closer to my repo (my workflow pre-dates github, but this approach makes me consider some modernization :))
- it's centralized; sometimes projects are related and being able to search for "all project notes involving LEDs" is useful across repos
- sometimes project work is not solely related to code, and in that case your notes are split between repo-notes and non-repo-notes
- Git issues build up and become huge threads over time, lack hierarchical organization or advanced state/dependency tracking, rely on arbitrary tags, etc.
- Git issues are non-personal, often public-facing - and even on personal repos there is sometimes the thought that you might publish the git repo one day, and now it's littered with your private thoughts.
- During dev, the process often is a bit experimental in nature - this amounts to tons of failed ideas or dead notes that clutter issue db
- Not a lot of support for the note-type distinction between "moonshot"-style rough ideas and actual concrete projects. If you use GitHub Issues for all your notes, you'll have all your wacky ideas mixed in with your actual issues. You'll subconsciously avoid posting the wild ones which means you'll subconsciously damper your creativity.
All of these lead me to suggest sticking with a well-designed centralized project note-taking system, use GitHub Issues to track /issues/ and then /link/ to the issue in your note-taking system (ideally with a little automation glue) or simply avoid GH Issues entirely for your personal issue tracking and work directly off of your notes system.
- I have a simonw/notes repo which will NEVER be public, which is for me to put issue threads in for things that aren't part of one of my other repos, or that I want to keep private. I sometimes change my mind and transfer issues out into other repos using this trick: https://til.simonwillison.net/github/transfer-issue-private-...
- I frequently run searches across every issue in my "simonw" GitHub profile, which covers both my public and private issue repos
- I also built https://github-to-sqlite.dogsheep.net/github/issue_comments - a separate Datasette search interface across 10,000 issue comments from my various repos. I use that a lot less now that GitHub search has improved though.
- For tying issues together, I use GitHub Projects - which can contain issues from multiple repos in a single place. I use that for my personal TODO list, and for collaborations with other people that span multiple repos.
- I link issues together a LOT - if you add a "- #123" Markdown bullet point list in a GitHub issue comment it will turn each bullet point into a fully displayed link to the referenced issue, including its open or closed state.
- You can use this for checklists too: "- [ ] #123" will turn into a checkbox which automatically checks itself when the referenced issue is closed.
- I use GitHub labels for things like "Research" to mark issues which are longer running research things as opposed to active bugs or features.
Obsidian plus a data query plugin can do most of the stuff you've described but my data isn't at the mercy of a 3rd party, so that's what I go with.
I'm slightly reassured by how useful their APIs are. I have automated exports of a lot of my GitHub issues, though I really should shore those up and make sure I'm capturing everything.
That's one of the reasons I built https://github.com/dogsheep/github-to-sqlite
Sometimes I catch myself thinking about progress on a project as the process of moving my notes from one state to another, with the actual work I need to get done being a "side effect."
Just like the author suggests leaving a failing test case so it's easier to resume, I leave a syntax error, or something small of the sort undone.
It has been a much better way to tackle the inertia of getting started.
Great article to break out of that cycle.
I have been working hard to improve my upside-down life for a while now, and somehow I got into the habit of waking up at 8am, faffing about until 9am on the dot, then turning on my PC and doing deep work. Phone in focus mode, no one at home, no one really visits before the afternoon. Body is rested, stimulants are kicking in, and there a whole day of possibilities ahead.
Now, even on weekends and days off, I feel dirty if I don't do productive or creative work between 9-1pm. It's become a habit like brushing my teeth. That said, my afternoons are still all about procrastination, and fixing that is a bigger challenge...
Something even better: Teach kids by example how to acquire habits.
It is the best skill you can teach a child, as she will use it the rest of her life. And kids learn much faster and with way less effort than adults.
let’s call it “the death of project management”.
- Every Human and by extension every group of humans has an id ego and superego
As we expand up sizes of groups (I take two orders of magnitude) we treat the lower group as id and their day to day needs become angry passions to us.
The point being making a plan seems like ego managing the balance. But far too often the plan is prescriptive guesswork and holding to the plan is inflexible and frequently poor choice.
The point I am trying to make is plans that involve dates are almost always the wrong kind of plan but we still need to track where we have spent time and need to make the journey many times (something about patchworks vs zippers)
If you assign every hour a job, and you take care of "paying yourself first" by taking into account critical/high-priority time-spend first and then allocating for yourself the liesure time last; assuming that your estimates are correct and realistic and don't forget to include all overhead, you can safely say "hey, I have budgeted away 4 hours of free time today and I can use it guilt-free because I already have accounted for all my critical tasks time-spend."
The reason this is not often done however is because it's hard. Time continuously moves, you can never pause to analyze your usage. And the assumption that "your estimates are correct include all overhead" is really hard to ensure - you need to have excellent time tracking and estimation skills to inform/predict those estimates. And time tracking is too much effort to do manually, so it requires good supporting systems, which require intensive classification techniques, which really don't exist yet.
But I digress. We're basically discussing budgeting, but for hours instead of currency, here.
Life is chaotic. Picture, for analogy, a Lorenz attractor https://www.youtube.com/watch?v=Qmbq82jwHgY our projects gravitate toward a goal, we make adjustments that drive us closer and push us apart. We can't go back and make difference choices, so where we are and where we go heavily depends on where we were.
When we define plans or delegate, I think too often we think in terms of "I am here and I want to get there" instead of "what is a robust way to nudge us toward our defined goals, how should the forces that shape our trajectories balance out to keep us in the right regions of the space of possibilities."
In a sense, this is the difference between having a project and having a strategy.
I will leave a todo or comment of the next steps in the commit message, and each day i start out with a 'well what did i even do? git log -n 1'.
"Leave a broken test" doesn't work for me, because the test can be breaking for other reasons, and it often takes a lot of time to set up a test, in which you wake up with a better / cleaner solution. (so the test you wrote is testing the wrong implementation.)
I've been trying out "logseq"[1] for daily journaling, which allows you to see what you did yesterday VERY easily, and this has been pretty good for me. (but i don't normally use these note taking apps and it possibly won't last long, we'll see.)
Isn't that a smell?
There was a recent topic on testing. In my view, I should be testing the API of units of coherent logic. If I change the underlying implementation of that logic, why should my tests change?
My (awful) hack is that I stay up really late while the house is quiet.
As a first time dad, do as many diapers as you can, wash and dry all of the bottles and/or pumping stuff you can, get the kid in and out of the car as much as you can, and just do everything you possibly can. No matter how exhausting it is, it's orders of magnitude easier than pregnancy, birth, and the first year for your wife. She'll definitely appreciate it, and it'll really help your marriage.
throw expectations out the window and set yourself (and business) up to be resilient to you having other time commitments / balancing with family time.
I have one 1.8yo, and another on the way; I can only ever get things done if I wake up at 6am and the little one doesn't have her eyes shoot open at that time.
Would not trade this time (with the kids) for all the success in the world though; you don't realise how much other stuff doesn't matter, until there's something else more important.
Unless you’re pushing parenting duties solely into your partner, like the absentee father who’s trying to make partner at the law firm, you’re going to be limited to working 40 hours per week, or less, and sleep deprived for months, maybe years depending when the baby starts sleeping through the night.
With that, if you’re one of those hyper-conscientious types that gets more done than everyone else yet always seems to have free time in the work day and never works nights or weekends, it may have little effect on your work.
If, however, you’re like me and take on more than you can chew but make up for it by obsessively learning every waking hour outside of regular working hours, your productivity is going to get crushed.
My only advice is:
* There’s the pain of the thing, and there’s the pain of resisting the thing, and one of those is optional.
TFA is about non urgent important tasks that you want to show incremental progress on. If there are multiple of those then those short bursts of works actual work can be eaten up by context switching, reprioritization, scheduling, etc.
I remote in, do something, write notes, then get back to life. I’ll check back once I have time. I even have wireguard set up so I can remote in from anywhere!
For me, it’s really about deciding about what bit of micro “value” I can do next, doing it, and leaving things in a working “done” state. And interestingly not so much leaving something “unfinished” as some commenters say.
And also maybe not knowing exactly the next thing to do. Tomorrow can bring unexpected things, new priorities (stemming from me sometimes depending on the situation) and that’s ok with me. Leaving things “done” makes this all fine and fairly non-painful.
Suspect this takes practice and a certain amount of confidence. Submitting a PR that doesn’t do all that has been planned/asked of you might be scary.
Having children is optional, and in many ways, can reasonably be said to ruin one’s life. They’re also expensive and terrible for the environment.
Working around an opt-in kneecapping seems silly to me. Just don’t reproduce and you won’t have to figure out life hacks because your children’s existence is incompatible with productivity in areas other than raising children.