Technologists love to argue and it’s really easy to start an argument. Here goes — my software development approach is better than yours! My approach has a better success rate. My approach delivers better results. It works for me so it’s the approach that everyone has to use. Only an idiot would develop software any other way.
Convinced? Well, I haven’t given you enough information to make a decision but, even if I had, your situation is likely to be quite different from mine. There are a lot of reasons why software teams fail to deliver as promised and as needed. In the book Five Dysfunctions of a Team by Patrick M. Lencioni, the author lays out five very good reasons why dysfunctional teams fail. This isn’t a book review but rather my spin on the major points in the book, which are:
- Absence of trust
- Fear of conflict
- Lack of commitment
- Avoidance of accountability
- Inattention to results
As I examine the list, it becomes increasingly apparent that teams exhibiting these characteristics are doomed. In fact, agile development techniques are specifically intended to address these issues either directly or indirectly.
Firstly, the members of great software teams trust each other. They communicate openly and honestly. They need to believe in one another and support each other. If trust is lacking, you can bet that conflict will rule. Team members will take steps to protect themselves and deflect blame. Trust is the foundation for building great teams.
This leads us to fear of conflict — but didn’t I just say that letting conflict rule is bad? Yes, too much conflict is bad and no conflict at all is also bad. Let’s face it, people who are confident and self-assured will passionately defend their beliefs. They may, at times, raise their voices and get red-in-the-face. That’s okay as long as they are willing to listen, giving the other person a chance to be heard too.
If everyone on the team is being politically correct and carefully choosing their words, something’s wrong. You can bet they are holding something back. You won’t get the kind of open, honest communication you need to draw out ideas and find the great ones.
Do you know people who go-with-the-flow? They lack commitment. You can recognize them by their tendencies to go along with whatever anyone else wants to do. There’s nothing inherently wrong with that except for the lack of commitment it demonstrates. Those people won’t go above and beyond. They won’t push themselves to do more than expected. They’ll always seek “good enough” rather than “great” — or worse, they’ll go along even when they disagree!.
Software development teams are clearly accountable — they have to deliver working software. Holding individual team members accountable is tougher. Ultimately, they must hold one another accountable. That means having the guts to speak up when a team member isn’t carrying his weight or is making too many mistakes that impact the team’s performance.
It should be apparent that trust, willingness to debate ideas and commitment are necessary before anyone can hold someone else accountable.
Finally, great teams deliver great results — collectively. Individual performance matters but only to the extent that it supports the team. For example, if I spend extra time “improving” my code beyond the boundaries of a story and it hurts the team, my performance is focused on my results not my team’s. My attention is not where it matters and the team suffers.
If you’ve observed any of these behaviors on your team, great results will be illusive. Get the team to focus on collaborative behaviors and software deliveries.