IT failures are often rooted in hidden, almost tectonic forces -- organizational, political, and so on -- that are difficult to measure or control. However, this focus can obscure those special folks who actually create the technology we implement and use. I'm referring to programmers.
At their best, programmers are the dreamers, visionaries, and skilled artisans of technology: the real creators. In the truest sense, these great ones have advanced knowledge and human well-being in science, medicine, and many other important domains.
However, we can also point to unskilled, inexperienced, or self-centered programming behavior as a direct source of project cost overruns and delays on some projects. How many programmer-led initiatives have gone late or over-budget because developers created cool software with scant business value?
To learn more about the many faces of programmers, I sometimes turn to the Coding Horror blog. In a fun post, Jeff Atwood somewhat-jokingly describes eight levels of programming achievement:
- Dead Programmer. Your code has survived and transcended your death. You are a part of the permanent historical record of computing. Other programmers study your work and writing. Examples: Dijkstra, Knuth, Kay
- Successful Programmer. Programmers who are both well known and have created entire businesses - perhaps even whole industries - around their code. Getting to this level often depends more on business skills than programming. Examples: Gates, Carmack, DHH
- Famous Programmer. This is also a good place to be, but not unless you also have a day job. But being famous doesn't necessarily mean you can turn a profit and support yourself. Famous is good, but successful is better.
- Working Programmer. You have a successful career as a software developer. But where do you go from there?
- Average Programmer. At this level you are a good enough programmer to realize that you're not a great programmer. If you are an average programmer but manage to make a living at it then you are talented, just not necessarily at coding.
- Amateur Programmer. Being an amateur is a good thing; from this level one can rapidly rise to become a working programmer.
- Unknown Programmer. The proverbial typical programmer. Joe Coder. Probably works for a large, anonymous MegaCorp. It's just a job, not their entire life. Nothing wrong with that, either.
- Bad Programmer. People who somehow fell into the programmer role without an iota of skill or ability. These people have no business writing code of any kind - but they do, anyway.
It's easy to stereotype anyone, placing them on a pedestal or tearing down their contributions as meaningless, although neither extreme provides much value. Having said this, what do you think about the role of programmers in causing or preventing failed IT projects?