Great teams beat great individuals (almost) every time. Most of us have been members of a team at some point or another. The lucky of us who happened to be members of great teams (or at least felt that way) probably achieved our goals, grew our skills and enjoyed every minute of it. I have been member of teams from early on and still find great pleasure in working within teams. It started with football at my young age and continues in my professional life as a software engineer. Many times I contemplated on what makes a great team and I think that both in football and in software development, the traits of great teams are essentially the same - or can be abstracted to seem like that. In this post I provide my take in what makes great teams.
It all starts with skills. Good teams are made of people that are very skilled in their domain. They constantly work to develop their skills even further and interact with teammates in a manner that improves each other’s skills (i.e., knowledge exchange, motivation, mentoring, etc.). Teams must have big goals and like it or not, certain level of skills are required to reach such goals.
Next, and closely related to the first trait, is the variety of skills. Different members should be experts in different skills so that teammates complement each other’s skills and achieve mutual growth. A software project for example, involves many aspects, such as the user experience, the architecture, performance & security, front-end and back-end development and the clear business value it brings. It is not common for single individuals to be highly skilled in all aspects. But put together people with variety of exceptional skills and with the right process and attitude you will eventually have a team of people who are jack of all trades and master of many. Moreover, discussions between people that approach a given issue from a different point of view, usually brings great results.
Another important trait of good teams is the respect of teammates for each other’s skills. In my opinion, most people involved in software engineering have quite an ego problem. It makes some sense, since designs, solutions and trade-off decisions are not always binary - right or wrong way to do it. People feel very emotional about the things they “give birth to” and are quick to jump and dismiss the opinion of others if they do not respect their skills and knowledge. Many times I heard sentences from fellow geeks such as “he doesn’t know how to test my application right” or “he is not able to write a code of line, he can’t talk to me about architecture”. These things I believe would be avoided and the discussions would be much more constructive if there is mutual respect on the skills of teammates.
The three traits mentioned above, I believe are enough to make a good and efficient team. But what separates good teams from great teams? In great teams, teammates like each other!
It is very important dynamic and changes a great deal of things. I will list the three most important effects it has in the team:
- It greatly enhances communication, because every comment or discussion is perceived with good intentions behind it
- It creates a fun environment to work in and I believe this does wonders on the team productivity
- There is not a “not my f@cking job” mentality and teammates are truly willing to help each other
Hopefully most of us are working within great teams! What are the traits you believe make a great team?