This blog has moved. Go to SoftwareDevelopmentToday.com for the latest posts.

Wednesday, July 08, 2009

A feature team needs more than a cross-functional group!

In a conversation with a friend we identified an anti-pattern that can often happen to "feature teams".

Feature teams are supposed to be cross-functional groups that focus the software development process in valuable-chunks of work, which normally cross the whole system (vertical slices of the system).[1]

There's a way in which you can meet that definition and still not be a feature team. Here's the example.

In a certain company, that shall go unnamed, one feature team was developing their features all through the project. At the same time a set of UI designers were developing their version of what would be a new user interface for the product. Come the last Sprint of the project and the UI people gave the complete UI specification to the feature team. Lots of changes were needed.

At that point the feature team was struggling to develop all of the new screens defined by the UI people as well as changing the ones that were already implemented.

On the face of it, the feature team was working like a feature team. It had UI people, architects, testers and engineers that worked together daily to develop and deliver complete features at the end of every sprint. It was the proverbial cross-functional team. However there was a problem. That's when it hit me the feature team definition has been wrong all along! A feature team is not defined by it's structure it is defined by it's output!

This particular team had no way to create a complete output of the product, they were powerless to influence what the UI team would work on and could only wait and cross their fingers that the UI team would not ask them to completely re-implement the product in the last sprint.

Note that the feature team had UI people present in the planning and development of each feature they developed, but there was another UI team working in a different organization that was shielded from the development work.

Also, the feature team could deliver so called features in every sprint, so by the "old" definition they were indeed a feature team; except their were not.

Note that this same problem could happen if, instead of UI team, you talk about Marketing, IT, Sales, Localization, Documentation, Certification testing, etc.

A feature team is not defined by it's structure (being cross-functional), it's defined by it's output! (delivering shippable pieces of the system)

Proposal for a new definition of Feature Team



So here's a proposal for an improved definition of a feature team:
A feature team is a long-lived group of people that typically involves engineering and non-engineering functions and delivers a complete and potentially shippable feature at the end of every Sprint.
A Feature Team may, as needed, include roles such as: UI designers, UX testers, IT personnel, Marketing, Sales. A feature team will in any case involve all roles that influence the development of a feature to the point of being shippable.



[1] Scaling Lean and Agile Development, Larman, Vodde: Feature team definition on page 153

Labels: , , , , ,

at 15:10 | 4 comments
RSS link

Bookmark and Share

Saturday, December 13, 2008

The "it's not my bug" anti-pattern

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.

Labels: , , , , , , ,

at 09:32 | 0 comments
RSS link

Bookmark and Share

 
(c) All rights reserved