When schedule is fixed, the only stick you've got to wield is the scope stick.
Writing software is often times too much exploration, in many cases both for the programmer and the customer.
When writing atop many AbstractionLayers
, it's easy to fall through a hole in a LeakyAbstraction
and lose an order of magnitude of progress. When my GUI widgets are behaving, I can code all the live long day, plowing through tasks at a nice pace. Then when that list box widget I've been using suddenly stops displaying the scroll bar when I add ‘fuzzle’ to it (or when my outgoing email fails suddenly because it has a period at just the wrong place - TheCaseOfTheMissingPeroid, or when my SQL statement suddenly stops working because I was missing a newline at just the right place - SqlServer7OdbcAndTempTables
), I've just fallen down a time sink that all but stops my overall progress. While finding a fix/workaround for this bug, my level of effort doesn't decrease, I haven't suddenly got lazy, it's just that I'm tinkering ‘round in the lower levels of the huge machine my top level stuff rides on.
This is one reason overtime as a solution for the schedule problem is dicey -- risk of abstraction layer time sinks.