I think a lot of companies believe that Agile software development is merely a process and that somehow software developers know how to use. But in my experience that is simply not true.
The way we build software is different in an iterative process than the way be built software in a traditional Waterfall process. We’ve learned so much about how to build maintainable and extendable software that we really didn’t know in the past decade, so it important to learn the latest principles and practices as software developers. This greatly increases our value and it greatly increases the value of what we produce.
These are concepts that are difficult to get from self-study alone. Most of us learned to become software developers on our own. We may have gone to school and learned programming languages or we may have been fortunate enough to have the mentorship of a true master when we first arrived on the job but ultimately the things that made us most successful as software developers are inevitably what we figured out on our own because that is the nature of our profession right now.
But it doesn’t always have to be that way. In fact, our “profession” needs standards and practices to truly excel; it needs pier reviews and mentorship and apprenticeship programs in order for us to be able to quickly disseminate the key skills needed to become an outstanding developer. Much to my surprise, these skills are easy to learn. After spending my life learning how to teach them I have discovered that they are easy to teach, if you know what you are going for.
The challenge is that what we are going for as software developers, in our industry, is not obvious. Being a good developer, just like being a good anything, requires a deep and passionate understanding of the subject. Our goals as good developers are not well understood throughout our industry. For most of us, we believe in “good enough”. If our code works and is good enough to fulfill the specification then we think we’ve done a good job.
But good is not nearly good enough in this day and age. In order to excel and to be outstanding we have to build software that is more than just a fulfillment of the specification. But, at the same time, we cannot build software that is in anticipation of anything that could happen, so we have to maintain a delicate balance by following specific principles and practices that give us flexibility without adding more effort to our tasks, because we really have enough to do already and we don’t need practices that weigh us down and cause us a lot of undue effort.
Our job as developers is to write code. That’s what we love doing and what we do best. It is when we create the most value so we want our development process to support us in writing code as much as possible.