Friday, June 17, 2005 posted by Joel Spolsky
At some point in the construction of a skyscraper, the last steel beam is put in place on the top floor and you have what's called a "topping out" ceremony. Traditionally this is marked by putting a small tree on the top beam, sometimes accompanied by a flag. The building is nowhere near done yet; walls and floors are missing, not to mention windows, doors, air conditioner vents, the candy stand in the lobby, and the dead guy in cement in the basement who tried to smuggle a non-union electrician onto the work site, but you've hit the top and the building never gets any higher.
I think the equivalent in a software project is what I call the "end to end demo." That's the very first time you can demo your entire project working in some way. Maybe it only works on one machine; maybe it doesn't quite handle encryption properly, yet, and maybe it crashes after ten seconds because it really doesn't like it when you, say, move the mouse, or do anything unusual. Doesn't matter. The end-to-end demo is that magic moment where you go from having a program that's under construction to a program that's basically done, it just happens to have a really large number of bugs. Before that moment, you're building something new. After that moment, life consists of filling in cracks and fixing bugs.
Our first end-to-end demo was on Wednesday, when Michael wandered into my office to say they were ready to show me everything working.
The first time you give an end-to-end demo to the boss, it always fails, and everyone scurries back to their desks to figure out what the heck it is about showing a demo to the boss that makes software which has run successfully 10,000 times before suddenly crash inexplicably, with an error message that is usually no more helpful than "remote side closed connection." And the boss chuckles, and goes back to his office to practice golf putting, while the developers flail around wildly trying to get their code to run in even the most basic way again.
And that's what happened.
But then, suddenly, you find the problem, and you run the demo again, and it works!