It is very difficult to always be coding. Here is a list that helps me make progress even when I’m presented with a hairy complicated technical problem. This list also helps soldier on even if I’m not feeling particularly motivated, or in the mood.
I’ve ordered this list from hardest to easiest in an attempt to trick my brain into doing at least one of these things:
- Finish the whole project in one day. BAM.
- Pick an isolated sub-problem and solve that
- Take a 10 minute break and go outside, then come back and look at the problem again
- Write pseudocode
- Write really horrible and ugly and wrong pseudocode, with tons of TODOs and FIXMEs.
- Find a friend who is doing work, and make them guilt you into working with them [New! A highly effective tip suggested by Charles Yeh]
- write tests and example cases to help focus your implementation [New! Big hat tip to Jeremy Hoffman]
On a somewhat different axis:
- Take a pen and paper and sit outside, far away from any screens, and just draw out the problem and how it flows
I actually love drafting with a pen and paper, as you described. Somehow it's easier for me to draw out bullet points, boxes, lines, and bits of pseudocode than it is for me to conceive of it on a screen. A trick I've been doing lately, especially when I have to learn a new system or API with many components, is to put each key function or object on a Post-it note. I stick the Post-Its on my desk, or on a single sheet in my notebook if I want to carry my diagram with me (or draw lines between post-its instead of on them). When I need to change my diagram, I don't have to erase anything, I can just move or replace the applicable Post-Its. High-tech! — Jeremy Hoffman
- Write pseudocode with a pen and paper
- Take nap, but ONLY after you’ve done one of the above things for at least 5 minutes!
If you have any mind tricks, please share!