How do I form teams?

Basic principles in team formation that I follow Posted by Lena Barinova on December 1, 2013 Know-how

Some time ago I read Crisp’s blog post about teams and decided to make a brief overview of team format approaches I take.

First I think you need to decide about who will be in the team and then decide what this team will be responsible for.

Functional or cross-functional in terms of specialization

functional vs cross-functional

There are two ways how to decide who will the team consist of:

  1. Functional - when team is built around one specialization or function: for example team of testers, team of analysts, team of developers, team of devops, etc. Sometimes we call them departments. The main idea here - same specialization or function people are gathered in one team.
  2. Cross-functional - when the team is built out of different specialization people. First what comes to mind: a team can be formed out of analyst, designer (such as UX designer), developer, tester. Usually scrum teams are being formed this way - we have different roles people in on team.

I go for cross-functional teams, mostly because of these reasons:

  • Such setup gives you faster delivery
  • Team has customer focus
  • There is a constant knowledge sharing happening between members with different experience

 Feature (product) or layer (component) in terms of scope

layer vs feature

I see two possible approaches to define the scope for the team:

  1. Layer team - this is most common approach and I think most of development companies start this way, when teams are being gathered around the layers of software architecture. For example: team responsible for data bases,  team responsible for backend, UI team.
  2. Feature -  when the team is formed around a feature or a product and does a full stack development of that feature: starting form analysis, coding, testing, deployment, monitoring; and covering all the layers of this feature: data base, backend, UI, etc.

I seek for feature teams, mainly because:

  • It gives you increased value throughput
  • Team has an autonomy
  • There is a single point of contact for a feature (or product)