Gall's Law

I ran across an engineering aphorism or principle called “Gall’s Law”:

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 working simple system.

Here’s a good exploration of Gall’s Law.

My professional experience says this “law” is true. Everything I’ve worked on that was successful started from some rinky-dink little program, or even a proof-of-concept script, and grew from there.

My current practice when adding a new feature (which is anything other than fixing a bug) is to write as small a program as possible that can implement the desired function, then experiment with that small program to understand what can happen that I don’t (naively!) expect to happen. Only after fiddling around do I add the new code to project. Any new code will be based on the code in the small program.