Beyond Agile

When something comes along that’s better than Agile, I’ll be the first to jump on it. Even though I’m an “Agilist,” it doesn’t mean I’ve abandoned all my old practices. I still draw on a lot of the skills I developed in my youth.

It’ll take some years before most of what I’m talking about in this book becomes mainstream. But the value of test-first development is so great that most software development will be done that way. It may not look exactly like TDD looks to us now, and it may not use the same tools or be within the same language, but some form of separate verification of code as it’s written will be incorporated into the software development process, perhaps even into our programming languages and IDEs.

The benefits of doing it are so great it’ll simply make sense to do it this way. Building software the way most developers do today will be looked upon in the future the way we look upon people who write code in machine language. Sure, you could do it, but why would you ever want to? Toggling binary switches to enter op codes is a laborious and tedious process. That’s what compilers are for, and catching mistakes that we humans inevitably make is what unit tests are for. But the bottom line is that only people can create software.

Far from being a menial job, software development requires a great deal of skill and creativity to do successfully. If we want to improve the software we create, we have to raise our standards and increase the rewards for those who can achieve those standards. If we do this, people will show up who will rise to the occasion. We can make of it whatever we wish, and this is truer for software development than for anything else. Software is a product of pure thought. It goes right from our head, through our fingers, and into the computer.

And it runs everything.

No matter what business you’re in—whether it’s banking, insurance, trucking, or finance—you’re in the software business. Software runs your business like it runs all businesses, and the software that businesses develop often turns out to be the “secret sauce” for their competitive edge.

Software is at the heart of everything. It’s our society’s deus ex machina. It either enables or inhibits us. So we all have a vested interest in seeing it improve and become more valuable. Yet the software we build today radically underutilizes our resources. We’ve been so constrained in our recent past that we don’t often pay attention to creating detailed, accurate models. We build models that are space efficient or that run fast, and because we haven’t been trained in how to understand and model domains accurately, the software that we tend to build works for what we intended it for but it’s difficult to repurpose, even though, as it turns out, we do a lot of repurposing in the lifetime of software.

When we try to take shortcuts and not build accurate models, our understanding tends to go astray. We miss the big picture, and when we forget the why, things start to become rote.