Everyone has memories of certain formative experiences that seemed to mark the end of naive adolescence and the beginning of cynical adulthood.
When I think back over my career as a software developer, I realize that I’ve had several experiences that taught me some hard and valuable lessons about the art and science of software development that seem like rites of passage in hindsight.
Here are some of my more memorable ones. Most are either bone headed mistakes or else situations that could have been avoided with more disciplined engineering practices and better methodologies in place. Nevertheless I look back on them with a slightly masochistic fondness. After all, what better way to truly understand the reasons behind best practice than to have experienced the pain that they are trying to remedy first hand.
In no particular order…
- Releasing software to production that took twice as long as the original, padded estimate with half the features and still having the users be happy about it.
- Being on both the giving and the receiving end of a situation where consultants were given god-like powers by executive management.
- Laughing out loud in a meeting with an auditor because I thought they were making a joke about some new software development mandate only to find out that they were serious.
- Averaging more than 70 hours a week for 6 months straight and then getting yelled at for not making an arbitrary delivery date when the requirements were in a constant state of flux.
- Feeling more like a lawyer than a developer while trying to explicitly capture requirements or determine whether an issue that surfaced during testing is really a new feature or a bug.
- Realizing for the first time that office diplomacy often had a bigger influence on project success than how many software best practices were being followed.
- Deciding to stop printing out a project’s object model and\or database because it would no longer fit on the walls of the largest conference room.
- Being at least indirectly responsible for a bug that cost the company more money than I made in a year (I used to work in a banker’s bank that loaned billions).
- Helping to write a 500 page requirements document that very few people read and that was hopelessly out of date before it was even finished printing.
- Getting woken up on a Friday night in order to troubleshoot a production problem remotely in a code base that I’ve never seen before.
- Accidentally trashing a half million records in a production database.
- Having to fix a problem with a system that the company no longer had the source code to.
- Realizing that I no longer remembered how to do a hello world app in a technology that I used to be viewed as an expert in.
- Spending multiple days on a problem that took only one line of code to fix.
- Spending over 6 months creating an application that worked flawlessly only to have it scrapped because of a merger and downsizing.
- Being treated like a hero for out-of-the box functionality that took only minutes to implement.
- Being treated like an idiot for taking too long to solve a nearly impossible problem that other developers weren’t even sure could be done.
- Being solely responsible for the decision to fire another developer.
- Having a sense of deja vu when reading about a latest and greatest technology and\or methodology.
- Having to debug and then clean up the data carnage caused by a 1500 line stored procedure with no error handling or transaction management.
- Realizing that I still love my job even after eight years of coping with extreme dysfunction in an industry that rarely learns from its mistakes.
Do any of these sound familiar? What are your most memorable rites of passage as a developer?