I was a waterfall developer for over fifteen years before moving to agile in the early 2000s. The type of development I did back then was unsustainable.
Things were fine, even relaxed, during analysis, design, and coding. But nine months into our twelve-month project, when we went to integrate our code, we realized that we were six months behind. Well, actually, we were always six months behind—we just didn't discover it until then.
Integration is where the truth of a project comes out. It isn't until our code is interacting with the rest of the code in the system that we know for sure it works. The longer we delay integration, the further we are from that confirmation.
But I didn't know any of this back then when I was doing waterfall development. We knew integration was painful, so we avoided it, which seemed like the sane thing to do. But some problems get worse when you put them off, and this is an example of one of them.
The last three months of the project—which inevitably turned into six months or more—became a living hell. I remember walking back to my car in the dark because it was about 10:00 pm and then realizing that I hadn't seen daylight in South Florida in nearly six months.
When I was younger, I could do things like that. I had boundless energy. Now, in my late fifties, not so much. The good news is that although I may not have boundless energy, age has granted me some wisdom that allows me to direct the energy I have in fruitful and productive ways.
I've heard stories of several people who got out of the software industry because it burned them out. It's definitely not for everyone, but neither is any profession. People who write software typically love to write software, and when you're following your bliss, that is always a more sustainable path.
Our job as managers in the software industry is to help people discover their passion for creation, because software development is a huge act of creation. It involves the whole brain and uses a range of our intellectual facilities, including visualization, abstraction, and reason and deduction.
In agile development, we want to support a sustainable pace because we recognize that when we overwork ourselves, we tend to introduce defects that are more costly to repair than can be offset by any efficiencies we gain by putting in massive amounts of overtime. Yes, sometimes we come up against deadlines, but mostly, if we’re doing our work well, then we should be highly effective within a reasonable forty-hour workweek.
We are professionals, after all. This is what we do, and what we will do for perhaps the rest of our careers. If that's true, then we need to find ways of making that process sustainable.
Sustainability was a central theme for the creators of Extreme Programming. This practice encourages collective code ownership rather than siloing knowledge, so no one person on a team becomes a critical resource. It encourages a sustainable pace with minimal overtime so we don't burn out. It also encourages many forms of feedback, such as continuous integration and test-driven development, that give us a true measure of our progress, which can be energizing.
Being an old guy in the software industry seems like a pretty good deal to me. There are things that I know I want to pass on to future generations of developers, because I know how valuable they are and how we are in desperate need of creating a real industry and a true discipline for software development, just like other industries and disciplines.
Development is a very practical kind of engineering that requires us to break down tasks into subtasks that are manageable enough for a computer to handle them. In the process of doing this, we want to start aggregating similarities in what we see, which helps us build solutions that are more maintainable and extendable.
This is a very exciting time to be part of the software industry because it's still taking form in establishing itself. Let's learn from other industries in other disciplines and take the best from each. I like the idea of small practices that doctors have developed so that they can build a small community of independent practitioners. I also like the medical model for internships, so that new graduates in software engineering get some experience working under professional software developers in the field.
But I believe most importantly that sustainable development requires us to have a set of common standards and practices. Having a common body of knowledge that transcends a programming language, such as design principles, design patterns, and Extreme Programming practices, along with other agile technical practices, can significantly elevate the software industry’s success. There are pioneers in these areas, and they are taming the Wild West of software development and providing intellectual tools to help us manage the principles and practices we apply in software development.