I have a new quote on my wall:
"New hires tend to want to do complex things, but we know complex things break in complex ways. The veterans want simple designs, with simple interfaces and simple constructs that are easy to understand and debug and easy to put back together after they break."
"The best advice is just basically to keep everything as simple as possible—simple processes, simple SKUs, simple engineering. These systems get to be very big very fast. I don’t think there’s really any one particularly hard, gnarly problem, but when you add them all up, there are lots and lots of little problems. As long as you can keep each of those pieces simple, that seems to be the key. It’s more of a philosophy, I think, than anything else."
— Phil Smoot, Product Manager for Hotmail
The full interview with Phil can be found here.
If you tackle every problem with the belief that there is a simple solution, you will usually find one. Sometimes to solve a complex problem you just need to piece together several individual simple solutions.
Well what happened if you already build an overly complex system base on inexperience when you first started, and now a few years down the road you’re stuck with it?
Start gutting and start from scratch?
Don’t rewrite it unless it is irreversibly broken, which it probably isn’t. And keep everything else you do from here on out simple.
If it is broken, consider replacing individual parts of the system one at a time with something better, rather than rebuilding an entire new system from scratch. Your new system probably won’t be perfect either.