Good Team Dynamics Are Essential For High Technical Quality
Posted by Davy Brion on January 31st, 2010
Just read an interesting post from David Tchepak about the lessons he learned from his long-term agile project. The post itself is interesting but there was one point in particular on the momentum of his team that caught my attention:
This probably sounds a bit touchy-feely, but I think dismissing it on those grounds is ignoring a fairly fundamental part of human nature. If every day, every task is a thankless struggle, the intertia will pull down your team’s morale, motivation, concentration, and reduce their creativity and ability to innovate. On the flip side, once the team gets up a bit of steam and starts churning through stories, seeing visible progress as they move across the task board and into the Done column, the team’s enthusiasm and creativity soars. They start kicking around new ideas on how to remove some duplication from the code and reduce some overhead for future stories.
David is right, but i’d go even further than that. I’d assert that good team dynamics are essential for achieving high technical quality that is sustainable in the long term. I think we can all agree that people work better together if they actually like working with each other. And i’m pretty sure that many of us have experienced first hand how a negative relationship within a team can have a pretty negative impact on the technical quality of a project.
Have you ever been on a project where you were looking at a piece of code thinking “wow, this really ought to be cleaned up… but i’m not touching it since John is gonna get all pissed over somebody touching his code”. Or worse, “wow, he really made a mess of this but i’m not touching it… let him live with the pain”. I certainly wouldn’t be surprised if many of us have at one point (or more) in our career had this exact thought about a certain piece of code written by a teammate at the time. That is a perfect example of how negative team dynamics can have a pretty serious impact on the technical quality and thus, i’d argue, the long-term viability of the project. See, the thing is that it won’t end what that certain piece of code. Sure, code rot has been introduced. But even worse, team rot is being introduced by this behavior as well, even if you are just trying to preserve the peace by trying to avoid a possible confrontation.
This kind of team rot will not end there. If you don’t actively try to get rid of it ASAP, it’ll eventually spread throughout the team, as more and more people gradually get into the same mentality. Eventually, even the strongest, most positive personalities can fall victim to it. When new people join the team, they’ll quickly pick up on it as well and there are very few people who are willing to stand up to such a situation when joining an existing team. As i’m sure you can imagine, nobody really likes working in such a team. A lot of people in that situation will get into a “i’m just gonna look out for myself and to hell with anyone else” mentality. They will try to do their job in a way that they will not be blamed for anything. Communication will drop to a ‘nothing-more-than-necessary’-level. A lot of issues will be ignored until they are actually found by end-users. A lot of time and effort is going to be wasted in general. And you’ll probably end up with a pretty high turnover rate of team members. Believe it or not, these kind of teams truly do exist.
On the other hand, if everybody on the team gets along everything seems to go much more smoothly. People won’t be afraid to make changes in other people’s code if everyone understands that it’s for the best of the project and if they know that it’s not gonna lead to a bitchfest from a difficult team member. Discussions will be about actual facts and merits, not about not-wanting-to-give-in-to-someone-you-no-longer-like. People will alert their team members when they notice something that could cause problems later on. People will be much more likely to maintain their technical discipline when there is positive peer pressure to maintain high standards. People will help each other when they can. Essentially, those people will form a true team instead of being a collection of coworkers who are unfortunately working on the same project together.
As much as many of us strive to improve our technical abilities and skills on a continuous basis, we also need to ask ourselves the following questions regularly:
- Am i a good team member?
- Would i like to work with someone like me?
- What can i do to make people enjoy working with me more than they might do now?
That doesn’t mean you have to become Mr Popular. It doesn’t mean you have to crack the best jokes. You can be almost entirely yourself, as long as you realize that:
- communication is extremely important
- treating others with respect is crucial
- nobody likes working with whiney developers
- you can’t expect others to work on their flaws if you’re not willing to work on yours… it’s a two-way street
February 1st, 2010 at 1:32 am
Hi Davy,
Thanks for taking the time to respond to my post.
I agree team harmony is essential, but I would keep it separate from the idea of momentum.
I am lucky enough to work with an awesome group of people that get along well, communicate well, and all share a similar passion for developing quality software. While the team dynamics were fairly constant during the project, the momentum we had varied fairly dramatically, and the impact on the team’s creativity and enthusiasm was equally dramatic.
I guess having good team dynamics is a prerequisite for building constructive momentum, but not a guarantee of it.
Cheers,
David
February 1st, 2010 at 7:04 am
you’re right, it’s not a guarantee of momentum, neither is it a guarantee for high quality… if everyone gets along well but they don’t really care about code quality then obviously they will deal with quality related issues sooner or later
it doesn’t really guarantee anything, but when it is there, it might be one of the biggest enablers for a whole host of positive results
February 1st, 2010 at 12:12 pm
Making all the devs in my team read this