Configuration options creep in many different places eating budgets and destroying applications. Often times they're even embedded in the requirements of an application: "Support any number of widgets." More often than not a follow up conversation would go like this:

Dev: How many widgets do you typically use?
User: We always use 10.
Dev: Then why do you need support for any number?
User: We don't want to be restricted in the future.
Dev: What scenarios do you see using a different number than 10?
User: Do I look like I can predict the future?

While it isn't bad to design applications to have growth in them, adding configuration and variability significantly increases the complexity of the application. The need for expandability must be balanced against over design carefully. Adding complexity leads to bugs and crazy test scenarios. This in turn leads to increased cost. Not just in development time, but in the amount of overrun that the project has as these are the largest areas of misestimation. I haven't seen any data on it, but from experience I would say that the number of configuration options not only relates to the number of bugs found, but increases it exponentially.

There are some really good examples of how to handle this. One deals with the MPEG-4 specification. The MPEG-4 specification is broad, it covers such a large area of what you could do with video it is impressive in just that regard. But, this makes it impractical to make a decoder for, much less a cost effective one. So, various CE companies have gotten together and decided on a reasonable version of the MPEG-4 spec, H.264. This isn't saying anything bad about MPEG-4, more that these companies realize that limiting the number of options that the encoder has makes the decoder cheaper and easier to test.

This is something that all engineers can learn to do better. Limiting your options early and effectively will decrease your costs all the way through the process. Make the hard decisions, take some risk, and deal with the problems that come with it. Your architecture will have to survive several redesigns through it's lifetime -- even with that, it will be more solid if the options are limited.


posted Dec 2, 2006 | permanent link