Last time, I talked about the refrain " ... about two weeks." This time, I'd like to talk about another Myth: The idea that we can "make it up later."

        Let me explain.

        Let's say that you are asked to estimate how long it will take you to drive home - something you do twice a day, every day, and have done hundreds of times. You might say, perhaps "an hour" based on past history.

        That afternoon, it snows. Twenty minutes into your drive, you pass an accident that takes the road down to one lane. You don't get half-way through the drive until fourty minutes have passed. Your wife calls to ask what time you will be home, as she has dinner coming out the oven at the exact time you promised.

        What would you say? "Sure, I'll be on time, I'll just make it up later"? I don't think so. No, you are more likely to be intellectually honest - not just admitting that you are now ten minutes behind, but assuming that the traffic conditions will lead to more accidents ... and you might be home later.

        Let's take this a bit further: Suppose that when she first asked you, your wife wanted to know the exact time you'd be home. What answer would you give? More likely, something like "An hour, plus or minus twenty minutes." Or suppose she wanted a time you would be home by, guarenteed? Most likely, you'd say "Two Hours."

        Applied to software development, this gives us some very interesting problems. In his book Rapid Development, Steve McConnell points out that planning to make it up later is a classic mistake - you never make it up later. For starters, forced overtime is a game of diminishing returns. Eventually, forced overtime causes enough burnout to be counter-productive.(*) In addition, if you are late, it probably means the project is simply harder or more comples than you though. For example, if you are 25% late when you finish the specification, McConnell points out that you should probably add an additional 25% delay to the schedule for all of the other phases, because. fact is, you're probably going to run 25% late.

        Software Managers have spent years trying to figure out ways to deal with this. Extreme Programming and Staged Delivery offer the possibilities of cutting features and shipping something on time. Joel Spolsky, author of JoelOnSoftware.Com recommends having the biggest feature on your list be called "buffer" and robbing time from that feature when running late. Watts Humphries, of the Software Engineering Institute, suggests tracking the ration between your estimates and actual deliverables and creating a "load" multiplier. The authors of Successful Software Development suggest measuring the projects risk and increasing your estimates to account for that risk. The author of Software Engineering: A Practioners Guide suggests negotiating to cut features, add resources, or ship late when faced with a project that is running late.

        Any way you slice it, they all suggest actually dealing with the problem instead of merely hoping that it will go away. The reality is simple: You ain't gonna make it up later.


(*) Note: Different companies have different cultures. In some companies, "Code-Like-Hell" overtime is compensated by very relaxed undertime between projects. If the coders, and friends and family, can deal with this, this could be a healty work environment. Even Kent Beck, father of Extreme Programming, states that an occasional week of mild overtime is simply part of being a professional. The dicussion above is not about being a professional, it's about overtime abuse.