Long-distance runners often talk about setting shorter mental goals for themselves as they run. “I’m going to make it to that lamppost” feels possible—easy even—especially compared to a twenty-six-mile marathon. Then once you get to that lamppost you set a new goal: the big tree. Then the red car. And so on.
Software developers aren’t always sure—in fact we’re almost never sure—how long a project is going to take. And there are a lot of reasons for that, none of which is laziness. The profession of software design is, in many ways, barely past the starting line, and we’re not exactly sure we can finish a marathon. We can’t see the finish line from the starting line—we’re not even sure in some sense how long the race actually ...