Finding the Right Team Structure in Software Development: Cross-Functional vs Split-Stack Team Structure

Mert Sarıbaşak
Mercury Business Services
9 min readJan 22, 2024

You have just started a new job in a company and your very first task is to create a software development team. Regardless of your position - whether it's CTO, VP of Engineering, PMO, or Head of Product - you need to solve this puzzle to establish the foundation of your software development organization. While it may seem easier when you consider your past experience, it is actually a significant challenge to find the most suitable structure.

In this article, we will uncover the layers of cross-functional and split-stack teams, examining their merits, pitfalls, and critical factors that shape the roadmap to success in the ever-evolving realm of software development.

Team organization is the fundamental factor that influences all software development processes, the efficiency and motivation of your teams, the delivery of the product to customers, and ultimately, success. If your team organization is not aligned well, you may find yourself dealing with high costs, trying to keep your product alive by spending too much money on development teams or having to expand your team to band-aid the gaps. If your company has the financial strength to sustain this or your team is relatively small, management may overlook this issue in the early stages of the product. However, as you progress, especially when trying to scale your organization, you will find yourself in trouble.

One of the key points to pay attention to in team organization is whether you will form your team as cross-functional (full-stack) or split-stack.

Another point to consider is whether to approach teams as feature teams or component teams. You can find the details of this additional layer in our next article.

Before we get into the details, let’s look at the definition of cross-functional and split-stack teams.

Cross-Functional Team

This is a team composed of members who are proficient in various areas such as backend (BE), frontend (FE), database, infrastructure, working together to develop a product’s functionality or a part of it. Proficiency can come from individuals known as full-stack developers or by bringing together individuals with expertise in each area.

We are also calling these teams “Full-Stack Teams” but this should not conflict with the “Full-Stack Developers”.

Split-Stack Team

This team is responsible for only one specific area, such as backend, frontend, database, or infrastructure, involved in developing a product’s functionality. After completing its assigned part, the team collaborates with other teams to achieve end-to-end completion.

Both models have unique situations where they are used, and they possess significant differences. When structuring teams, organizations should be aware of these differences and the advantages each model offers over the other. Otherwise, continuing with an organizational structure that is not suitable for them may lead to failure.

Let’s delve a bit deeper into the specifics of cross-functional and split-stack teams, getting to know them more closely.

Advantages of each organization model

Advantages of Cross-Functional Teams can be listed as follows:

  1. Holistic Understanding: Developing the desired functionality end-to-end enables a better understanding of customer needs, maximizes the product’s value to the customer, and allows developers to generate more practical or faster solutions.
  2. Decreased Dependencies (between stacks): By developing the same functionality in both backend and frontend stacks during each iteration, expectations and dependencies between backend and frontend stacks become clearer and can be planned more effectively. This facilitates easier collaboration between BE/FE teams, leading to quicker and better results.
  3. Better Communication and Alignment Between Stacks Inside Teams: Individuals from both backend and frontend stacks being part of the same team allows for quick decision-making regarding architecture planning, logic of functions, task distribution, and delivery time within iterations without the need for additional communication layers.
  4. Planning Advantages: The readiness of outputs to be shared with end-users at the end of each iteration, coupled with the calculation of each team’s capacity and speed internally, makes planning in cross-functional teams easier compared to split-stack teams.
  5. Increased Deliverables: With cross-functional teams, artifacts created at the end of each iteration will be ready for release and customer use. Consequently, the contributions of teams to the product will become visible, measurable, and optimizable.

Advantages of Split-Stack Teams can be outlined as follows:

  1. Specialization, Quality, and Documentation: Since teams are divided into backend and frontend, they can focus more on their specific areas of expertise and language, enabling a deeper architectural development. As each stack becomes more proficient in its specialization and gains a better understanding of the product in advanced stages, they can equip their product with cutting-edge technology without compromising any part. Due to their more integrated structure within each stack compared to cross-functional teams, backend and frontend architectures can be documented at a more detailed level.
  2. Modularity and Maintainability: Teams can establish a more modular structure by building their stacks in a shared architecture to meet the needs of the other team/stack. This allows for more optimized communication between backend and frontend through APIs. In this system, where common components are reusable, speeding up tasks and solving problems becomes easier.
  3. Planning Advantages: If BE and FE are successfully separated and operate as two independent layers, it is easier for each team to plan for the future by considering the other layer. For instance, the frontend team knows precisely how the backend team will provide services, supported by contracts, allowing the frontend team to complete future developments quickly without waiting for the backend team. This enables both teams to make more efficient internal planning.
  4. Scalability and Performance: When product or development organization growth is planned, scaling split-stack teams is easier. The similarity in expertise and knowledge levels in related domains within the teams means that the inclusion of new team members will have less impact on the existing workflow. The complete separation of stacks in the architecture also makes it easier for stacks to scale without affecting each other.

Disadvantages of each organization model

