Traditionally, a project is organized around component teams (i.e. UX, Dev, Business, Tester, and …), any release that requires a range of component expertise will need to involve multiple component teams. Typically, different teams will have different sets of priorities, which inevitably leads to bottlenecks in the product release cycle.
According to Wikipedia, a cross-functional team is a group of people with different functional expertise working toward a common goal. One of the best ways to improve the quality of your team is to make it cross-functional. A cross-functional team has all the necessary skills to turn an idea into a working product.
“A Cross-functional teams have all competencies needed to accomplish the work without depending on others not part of the team” – Scrum Guide
In contrast to the component team approach, a cross-functional teams are groups consisting of people from different functional areas of the company. – it should be formed not only with technical specialists (Back-end, Front-end developers, QA engineers, etc.) but also consists of members like Business Analysts, Marketing and UX specialists or anyone else taking an active part in the project.
A self-organizing team is a team that has the autonomy to choose how best to accomplish their work, rather than being directed by others outside the team. Unlike traditional management principles, the self-organizing empowered teams are not directed and controlled from the top; rather they evolve from team members participating actively & collectively in all the Scrum practices and events.
Traditional team vs Agile team
“A Self-Organization Team consists of a group of knowledge workers have to manage themselves. They have to have autonomy” – Peter Drucker.
The Scrum Guide indicates “The Scrum Team consists of a Product Owner, the Development Team, and a Scrum Master. They are:
“Scrum Teams are self-organizing and cross-functional” – Scrum Guide:
Component Team vs Feature Team
The traditional approach is to break down the product more or less logically and meaningfully into components and to assign component teams to them. However, these components are completely irrelevant to the customer’s point of view.
A feature Team approach is now almost universally accepted way for organizing their teams, as opposed to the technology stack team, especially, in the continuous delivery approach, it emphasizes features (i.e. a vertical slice of system) that solve user needs which can typically accelerate value delivery of any features or working software and shorten the feedback loop from the real users. A feature team would have all the skills to perform the necessary task-level work to get the job done. In particular, assuming a three-tier architecture, team members would work on tasks related to the GUI, middle-tier, and database parts of this story.
The big disadvantage to the component organization is obvious: it slows value flow. A majority of system features create dependencies that require cooperation between component teams to build, deploy, and ultimately release. Teams spend much of their time discussing dependencies between teams and testing behavior across components rather than being able to deliver end-user value.