Team: NOT just a group of people working together.
The software industry has changed a lot in the last years, well… actually, it changed a lot since it started, and it may change a little more until it reaches a proper level of maturity. We (as industry) have problems understanding these fast paced changes, so it becomes a real challenge to react properly to it.
The most important thing about software development is the communication between humans, between the members of a team primarily and secondly with customers. The later we cannot control how it is done and organized, but the internal team we do. Even coding is a way of communicating first with other developers and secondly with a computer. We have to take care of the language used in the code too, but this is a story for another time.
Having a good team, performing well is crucial to have a good performant business. It is the only way to effectively achieve business goals. In this fast paced industry in which we are, we need the contribution of each one of the team members. It doesn’t work having one or two minds managing all the people and commanding what to do.
When talking about software product teams, the old fashioned industrial era management style does not work anymore. Managers should manage the product, not the people. Here are some properties of poorly managed teams:
- Centralized and military top-down structures
- Planning and coordination done only by management
- Strict work policies
- One skill job positions
- Department boundaries defined by functionality
- Rewards based on individual performance
- Employees viewed as tools
- Employees accept the factory workers role
Good performance teams need motivated and empowered people, working in a cohesive way. We want people that understand what to do and act proactively, and the only way to do it is having everybody on the same page. Here we have properties of good performing teams:
1 — Small teams
If we work in small groups, it is easier to share the objectives, make sure that everybody understands them and we all are going for the same goals. In a team, the most important thing is the communication, but have you considered how many connections do you need depending on the size of a team?
It is a real challenge to keep all these communications alive. Everybody heard about the two pizza team sizes of amazon, that you should be able to feed your team with two pizzas (american pizzas I guess they are talking here :P). But the thing is, we are talking around 12 people maximum here. The second part, often omitted, is that everybody in the team should have a pass through to their customers. Which leads to our second point:
2 — Business oriented
The development people should communicate often with the business people to understand the needs of the business, so they can deliver software that properly meets the business requirements. When this communication is lost, it leads to loss of the coherence between the business function and the code produced.
If the communication flows, development and business interact with each other, and developers can make sure that they are delivering what the business needs. They should ask many questions, negotiate the tasks, propose different possible solutions and pick the best, … act like professionals, not factory workers just accepting orders. If this never happens, the business is never going to be able to take advantage of the technological capabilities.
3 — Technology led
Everybody in the team should understand the technology they are producing. After all, we are talking about a software product, so everybody should know about it. I am not saying that all the members should know how to code, but understand it properly to fully comprehend the value of the technology behind the business value. And also very important, value the work of their tech colleagues. I personally have seen (two) companies go bankrupt because product managers or sales people didn’t understand what they were doing or selling, and in both cases directors and developers were completely aligned.
In the same way, we have to bring an atmosphere of continuous learning to the team. Being engaged with different technology communities is also something to take into account.
4 — Autonomous
Every individual should be able to work in an autonomous way. Mostly, this is already happening in some business or sales units for instance, but it is not that common to happen within the development team. Some companies still have one trick pony developers, that require from the job of other developers to accomplish their own job. We don’t want developers that only work in UI or just databases, we want developers that can bring business features all the way from databases, backend or frontend into production. They should be able to deliver useful software to the business and this requires having the ownership of everything from development to production.
Trust is the glue that ties all the previous points together. Within a team, members should not be afraid to ask for help when needed. They all should be keen to share knowledge of any kind. They should not blame other team members. Peers have integrity in their responses, when asked “what do you think?” there are no hidden feelings going on…
Trust is often overlooked by many companies, but is crucial to make teams work. In a team we need to provide a healthy psychological safety where members can work freely to create these inventive ideas. Last, but not least, getting rid of toxic people is way more beneficial than trying to get the right people, or the best people, whatever it means being the best. A single toxic team member can lead to the destruction of any kind of cooperation.
Just like any sport played in teams, every member has a different role(s) and has different responsibilities(s), but in order to win, they have to work together, in a cooperative way, have cohesion, be aware of the movements of each team member and act of a single unit. This is the spirit, values and attitude you need for any team. We win or we lose together, as a team. The word team goes far beyond just a group of people working together.