Sources Of Rework

There are two sources of rework. The first is improper understanding of the problem and solution. We cannot eliminate this kind of rework for three reasons:

Our understanding is always imperfect, and we refine it incrementally.

Our customer's understanding of his own needs is imperfect and he refines it incrementally.

The needs of our customer change as the business pressures upon him change.

This kind of rework is *good*, and we want our software to be nimble and flexible enough to easily support it.

The second source of rework comes from poor dependency structures. As the software changes over time, dependencies creep into it. As the dependencies increase, the code becomes ever more brittle. Changes that should be easy become gargantuan tasks. Modules completely unrelated to the changes at hand require heavy modification and risk malfunction. Eventually the development effort slows to a crawl because of the tangled nature of the dependencies. --Uncle Bob on comp.object



See original on c2.com