Introduction
The agile process suggests splitting the team into smaller groups for scaling and improving productivity. Component-wise teams are normally preferred. Frontend, Backend, data engineering, and operations are favorites. The preferred model is based on functionality and features. The challenge in component-wise teams is the communication required for developing a feature and resolving dependencies.
The functionality of a product or in a project is related to system behaviors. Components are based on system modules. Functionality is in the user stories or product features. Architectural components constitute the system. Features or functionality-based teams help in delivering the product in a faster way. Components can be built-in units and stability can be achieved by writing the unit tests. Functionality tests help in achieving the quality required for user stories or features to work. Focus on features might result in system architectures that cannot be maintained and defect defect-prone.
Scalable Agile framework
Scalable Agile Framework mentions the component as part of system layers, modules, packages, and libraries. A component-based team focuses on a set of components in a system. In a product that has business logic, algorithms, and layered architecture, component-based work-sharing is effective. Integration tests help in providing the functional definition after components are developed. Till then, the components developed are units of work. Typically, integration tests fail and you need full-stack engineers to find the problem.
In feature-based teams, features are developed by different teams focussing on functionality. Functional tests typically fail during integration and it is challenging to isolate errors as the engineers are not full stack skilled for debugging. Having full-stack engineers helps in building functionality-based teams. Feature-based sprints can be handled very easily with Functionality-based teams. Feature-based teams bring down technical risks. In feature-based development, a developer might work with multiple components or layers in the architecture. Quality might be impacted because of changes created by multiple developers. The product owner helps in identifying features and sharing features for various functionality-based teams. These teams will be focused on their functional modules.
The product owner typically has challenges in a component-based team setup, as he or she needs to find the interfaces between the layers and the components. The product owner needs to identify the interfaces and data exchange formats. The product owner takes ownership of the design of the interfaces. Component-based teams might not be highly efficient because of dependencies between components and system modules.
A mix of Feature and Component teams helps in balancing features and components in the product. Feature-wise teams focus on functional modules. Component teams work on the system components and modules. The test automation suite will consist of functional test suites and unit testing suites. It would be a good idea for the Agile teams to adapt based on the product needs in regrouping their teams based on features and components.