Thoughts on what makes a highly-functional team
Tags: teams, synergy, development, agile
Published: 2019-09-05 18:00:00

With the software industry changing so fast, working with highly-functional teams can really make or break a company, a business idea and even your actual job if you won't fit in. Development methodologies like Agile provide some numbers for ideal team sizes, roles and project duration. But, ultimately, **a team is only as effective as the synergy of its members**. 

**Team size and effectiveness**

Developing software is inherently a collaborative effort. The old days of a lone wolf developer sitting on a basement bashing out code, just don't cut it anymore* and it's more and more important to have good social and inter-personal skills in order to be successful as a developer.
Agile states that a team size between 5 and 9 people is the ideal. 
Depending on the type of company and scope of projects, you may find yourself being more performant on a smaller team, where your choices can impact the business and the product versus working more blended in on a larger team where the shore of your contributions will be inevitably smaller. 
From my personal experience from my first job, a team of 3 people worked really well for me, with one person on a more architectural role, another handling all data processing related activities and other on the UI/UX front. Obviously, this depends on the size and scope of the projects, but for small/medium production-grade projects it works pretty well! 
In conclusion, **keep your teams relatively small to increase their efficiency:**

- Team members get familiar with each other faster
- Weaker areas in the team are more easily mitigated
- Suitable for both simple and larger tasks by doing pair programming and having a kind of continuous code review team pipeline that runs fast in place
- Zero to no frictions between coworkers due to personal issues

**People's roles in the team**

Another important aspect is people's roles in the team. It's important to not put all your eggs in the same basket, in the sense that you need that:

- All people are familiar with the technology stack in use
- All people need to be aware of the business they're writing code for
- Everybody needs to be helpful :)

However, it's important that every developer has some special role within the team. I like to call them by some special names:

- **The inquisitor:** someone who is not afraid to ask the hard questions: can we delete this, can this be refactored, why do you need this, are you stuck, can we re-architecture this whole thing, etc. It's important to have a critical person on the team who can steer efforts in a certain direction and align the team's short and long term interests with those of the Product Owner. Necessary for a high-functioning team.

- **The pick-upper:** A person who is not afraid to clean the backlog and pick up old tickets and/or undertake tickets which entail gaining new knowledge about some parts of the project previously unknown to them. Ideally, all team members will be like this. It's important because it keeps the project under control as well as the scope of pending work on a manageable level. It helps disseminating knowledge through all team members which is critical for highly functioning teams.

- **The devOps people:** knowledge of the build system, ecosystem around the code, pipelines and CI/CD, it's important for all team members to know a bit about it in order to be able to identify when something goes south.

- **The architect:** self-explanatory. At least, one person in the team needs the vision and knowledge to ensure that the current architecture is the optimal one as well as ensuring that the way it evolves is adequate as the project grows. All members will benefit from this.

- **The quiet guy:** Everybody can rely on him, has deep knowledge of specific parts of the systems and general knowledge that allows him to work on almost any ticket. Very dependable and reliable. Can help new people getting up to speed and at the same time impact high risk decisions. Very useful on any team.

**Conclusion**

In my view, a highly-productive team is a combination of good methodologies, a small to medium sized team where members are well related and familiar with one another and where each member can contribute with their individual strengths to boost the team's productivity! Hope you enjoyed reading!!