Editorial Note: I originally wrote this post for the Infragistics blog. Go check out the original at their site. While you’re there, go check out their developer tools and controls.
It’s fun to think of great moments in the history of science, particularly the ones that have a memorable anecdote attached to them. In the 3rd century BC, a naked Archimedes ran down a city street, screaming Eureka, because he had discovered, in a flash, how to measure the volume of irregular solids. In the 1600s, a fateful apple bonks Issac Newton on the head, causing him to spit out the Theory of Gravity. In the early 1900s, another physicist is sitting around, contemplating the universe, when out pops E=MC^2.
These stories all share two common threads: they’re extremely compelling and entirely apocryphal. As such, they make for great Disney movies, but not such great documentaries. Point being, we as humans like stories of “eureka moments” and lightning bolt inspiration much better than tales of preparation, steady work, and getting it right on attempt number 2,944, following 2,943 failed attempts.
But it goes beyond just appreciating the former type of story. We actually manufacture them. Perhaps the most famous sort of example was Steve Jobs’ legendarily coy, “oh yeah, there’s one more thing” that preceded the unveiling of some new product or service. Jobs and Apple were masters of “rabbit from the hat” marketing where they’d reveal some product kept heretofore under wraps as though it were a state secret. All that is done to create the magic of the grand reveal — the illusion that a solution to some problem just *poof* appeared out of thin air.
With all of this cultural momentum behind the idea, it’s easy for us to internalize it. It’s easy for us to look at these folk stories of scientific and product advancement and to assume that not having ideas or pieces of software fall from us, fully formed and intact, constitutes failure. What’s wrong with us? Why can’t we just write that endpoint in one shot, taking into account security, proper API design, backward compatibility, etc? We’re professionals, right? How can we be failing at this?
You might think that the worst outcome here is the ‘failure’ and the surrounding feelings of insecurity. But I would argue that this isn’t the case at all. Just as the popular stories of those historical scientists are not realistic, and just as Apple didn’t wave a magic wand and wink an iPod Nano into existence, no programmer thinks everything through, codes it up, and gets it all right and bulletproof from the beginning. It simply doesn’t happen.