AS A CONSULTANT, I WORK WITH MANY DEVELOPERS. At each client I get to meet a new team and see how they develop software. I've seen great teams, and I've seen teams that are so broken they have never had a successful project. Over the years I've noticed that different teams along this success continuum have different traits. And I've started to formulate an idea of what makes a development team able to develop and deploy applications that are high-quality and deliver value to the business.
The observation that most people expect me to make is that the successful teams had smarter, more competent people, and certainly they did. But the teams that failed had plenty of smart people as well. Clearly intelligence is not a key factor in success.
What I observed about the successful teams was that they had a passion for technology and pride in the work they produced. They were always learning about new tools and techniques, with the aim of developing software faster and with fewer bugs. On the other hand, the less successful teams were content to stick with their old ways of doing things and never took an interest in the changes that were going on around them.
Not all those successful, passionate development teams were practicing test-driven development (TDD) when I first found them. However, most of them quickly and eagerly latched on to it when introduced to the concept. These teams have found that adding the practice of test-driven development to their process of building ...