Add little to little and there will be a big pile.
Defined by FredBrooks in TheMythicalManMonth the SecondSystemEffect is what happens to a designer's second project, and it isn't pretty.
This (The Second-System Effect) is the title of chapter 5, where Brooks describes it:
- "An architect's first work is apt to be spare and clean. He knows he doesn't know what he's doing, so he does it carefully and with great restraint."
- "As he designs the first work, frill after frill and embellishment after embellishment occur to him. These get stored away to be used 'next time.' Sooner or later the first system is finished, and the architect, with firm confidence and a demonstrated mastery of that class of systems, is ready to build a second system."
- "This second is the most dangerous system a man ever designs. When he does his third and later ones, his prior experiences will confirm each other as to the general characteristics of such systems, and their differences will identify those parts of his experience that are particular and not generalizable."
- "The general tendency is to over-design the second system, using all the ideas and frills that were cautiously sidetracked on the first one."
briefly...
- The first time you use a new technology or build a new type of system, you know that you're a beginner, so you tend to be naturally conservative.
- The second time around, you have experience. You know what you're doing. You have success under your belt, so you pull out all the stops and do all the things you are afraid to do the first time around.
If your project is the second system for most of your designers, then it will probably fail outright. If it doesn't fail, it will be bloated, inefficient, and icky.
It's a case of BellsWhistlesAndGongs, every little neat hack that was put off during the first system's design is used with abandon on the second, usually because the architect thinks he knows what's going on. ExtremeProgramming seems like it would obviate many of the causes. Especially the readiness for change.
Alternative: YouArentGonnaNeedIt.
I've experienced this first-hand as a designer. Probably the only thing that saved the project was a few timely insights about YouArentGonnaNeedIt.
(Now I'm on a second system project again, but this time it's not my second system).
I've seen this many times. Often, one contributing force is the demand from Marketing that the second system do everything the first system did, plus be multi-user, fault-tolerant, more fully BuzzwordCompliant, et cetera, et cetera, et cetera. -- DaveSmith
The solution is clear, skip the second system, directly implementing your third system.
Or as my mom likes to say as she plays with my two-year-old: "If I had known that grandchildren are so much fun, I would have had them first."
See ThirdSystemEffect