16. October 2018
Geobarteam
Feature teams is one of the ways of scaling agile over a larger organization, you divide your organization in many feature-teams. The core idea is that the team structure is not organized by component or technical layer. The team is long-lived, it says together but the work is cross-functional and cross-component. The team work on a complete customer-centric feature across all components and disciplines. Feature teams organization will diminish the need for handoffs and so waiting time what will result in faster delivery. My personal feeling is that adopting feature teams is certainly not an easy goal to achieve certainly not for maintenance teams. I’m also afraid that it can also lead to unmaintainable systems over time.
The first big problem I see with feature teams is the lack of accountability. Having everyone being responsible can rapidly become indistinguishable from having no one responsible.
Another big problem is that following Conways Law this type of organization will produce a big fat ball of mud architecture => a system without clean interfaces. A system without clean interface is also a system you can't redesign or change without having to deeply understand the neighboring modules. In the end it makes the system unmaintainable.
So when you want to benefit from the improved productivity of feature teams, you also need to take care of two things: discipline and design. you need to follow the principles of weak code ownership. Basically this is the open source model of collaboration. Everyone can participate but they need to follow the rules of a despot that owns the module. This despot is by the way also taking responsibility of the support and will ensure that good practices as continuous integratione and unit testing will be followed and that the code quality stays a priority. No one can check-in code without his approval. If you need to integrate changes inside a module you need to request a Pull-Request to the owner. You need also a strong Architecture team responsible to define how the system is divided in modules. This team is responsible to define clear boundaries and to ensure that the feature-teams respect these boundaries.