From an interview with Martin Fowler: The cost of flexibility is complexity. Every time you put extra stuff into your code to make it more flexible, you are usually adding more complexity. If your guess about the flexibility needs of your software is correct, then you are ahead of the game. You've gained. But if you get it wrong, you've only added complexity that makes it more difficult to change your software. You're obviously not getting the payback. It's not hard to guess wrong about flexibility needs. You can guess wrong if requirements change. What you think is a requirement for flexibility now may go away or change in the future. You can also guess wrong if you put extra code into the program to improve flexibility but you don't get it quite right. You get more complexity without getting the flexibility you were after. …If you strive to keep your design as simple as possible by avoiding speculative flexibility, then it's easier to change the code because you have less complication to deal with. The code is easier to understand and easier to change. As a result, you can make changes much more quickly.
Absolutely. When contemplating the necessity of a feature or certain functionality, it is critical to consider not just the up-front cost of the original development, but also the lifelong cost of maintaining that functionality within the codebase. Every line of code added increases the complexity of the system. So, even if a feature could be added for “free”, it will come with a “complexity tax” that recurs for the life of the system. This phenomenon is a major contributor to sinking many projects before they ever go live, as well as to causing the shiny, new system to rather quickly degrade into the brittle, old legacy system that nobody really likes but can’t be fixed.
9:36:30 PM
|
|