Year 2000 marked the beginning of the first Galácticos era in Real Madrid. In an attempt to build the best fotball team in the world, President Florentino Perez´ambitious goal was to buy at least one new Galáctico each season. The Galacticos of Real Madrid could celebrate some initial successes, winning the Champions League in 2002. But the success would not continue. As more and more star player were brought to the spanish capital the performance of the team started declining, allowing Barcelona to overtake them as the No 1 club in Spain and Europe. The first Galácticos era ended in 2007.
What the leaders of Real Madrid failed to understand was that it takes more than world class players to produce a great team. The individuals must be able to work and function together as a team.
The same is true for any other team, software development teams included. Building a team takes time, and simply allocating the “best” people is a poor strategy.
What defines a great software team?
A great team delivers a continuous and reliable stream of business value to the customer. In order to achieve this a team must deliver high quality software with as few bugs as possible, allowing them to go fast over a long period of time.
Needless to say, this is not easy. The team must not only posess a range of technical skills. In order to build quality software they must also be able to communicate well within the team, with the customer and with other stakeholders.
In the following I will discuss my opinions (in non-prioritized order) on what it takes to build a great team.
1. Balance the team
“A football team is like a piano. You need eight men to carry it and three who can play the damn thing.”
Liverpools legendary manager really understood how to build teams. To be successful you need to find the right balance. Hiring the best people may sound good on paper, but when it comes down to practice, it’s a poor strategy. Having 5 star programmers on your team is no guarantee for success. In fact, such a team might even prove to be counter-productive. Instead you should focus on building a team of people that are able to communicate well together. Build a team where members communicate effectively and you will also build a team able to solve problems together.
You also need to think about which roles you need in your team. Generally speaking, all roles should provide value to the team. More specifically, in a software project you always need programmers and testers. Depending on the project you may need to staff your project with some other types of resources as well. But don’t do it just because it is expected.
2. Hire Software craftsmen
A great team delivers high quality software to production. There is an increased chance for this to happen if the team members practices solid engineering principles like TDD, ATDD and pair programming to name but a few. But this alone is not enough. You need highly motivated people. People who wants to improve. People who takes pride in what they’re doing. People who takes pride in “delivering the right thing”; when they deliver code, perform testing or defines requirements. Luckily, with the increased attention on Software Craftsmanship, the word will spread much easier to teams around the world – increasing the probability of finding such people.
(Actually, at the time of this writing, 5184 have signed the manifesto. Still room for more people
When hiring, look for these software craftsmen. And when the project starts rolling, be patient and allow them to practice their profession.
3. Seat the team together
The importance of seating the team together can not be emphasized enough. If you can only do one thing this should be it. Still I see a lot of people failing to see the importance of doing so. That’s a fundamental mistake. Teams that sit close together is able to maintain a better focus and better communication. Simply put: a co-located team is in a much better position to deliver a valuable product than one that is spread across different locations. And simply being located on the same floor is not cutting it. The team need to sit close to each other in order to reap the benefits of effective communication.
4. Building a team takes time – teams need to practice
Software developers are people. People need time to get to know each other. They need time to get to know the domain and it takes time for a team to establish a sound work culture. In short: Teams need to practice. This does not mean that you should send the team off on a one month training camp coding Hello World and non-real practice tasks. It does mean however that most teams, if not all, could benefit on doing some training together. And it does mean that when you start up a new team, you need to have a certain degree of patience. Be too impatient and you will not be able to harvest the success of what could be a successful team.
5. Let the projects come to the team
Once you have a well functioning team it might be tempting to spread the members to different teams in order to “double the value”. As tempting as it might, resist the temptation. You have absolutely no guarantee that the new teams are going to function equally well. The result may very well be two or more teams not functioning at all. So instead of shuffling people around, let the projects come to the team
6. Encourage self-organization and build a culture for continuous improvement
An interesting side effect of a great team is that it builds organizational slack. Consider a team that struggles with delivering what is expected from the team. Project managers and other leaders in the organization will engage in a series of meeting to try and figure out how to get the struggling project back on track. This will tie up important resources. Consider on the other hand, a highly functional self organizing team. It delivers the features on time and in a consistent and reliable pace. Since the project is going well, managers do not have to spend their valuable time micro managing this project. They will not feel tempted to engage in daylong meetings with other managers to discuss why the project is going so well. Instead they can focus their time on other pressing issues in the organization. Thus the project team has provided the organization with organizational slack.
But surely hiring the best is safer
Last week Real Madrids second Galácticos went thumbling out of yet another Champions League tournament, loosing to french champions Olympique Lyonnais, after spending a quarter of a billion euros on 5(!) star players during a hectic transfer summer. It is yet another confirmation that you cannot simply hire the best and expect immediate success.
Only a couple of days after the humiliating exit from Europe’s best, newspapers reported that Real was desperate to sign star striker Wayne Rooney from Man Utd in the summer. As a life long Liverpool supporter I welcome the attempt very much indeed and I hope they succeed. I doubt however, that this is what will bring Real Madrid back as the number one football team in Europe.