the second-system effect

expression

programmingops culture

Fred Brooks's warning that the successor to a successful system tends to be overengineered with every idea saved up from the first.

The first system was kept humble by ignorance; the second gets all the features its designers wished for, and sinks under them. Protocols, products, and rewrites all fall for it - restraint is a second-system skill.

Fred Brooks observed that the second system a designer builds is the most dangerous one they will ever build. The first is constrained by inexperience and caution, so it stays lean. The second carries every idea that was deferred from the first, and the designer now has enough confidence to believe all of them are achievable at once.

The result is over-generalization: features nobody asked for, abstractions for requirements that have not appeared, configurability where a decision would do, and a scope that grows faster than the understanding supporting it. It is the specific mechanism behind a great many ambitious rewrites that never shipped, and it is driven by competence rather than incompetence.

The defence is structural rather than a matter of self-restraint. Requiring each addition to be justified by a current need rather than an anticipated one, shipping incrementally so reality intervenes early, and having someone empowered to say no to the designer are all versions of the same thing: forcing the second system to earn its features the way the first one did. Brooks's own suggestion was simply awareness, on the grounds that a designer who knows about the effect is meaningfully less likely to produce it.

Also known as: second system syndrome

All glossary entries