This post denotes the attributes needed in order to help form an effective team. They are attributes that I have worked to bring to my current team and therefore reflect on what my experience of forming a team.
Some developers and methodologies do not believe in process. Some simply say that process is a means to fail. I believe that this is incorrect – every team needs some sort of basic process. A basic process will help to standardise the way we work, our environment, our development methodology or our release procedures. It helps to make sure that we are all on the same team. The process doesn’t need to be strict or detailed – in fact I believe that teams that have processes that are *too* heavy will find the processes getting in the way of actually doing their work.
If the process fails then we have an issue. Lets think about a planning process that has gone wrong (iteration planning). The process details that the developers will have a written specification available before they plan the time needed to complete the tasks. If this is not followed then the task may not be completed within the timelines and this could impact the release of other products and also the schedule of the next feature.
This is a very important attribute of a team. IF there is little (or no) trust, then the team will not be able to effectively work together. This can be as trivial as trusting that the developer can meet their deadline or that they care enough about their work that they will put as much effort as they can into it. If there is little trust, then negativity and insecurity can creep into a team. Being in a trusting environment helps to breed confidence.
For me this is the fundamental attribute of a *team*. Let’s think of a football team that does not talk to each other. They would be a group of individuals that has no way of working together. So the need for a development team to be able to communicate means they can work effectively not only with each other, but also with the business (understanding requirements) to find solutions to any problems that they are faced with.
If a team cannot communicate, how can we be sure they are able to work effectively? They may duplicate areas of the code, not understand requirements or even start tasks that have already been started by another developer.
What a team needs is a leader. I have heard of self managing teams but they feel like a mythical beast to me. A team needs 1 person to make sure they we are all striving for the same goal. The leader can be the voice of reason when it comes to disputes and help to settle those disputes. A good leader has the ability to motivate developers. They can empower developers to make decisions on how things are done. They can help to increase the trust levels in the team with that empowerment.
If the leader is weak then the team can start to disintegrate. This is a bad situation to be in. If we take away trust or communication then the team can start to disintegrate. We *can* live without process and structure but we need strong individuals around to help push in the correct direction and form a set of informal methodologies.there are other attributes required (motivation, passion and a sense of responsibility) but these fall outside the core attributes of the team in my eyes.
So in summary, if a team doesn’t possess the basic attributes needed to bond then they are already starting on the wrong foot. A strong leader will help to cement a team together. The team can start with a sound, simple process and communication which will ensure trust bonds the team further. Keeping a team together is not easy work either – it’s like a relationship – it needs to be worked at. Simple practices, like morning stand-ups and retrospective meetings, will help to keep the bonds intact. I’d be very interested to grow this post with help from the community as to what other attributes they feel is necessary for an effective team to possess.