Over-engineered systems evolve through a series of reasonable decisions that can reflect past fears rather than current needs. Read the full article on Communications of the ACM.
How Over-Engineering Became the New Technical Debt in Distributed Systems