Talking to a friend we were discussing the organization of feature teams in a local company.
They were previously organized in component teams, which led to a lot of inefficiencies and disconnected work. This happened because one team would only work on one component, and when one feature required work in many components, that feature may not have been finalized at the end of the sprint, as one of the teams may have been busy with other work.
This highlights one of the problems that is common with component teams, they do not allow for an efficient allocation of work, as the dependencies increase between independent teams. You may still want to organize around component teams, but not if your goal is “efficiency”.
But the anti-pattern that we talked about is actually when you have feature teams. If you have feature teams you will be able to assign one backlog item completely to one team, thereby reducing the dependencies between teams and potentially increasing the throughput of your program/group/unit/company.
However, there’s a catch (there always is). You need to be explicitly clear about who fixes the bugs when nobody else wants them. The problem is this: when a bug is discovered during one iteration, it is likely that many teams may have touched the component that is the reason for the bug (assuming you can trace it). So, who takes it?
The anti-pattern tells us that the teams will *all* say that it is another team’s code that is causing the problem, and nothing gets investigated which leads to many bugs crossing the iteration line and that should never happen.
How to solve this problem: you should state explicitly which team takes *all* the bugs under investigation. That way if the teams cannot agree on who takes the ball (in a Scrum of Scrums, say) there will be a clear owner for the investigation and potentially the fix.
Normally this would be the team that is assigned to “maintenance work” during that sprint, but you can decide otherwise if the maintenance team is too busy.