As you can probably tell already, it was a heck of a thing to see. About halfway through the speech, summarized as best it can be below, Lee stopped flipping slides and just talked candidly and from the heart about his apps, his work, and his life. Read on for more.
Lee began by defining what he believes an engineer to be: someone who solves problems. Software engineers solve problems with software, and that's what he did for a long time, but he said that the more problems you solve in any given field, the less interesting it becomes. For any number of problems in the world at large, the only really interesting part any more is application. Creating roads, for example, has been more or less perfected in terms of materials and design, and the only real issue left there is simply in getting construction crews to do the right thing. So, an engineer constantly seeks out new areas, and new problems to solve, because that's what Lee said an engineer does.
He talked a little bit about his early days with computers, and said that, early on, he discovered that his computer was unlike any other tool. As opposed to, say, a screwdriver, a computer was a tool that could change function depending on what software it was running; you could buy a PC for one reason, and end up using it for a completely different one. Lee described computers as full of metaphors: a programmer operates a GUI, which operates according to code, which drives assembly language, which is really running op codes, which actually controls chip voltages, and so on. In the end, he said, it's all a metaphor designed around a "greater truth." "There are no ones and zeroes," his slide said; computers and their software are a way of simplifying the embodiment of larger ideas.
Lee started out designing software for airline companies. Most commercial software vendors didn't want the responsibility of running when air travel was at stake, so he ended up designing his own database and enterprise software. He was eventually given the task of writing some software to update the Terrorist Watch List, which at the time, was simply an Excel spreadsheet with two sections: bad guys and the guys who had the same names but weren't bad guys. When he put together a program that compared older and newer versions of the list and updated everyone automatically, he was lauded by the companies, and it was written that he would become a software engineer. There's a program called Secure Flight. Though he couldn't actually say so outright, "I might have designed that," he said.
"Listen to me," he told the developers there, "because I've been a huge failure." Success, he cautioned, is a terrible teacher; people don't sit down and ask what they did wrong when they win, only when they lose. Failure, he joked, makes us ask, "Why do we suck, and how we can we suck a little less? My God, people." Once Lee realized that he could solve problems and make himself better by trying and failing, he started to see places that he could try to solve problems everywhere, even in organizing his tupperware cabinet. If all problems can be solved by engineering, then he wasn't just able to solve software problems: "What I did for a living," he said, "could help me live."
At that point, he stopped changing the slides and just pushed the talk along on his own. He spoke of impressionist painters like Van Gogh, who not only created art, but tried to throw themselves into what they did and create something that "looked less real but actually felt more real." Lee said that he threw himself into engineering in the same way, and then moved on to engineer not only software, but problems and situations around him as well. It's not enough, he told the crowd, to change things, and it's not enough to change things for the better. He said that you have a responsibility to change things to make them the best they can be. Later in the speech, Lee said that he had "engineered homeless people off of the street." He says that he aims to see the world as a giant software problem, and then code it as he sees fit.
It doesn't always work, apparently. Lee admitted that "I hate everything I've ever shipped." He said that he'd been told "by the man himself" that Delicious Library 2 was good, but that wasn't enough. "Man," he said, "I hate that app." However, he also said that developers shouldn't apologize for work that even they aren't proud of. Eventually, he said, you have to "let yourself be convinced that you are wrong that this sucks," and when you're given praise, eventually agree that the praise is worthy, even if you aren't satisfied.
Lee finished by telling a story about a traffic accident he'd gotten into; he chased down an annoying motorist one day and accidentally bumped the guy's rear fender. "I hit him, if you will. Really more of a kiss." Lee was so angry and annoyed with the motorist when he got out of the car that he expected to "beat him down," but he didn't. Instead, he exchanged information and apologized. Upon reflection, Lee said he realized that he's the one who gets to decide how things are remembered in his life; he can look back at the event with anger, or just ignore it completely.
In conclusion, said Lee, he didn't even really want the word "software" in his title of "software engineer" any more. If a computer is a series of states and ways to change those states, he said, then the whole universe really matches that description as well. That means, he told the developers, that the whole universe is your computer, your playground, and your responsibility. He said that even the earliest computer developers had seen this. "That's what I have to say," he finished. "Enjoy the rest of your life."