Atul Gawande expanded a great piece in the New Yorker from 2007 into The Checklist Manifesto, a short, compelling read about how a simple tool can help humans tackle complexity.
Most of the book explores reducing human error in medicine (spoiler: good checklists prevent mistakes). But Gawande includes a fascinating chapter on the construction industry where he writes:
For most of modern history… the dominant way people put up buildings was by… hiring Master Builders who designed them, engineered them, and oversaw construction from start to finish, portico to plumbing. Master Builders built Notre Dame, St. Peter’s Basilica, and the United States Capitol building. But by the middle of the twentieth century the Master Builders were dead and gone. The variety and sophistication of advancements in every stage of the construction process had overwhelmed the abilities of any individual to master them.
The solution? A combination of delegation, communication, and checklists.
I see many parallels to the computing industry. Thirty years ago, Steve Wozniak designed and built a complete computer by hand, the now-legendary Apple I. Today, I carry a computer many orders of magnitude more complex than the Apple I in my pocket: the iPhone. There’s no one person who can understand every single component of the iPhone and how they work together, let alone assemble one from scratch.
Our solution in both hardware and software is abstraction. Different specialists and companies handle different components, and agree on interfaces between those components, much like the plumbers and electricians and HVAC specialists collaborate on a skyscraper.
In software, abstractions have evolved at the same speed as the underlying complexity, so that applications like the webserver Nginx and the game Minecraft can still be largely written by one person. The tools just keep improving.
The Apple iPhone SDK is a great example of an exceptional tool: for (almost) no cost, Apple offers developers a complete coding environment, UI components to make beautiful interfaces, a distribution channel, and payment processing. It’s never been easier for a team of one or two people to make great software that reaches a large audience.
Moreover, programmers have created many varieties of automated checklists to fight against increased complexity, from unit tests to full functional tests that click on buttons within an app.
Without such tools the age of the programmer “master builder” would have ended long ago. I’m curious if we’ll ever reach a point where one or two people can no longer create meaningfully useful applications.
The Checklist Manifesto can be found at Amazon and elsewhere.