What’s a good developer team?
A good developer team will do a much better job than all the bullshit rock stars you hear about everywhere. Your team is the most important factor to build your product. Today, I’m not gonna talk about a team full of rock stars. I’m gonna talk about a rock star team.
We’re going to talk about soft skills later, because in the first place, hard skills are the basis. A good team of developers is technically solid. There’s no like arguing with that really. But then, does that mean that if you hire five seniors you win? It’s not that simple.
First, you need technical diversity. People interested in different technologies who will combine their expertise to produce masterpieces. A good team of developers are people interested in different fields and technologies. You want synergy within the team. Developers who wont hesitate to learn more from each other and grow. A team like that, you can throw any challenge, they will find a solution.
You don’t need only senior dev to do this. Anyway, in a job market like this, to find, pay and keep five seniors, you need time and money. If you’re a big company that can afford to do that, good for you. Otherwise, you have to understand that junior doesn’t mean incompetent, and vice versa. It’s actually good to have multiple levels of expertise. You want that because mentoring relationships on a development team work wonders.
A good team of developers is a team that passes on its expertise and experience. Juniors thrive because they are supported by seniors. Seniors thrive because they pass on their knowledge and devote the rest of their time solving much more sophisticated problems. Your team thrives because everyone is learning. And when a team thrives, you can see it by the quality of the projects shipped.
When I started my career, I worked on a team like that. You guessed it, I was one of the juniors. I frequently asked advice from seniors, who were themselves advised by an excellent lead developer. It worked very well. We nailed every project the company sent us.
And one day, the lead dev just left for a huge opportunity. Within a few months it was chaos. The projects were not moving forward because we were going in all directions. And this good team finally broke up.
A good developer team is guided by a lead developer. His role is to show the way. With his solid experience he decides on technical points, keeps the developers’ attention on the priorities and pushes everyone upwards. He is fully integrated in the team and doesn’t hesitate to get his hands dirty to help. I insist on the word integrated. Lead in lead dev is important.
For a developer team to work, everyone needs to get along with everyone. The best way to do that is to meet people before they join the team. A good developer team is actively involved in recruitment. And that’s true for any team, but for developers it’s even more important because of work philosophy. I’m talking about best practices, tools and how to manage releases. It’s crucial that everyone agrees on new people.
A good developer team can affect the roadmap and planning. They need to be a minimum master of their own destiny. It doesn’t mean that they decide everything. It means that they have enough influence to move absurd delays or remove useless features. You can have the best team in the world, if you force meaningless things in the way : it will fail. Obvious, but often ignored.
Also, if you want a team to shine, you have to challenge them. A good developer team have a lot of freedom in the way they solve complex problems. You need to show your team that they don’t waste time in your company with serious challenges and adaptive technologies. Nothing better to motivate them.
A quality objective
Quality development requires adherence to standards and best practices. A good developer team imposes itself, with undisguised pleasure, a high level of standards and good practices. The quality of a team is measured by the quality of projects shipped. And quality is not something that magically falls from the sky because we closed our eyes and believed in it. Quality is a team effort, a group discipline, a strong tradition that is fiercely defended by everyone.
A good developer team will maintain the quality of its work over time. This team will do so by following the rules, regardless of the context. And here I’m talking about code style, code reviews, peer programming and a real QA process.
Quality will also be maintained by automatic tools. All tests run in the CI. Deployments don’t happen if they don’t pass. Same with linters and static code analyzers. A good developer team will impose time for its tools and quality research. The pipeline becomes a barrier against poop. Everything is set up so that human errors are minimized.
Communication is king
A good developer team communicates without filters and politics. That’s mostly the problem with teams that don’t work well. You have to talk about problem immediately. Otherwise they will get heavier and heavier as time goes by. If you don’t, you’ll end up with a super weird team. No one talks to each other in real life anymore. Everyone insults each other in code review.
To avoid this kind of situation, open and caring discussions must be forced. In order to achieve these discussions, your team needs time to get to know each other. A good team is like a good wine. It takes time, but it’s worth it.
A good developer team is a team that knows each other well. There are automatism. Everybody know who will be the best fit to work on a specific task. Everybody knows how to talk to each other. By insisting on frank and caring communication, you’ll build a strong group.
We win together, we lose together
You don’t say “I failed,” you say we failed. You don’t say “I succeeded,” you say we succeeded. You don’t get personal wins, you bring positive things to your team. You don’t make a mistake that will bring shame and blame. Your team will learn to avoid that mistake in the future. You think this is Cloud Cuckoo Land and I think you’re wrong.
It creates a group effect. A crucial cohesion during difficult times. A good developer team is a tight-knit, indivisible group, no matter the situation. In a field where the ego is so present, where knowledge is so diverse and mistakes so frequent, a team you can count on is a great asset.
When you win, everybody wins and we party. When you ship, when you reach a goal, when the team does something meaningful: celebrate ! Without forcing people, of course, but it’s really something that brings a lot.
When we lose, everybody loses and we debrief. We criticize ideas and solutions, not people. Why did we fail as a group and how can we avoid making the same mistake in the future? When it’s one person’s fault, the question should not be “why this person failed ?”. The question should be “how can we make sure that no one makes the same mistake in the future ?”.
When that person will be you, which will happen for sure, you’ll be happy when everyone doesn’t turn evil.
A good developer team does not compete internally and sets aside personal egos. The team does that for the product. The team does that for the success of the group. With a group like this, you’re going to have people who trust each other and, most importantly, trust themselves.
Confidence helps a lot. You’re going to have people invested in their work. Naturally, they will always want to do better. Bring more values to the group. And at the same time to the company in general.
Just because your team doesn’t check all the boxes doesn’t mean you team suck. I’m talking about the super-optimal version. If you run a team like this, nothing can stop you.