There is a peculiar house in San Jose, California — right in the heart of Silicon Valley. Called affectionately the “Winchester Mystery House”, today it is a popular tourist attraction. Built and inhabited by the widow of William Wirt Winchester and heiress to the Winchester Repeating Arms fortune, it is a sprawling property which defining characteristic is its quirky (to say the least) style: It is full of rooms and extensions which lead to nowhere, doors which don’t open to any room, stairs without a destination. It is said that construction of the house never stopped.
When I was at eBay in the late 1990s / early 2000s, and maybe as eBay’s original campus is only a stone throw away from the Winchester House, we often made reference to the house when we talked about the sprawling code base which made up eBay back in the day: Patches upon patches which all made sense in isolation but created a monster of a “house” with many, many stairways leading nowhere, rooms without doors, and all other kinds of oddities.
It is an apt metaphor for what happens with pretty much any product — the more mature something gets, the more convoluted it becomes. It is extremely hard to resist the temptation to “just add this one feature” — which, of course, looked at in isolation makes perfect sense, but quickly turns into yet another version of our haunted house.
The seemingly accepted answer is to simply tear down the building every so often and rebuild from scratch. Notwithstanding all the issues you get from Second-System Effect, it also tends to be wasteful and fraught with its own set of problems.
Next time you think about adding a feature to your product or service, ask yourself if it is truly needed — and if so, which other piece you can retire or remove to keep the overall complexity of your system low? There is a reason why Dieter Rams is such a prolific designer — but that is a story for another day.