Team Organization
Armed with a clear set of roles, the next step is to define how these different types of professionals can work together efficiently. The way the team currently works — just like everything else — has been constantly evolving to fit its needs while still being true to the core principles.
Structure
The company is organized into several types of units: Teams, Project Teams, and Stacks.
Teams
The company consists of four teams:
- Business Operations
- Managed by the CEO.
- Includes the following sub-teams:
- Office Operations
- People Operations
- Talent Acquisition
Each sub-team is managed by a manager and is comprised of associates.
- Engineering
- Managed by the CTO.
- Supported by Engineering Leads.
- Comprised of software developers.
- Product
- Managed by the CPO.
- Comprised of product managers and UX/UI designers.
- Sales
- Managed by the CEO.
- Supported by the Sales Managers.
- Comprised of business development associates.
Each team has distinct rituals but the following rituals are usually followed:
- Daily standups.
- Weekly or monthly planning sessions.
Project Teams
- Project teams are the building blocks of individuals for projects.
- Each project — whether for a client or for an internal purpose — has a dedicated cross-functional project team composed of 1 Product Manager (PM), 1 UX/UI Designer, 1 Engineering Lead (EL), 1 Team Lead Developer and 2-3 developers.
- Team members have end-to-end responsibility for the whole project. So it can be compared to a mini-startup.
- A project team is self-organizing so they have freedom of their product and technical choices. Their decisions are only limited by the client’s and/or the company’s mission.
- The Product Manager is an integral part of the project team i.e. team members do not report to the Product Manager but work with him/her just like any other team member.
- A project team has the following rituals:
- Daily standups
- Weekly sprint planning
- Weekly sprint reviews
Learn more how each project team role interfaces with one another efficiently
Stacks
- Stacks regroup individuals who share mastery in a skill and/or domain i.e. people who do similar work. The team has the following stacks:
- Android
- iOS
- Web
- The purpose of a stack is to share knowledge, to learn from each other, and to reduce the silo effect and sense of isolation. As not all stack members are part of the same project team, it allows to reconnect all members together and share knowledge across projects.
- A stack has only one ritual: Bi-weekly retrospectives.
In addition, teammates may participate in interest groups around specific technologies or topics (e.g., Infrastructure, Security, Elixir, Ruby). These are informal and open — anyone can join or leave at any time.
In Practice
Each teammate can be a member of multiple project teams and stacks as they can be involved in many internal and external efforts.
Developer
A Developer has these standard memberships:
- One client project team as clients are provided with dedicated project teams hence guarantee that the developers work on only one project at any given time.
- At least one Stack (Android, iOS or Web) or multiple based on their skill sets.
- Engineering Team.
Product Manager
A Product Manager has these standard memberships:
- At least one but usually multiple client project team(s). Contrary to development, Product Management is not always a full-time activity hence the involvement of Product Managers in multiple project teams.
- Product Team.
UX/UI Designer
A UX/UI Designer has these standard memberships:
- At least one but usually multiple client project team(s). Contrary to development, UX/UI is rarely a full-time activity during the whole lifetime of a project hence the involvement of UX/UI designers in multiple project teams.
- Product Team.
In addition, a UX/UI Designer might have the following optional memberships:
- One or more Stacks (Android, iOS or Web) based on their skill sets.
Rotation
Whether it is a client project or an internal project/activity, each teammate has the opportunity to be involved in more than one effort during their journey at the company. Rotations happen on a case-by-case basis, taking into account business needs, project priorities, and individual growth objectives.
When rotating between project teams, an Engineering Lead can recommend a rotation for one of their reports and/or a developer can request a rotation. Rotations are avoided when they would negatively affect project continuity.
Rotations aim at developing group ownership while still allowing the individual growth of every teammate.
Group Ownership
It is not only what we do, but also what we do not do, for which we are accountable. – Moliere
Every teammate must have an ownership mentality in any effort the team undertakes to fulfill the company’s mission. But this ownership must be achieved with the rest of the team in mind.
For developers, it means that a line of code or a feature does not belong to one person only. Instead, any developer on the team can pick up where another developer left off with ease and efficiency. To accomplish this objective, the team must work on and enforce team conventions on how they develop software applications. The same applies to Product Managers and UX/UI designers.
It makes everyone responsible for consistently delivering work with the whole team in mind. Additionally, it prevents any blame game in the event of challenges or issues, as the team is collectively responsible for the deliverables.
Individual Growth
Each teammate joins the company at different stages in their individual path, i.e., some joined at the junior level while others at the mid-senior, senior or principal level. It is critical to account for this disparity. At the same time, each teammate needs to be given the opportunity to show how they can handle new situations and grow from them. As a result, the company has devised area-specific individual growth strategies.
When rotating between project teams, each teammate can work on different systems and in various domains. A teammate can work on a Ruby-based application for a European Healthcare startup, then on a Go-based Loyalty Management system for a large Asian corporation. The challenges and solutions are different from one project to another. As a result, teammates acquire new knowledge faster and develop broader skills.
The role of Team Lead is an opportunity to demonstrate leadership skills without being the most senior team member. For instance, the Team Lead of a project team could be the teammate who knows the domain or the project the most, had the longest tenure at the company compared to the other developers, or must lead a project to fulfill one of their objectives for their growth track.