Twitter’s early architecture was designed for a fan-out model where a user’s timeline was assembled by reading from a central feed. When celebrity accounts with tens of millions of followers arrived, the model broke: a single tweet required tens of millions of write operations to fan out to all followers. The architectural model had been designed for the median case. The product succeeded beyond median expectations, and the architecture had to change.
Slack’s growth exposed a different problem. The product was designed for teams of tens to hundreds of people. When it reached enterprises with tens of thousands of employees, search became unusable. The search index had been designed for a bounded message corpus. Enterprise-scale usage produced an unbounded one. The product’s success created the architectural problem.
In both cases, the engineering teams had built correct, well-tested systems. The systems failed not because the engineering was wrong but because the usage model that materialised was different from the usage model that was assumed.