Disadvantages of Cross-Functional Teams can be listed as follows:

  1. Dependencies among Features/Domains: When an organization is not composed of a single team, and if the areas each team will handle are distinct, it should be remembered that there will be developments within the scope of other teams’ domains for each team. This situation can impose additional burdens on the planning of team iterations, integrations, and releases. For example, in an e-commerce product, the checkout process may need to obtain the shipping address from the User Management team, and the feature of entering a one-time address may need to be requested from the User Management team.
  2. Stepping on Other Team’s Toes: In addition to the mentioned dependencies, conflicts are expected to arise when teams develop the same functionality of the product simultaneously or under the responsibilities of different teams by themselves. This can lead to increased error records, code complexity, and a decrease in quality. For instance, in the e-commerce example, conflicts may arise when the team responsible for checkout wants to develop one-time addresses.
  3. Lack of Innovation on the Technical Stack: Since the cross-functional teams tend to focus more on the deliverables, innovation may decrease and expertise may be lost over time if the stacks do not regularly align with each other. Teams should regularly plan and implement corrective, empowering actions within their stacks.
  4. Hiring Challenges: If cross-functional teams are composed of full-stack developers, hiring them may not be easy. Considering that specific technologies will be used in both backend and frontend, it should be noted that the number of experts who know both technologies simultaneously may be limited, and at least one technology (BE/FE) may need to be compromised.
  5. Being More Proficient on One Stack: If cross-functional team members are full-stack developers, it may not always be possible for these developers to be equally proficient in both technologies. Therefore, developers responsible for specific functions of the product may create inconsistencies by developing different parts of the product with varying levels of quality.

Disadvantages of Split-Stack Teams can be outlined as follows:

  1. Holistic Understanding and Lack of Ownership: When teams only develop for a specific layer of the product and analyze requirements from this perspective, they may not see the whole picture. This can make it difficult for them to understand why the product or specific parts of it are being developed and what benefits the product provides. Over time, this situation can lead teams to become feature factories, hindering their potential contributions to the product.
  2. Increased Dependencies and Planning Difficulties: Considering that the product is divided into backend (BE) and frontend (FE) as two main layers, these two layers need to communicate, be developed together, and be deployed together. Even if the layers are appropriately divided, information exchange between BE and FE layers, issues such as the working architecture of services, must be carefully planned in the teams’ iterations. This situation can cause delays in delivery and may play a role in failing to meet commitments to customers.
  3. Communication Challenges Within the Stacks: Since the stacks are not part of the same team, communication between them will be limited, shifting from daily communication to occasional meetings, possibly decreasing to weekly meetings. Therefore, reduced communication can lead to disruptions and delays in information exchange and planning between these two layers, and deficiencies and errors may be discovered late.
  4. Undeliverable Artifacts: In products developed separately for each stack, the development of one layer before the other is complete means that artifacts cannot be delivered to the customer at the end of each iteration. Code snippets that do not make sense on their own will exist in environments. Despite the effort invested, these artifacts will not be meaningful for the Product team and customers since they are not deliverable to the customer.

A look from Scrum perspective

While the traditional understanding of Scrum often involves cross-functional teams, split-stack teams can still leverage Agile values and Scrum practices by making some adaptations. The key is to tailor Scrum practices to suit the unique dynamics of split-stack development.

Conclusion

Considering the advantages and disadvantages of both methods, it is important to note that there is no clear winner between them. Each method can yield better results in different industries, products, and organizations. Therefore, neither method should be considered a magic wand.

When establishing a software development organizational structure, all these factors (and even more) should be taken into account and compared with the current conditions. The future of the product and medium/long-term plans will play a significant role in shaping this organization.

The product, industry conditions, and company structure may change over time, leading to the need for adjustments in the organizational structure. In such cases, inevitable challenges may arise, including:

  • The cost of planning and making adjustments due to the changes.
  • Time loss as teams adapt to the changes.
  • Reevaluation and potentially restarting of ongoing tasks due to changes.
  • Loss of synergy due to team changes.

If you are creating a new organization or restructuring your existing one, it is crucial to pay attention to these points and seek advice from various sources and even other teams. Otherwise, you may find yourself in a situation that is difficult to navigate.

TL;DR

Choosing between cross-functional and split-stack teams in software development involves weighing their respective advantages and disadvantages. Cross-functional teams offer holistic understanding, decreased dependencies, and increased deliverables, but may face challenges like stepping on other teams’ toes. In contrast, split-stack teams provide specialization, modularity, and scalability advantages but can lead to planning difficulties and reduced communication. There is no one-size-fits-all solution; the decision depends on factors like the product, industry, and organization. When establishing or restructuring an organization, careful consideration of future plans, potential changes, and adaptation challenges is crucial. Seeking advice from various sources is recommended to avoid unforeseen complexities.

--

--

Mert Sarıbaşak
Mercury Business Services

I'm Mert! Working as Program Manager in Tech business to help companies to build their development organization and optimize it to be successful on their goals.