- **Site**: [[]]
- **By**:
- **Date Published**:
- **Date Read**: 2025-03-12T11:52:34+00:00
- **[Read Original](https://dubroy.com/blog/getting-things-done-in-small-increments/)**
- **Tags**:
**Note:** Below is the text from an online article – none of the writing is by me.
[Patrick Dubroy](https://dubroy.com/blog)
March 21, 2022
Many programmers subscribe to the belief that they need large blocks of uninterrupted time to get anything done. Paul Graham wrote about this in [Maker’s Schedule, Manager’s Schedule](http://www.paulgraham.com/articles.html):
> One reason programmers dislike meetings so much is that they’re on a different type of schedule from other people. Meetings cost them more.
>
> \[Programmers\] generally prefer to use time in units of half a day at least. You can’t write or program well in units of an hour. That’s barely enough time to get started.
>
> When you’re operating on the maker’s schedule, meetings are a disaster. A single meeting can blow a whole afternoon, by breaking it into two pieces each too small to do anything hard in.
Don’t get me wrong, I love having a whole afternoon to work on something without interruption. It’s probably ideal for most people. But it’s an exaggeration to say that it’s *impossible* to program well in units of an hour.
## Parent’s schedule
Last summer, my wife and I had our third child. Before we had kids, I’d sometimes spend a full day — or even a weekend — working on a fun programming project. But now, with three kids and a full-time job, I’m lucky to find a half dozen free hours spread out across the week.
My primary side project is [Ohm](https://ohmjs.org/), a parsing toolkit for JavaScript. I’ve been working on it since 2015, and been the sole maintainer since 2017. Since our third child was born, I’ve managed to ship:
- a new [major version](https://dubroy.com/blog/ohm-v16/)
- three minor versions with various bug fixes and new features
- a [brand new web site](https://ohmjs.org/) for the project
…and about 75% of the time I invested in this was in increments of one hour or less, when my kids were sleeping.
Trying to get work done this way was certainly a big adjustment, but I managed to develop some habits and find some tricks that made it work for me. Obviously I can’t say that what works for me would work for everyone. But like almost everything in life, I’m pretty sure most people can improve significantly through practice.
## Some useful tactics
Here are some things that I found to be helpful (caveat lector, YMMV, and all that) —
**Make progress every day.** A few things (like minor bugs) might take less than an hour. But most things worth doing take longer, which means that I can’t finish them in a single sitting. On those things, I try to make a little progress every day — even if it’s only 20 or 30 minutes. It keeps the cache warm: if I work on something early in the morning, I’ll keep thinking about it over the course of the day. Then, if I have another half hour at the end of the day, the problem is still pretty fresh in my head.
I’m not strict about *when* I do the work. Sometimes I’ll work in the early morning (~6am, right after making coffee), and sometimes in the evening (9–10pm). The most important thing is to make a little progress every day.
**Always know what the next thing to do is.** For me, this means having either a clear end goal (e.g., fix this bug, make this test green) or a concrete next step (e.g., change all callers of *wiggle* to call *waggle*). If I plan this ahead of time, then when I sit down at my computer, I can immediately get to work.
I was never a huge fan of test-driven development, but I do find it helpful in this context. Once I have a failing test, I find it much easier to resume the work again later. And writing the test helps me figure out the next manageable unit of progress.
If I need to stop working right in the middle of something, sometimes I leave a note directly in the source code, like this:
```js
TODO make sure examinedLength is properly calculated here!
const origPos = inputStream.pos;
if (!inputStream.matchString(this.obj)) {
...
}
```
This will cause a syntax error the next time I run the tests, which reminds me of what I need to do next.
**Pay attention to feedback loops.** When working in such small increments, I find fast feedback to be even more important than usual. Depending on what I’m working on, this might mean unit tests, [fast refresh](https://github.com/pmmmwh/react-refresh-webpack-plugin) for React stuff, or using [watchexec](https://github.com/watchexec/watchexec) to automatically re-run a script.
**For bigger things, make a plan and keep a log.** When I’m starting a more complex task, like a performance investigation or a big refactoring, I take 10-15 minutes to write down a plan before I start the work. Nothing fancy, just a few bullet points in a text file. And when I get interrupted, I take 30 seconds to summarize my progress and any next steps I should take.
I find that planning my work this way also makes me more effective. When I had big blocks of uninterrupted time, I would usually just dive into a refactoring without thinking it through too deeply. But when I sit down to plan things out in detail, I often realize that I’m missing a critical detail and need to adjust my plan.
**Block distractions.** If I’m not careful, I can fall into a habit of checking Twitter, HN, etc. as soon as I sit down at my computer. This can easily waste 20 or 30 minutes at the start of a working session. If I’ve only got an hour, it’s half gone.
When I blocked those sites on my computer, I found it much easier to get into a focused state quickly. It also prevents me from quickly checking command-tabbing to the browser whenever I’m stuck too long on something tricky (which I’m also guilty of).
Most of these things I learned the hard way, as I struggled to try to get things done in the limited free time that I had. I don’t think there’s anything groundbreaking here, just a few small things that have made a difference for me. Maybe they’re useful to you, too.
Beyond the tactics, I suspect that practice is also important here. JB Rainsberger suggests that [using the Pomodoro technique will train you to achieve focus quickly](https://twitter.com/jbrains/status/1504836590941655046). I’ve used it off and on over the past couple years; it’s possible that helped as well.
💬 *Want to leave feedback? [Send me an email](https://dubroy.com/blog/about/#contact) or [respond on Twitter](https://twitter.com/dubroy/status/1505904560736374787).*