Years ago, in the book Designing Data-Intensive Applications, I came across “Gall’s Law“. It’s a hot take on building complex systems by systems theorist, John Gall. The law resonates deeply with me; and, I wanted to pull it out into its own post so that I could share it more easily:
A complex system that works is invariably found to have evolved from a simple system that worked. The inverse proposition also appears to be true: a complex system designed from scratch never works and cannot be made to work. You have to start over, beginning with a simple system.
— John Gall
As a software engineer, it can be overwhelming to have a vision in my head of what an application should look like. And then, to imagine just how long it will take to actually materialize that vision into code. The sheer amount of theoretical work can make the very first step feel almost insurmountable.
But, Gall’s Law gives me comfort. Starting small and then evolving a system over time isn’t just a practical way to get work done – it’s the only way to ensure that a system continues to work and has a chance at becoming successful.