Use Feature Teams. Yes, Use Component Teams
This is a follow-on to my post on starting an agile transformation with Structure 1st and to Mike Cottmeyer’s great article on feature teams and component teams and is based on some discussions I’ve had with Dennis Stevens. In fact, I stole some of this text directly from Dennis.
At some scale, having pure feature teams will break down. That’s not to say you won’t have feature teams at all. On the contrary, at scale, we should have product facing feature teams. However, the specialist skills, services and platforms, that are truly cross product or that are truly technically difficult, should be in component teams.
Feature teams have everything they need to deliver an increment of value for their product. But let’s think about that for a second. They don’t have operating system engineers on the team. They don’t have people implementing a DBMS on the team. They don’t have someone developing network protocols on the team. Most of us don’t have committers to open source libraries on our teams. So they don’t reeeealllly have everything they need. They depend on capabilities delivered from a bunch of reliable services – like the operating systems, data center equipment, 3rd party libraries and network. Similarly, in your company, at the next level higher are additional services or components that your feature teams need. Component or services teams can develop these services and components that the teams in your company need.
Having component teams does not mean you separate the development of presentation, domain, and data management layers into separate teams. Feature teams may work across all layers, but also make use of components and services provided by others. Component teams build domain services and tools to support the feature teams. The feature teams should be consuming those services.
Some specialty resources (for example, those that know 3rd party propriety software, are few in number, and broadly needed) should be in pools and should be scheduled as Non Instant-availability Resources. Give them lots of slack in order to respond quickly and manage that with kanban.
The economic cost of delay on the dependent work supported by the Non Instant-availability Resources and component teams should be the primary drivers in the prioritization of their work. Any team (Feature or Component) that has dependencies on a Non Instant-availability Resource or Component team should be using a 2-tier Feature or Epic level view to coordinate these dependencies and to ensure actual end-user value delivery at the program level, instead of a bunch of components with nothing to tie them together into enterprise level feature sets.
Take care of your org structure 1st. Have feature teams. Yes, have component teams too.