Continuing in the theme of fresh beginnings, I wanted to talk about a famous quote:
A complex system that works is invariably found to have evolved from a simple system that worked. A complex system designed from scratch never works and cannot be patched up to make it work. You have to start over with a working simple system.
— John Gall (Systemantics: How Systems Work & Especially How They Fail, 1975)
This is Gall’s law, written by John Gall, a paediatrician and systems theorist. It’s not specific to software, but it’s pretty pertinent in our field. In his text, Systemantics, he encourages system designers to start simple and validate that the system really works before evolving it. In my mind, validation doesn’t just mean, “does it do the thing right?", but also, “does it do the right thing?", which means talking to the consumer of your product constantly to ensure you’re on the right track. As such, Agile software development and related practices have a very similar thinking to Gall’s work behind them.
So why is it that technology companies often wait months before releasing their product?
If you’re going to do anything right, you need validation, and people on the inside track are often the worst-placed to decide what consumers really want. Instead, ship it. If you’re worried about leaking information, control who can see it, but don’t work in a vacuum. Validate, figure out what you’re doing right and keep doing it, and figure out what you’re doing wrong and stop doing it. The alternative is to design a complex system from scratch. And, as Gall said, that never works.
And if you need something a little more software-related before you’re convinced, just look at Linux and the work of the Free Software Foundation. As ESR said:
Release early. Release often. And listen to your customers.
— Eric S. Raymond, (The Cathedral and the Bazaar, 1999)