Roy Osherove has a good piece here called Invest in the design of the system every day. He’s got it nailed:
Without daily attention to design, the cost of changes does skyrocket. The dire predictions of the critics comes true: poorly designed, brittle, hard-to-change systems.
Right on! You have to keep a constant mind on the overall design of the system as well as the task at hand. You have to keep an constant eye out for areas to improve the design of your system. And don’t be afraid to make the changes! We are practicing this on our current project with success.
If “small, safe steps” is how to design, the next question is where to design. The simple heuristic I have found helpful is to eliminate duplication. If I have the same logic in two places, I work with the design to understand how I can have only one copy. Designs without duplication tend to be easy to change. You don’t find yourself in the situation where you have to change the code in several places to add one feature.
Take the time to make the changes. Think through how you can change the beast of a system to avoid duplication. I am convinced it improves the system. On the flip side it does make it harder to predict what is impacted by a second change, but I guess that’s where tests, routine and good documentation comes into play. 😉
Alright, I can’t quote anymore now. Read the short article yourself. 😉