April 2018 Archives

This sounds like an easy choice in Agile development, however, single-functional team such as testing team is still prevalent in many organizations. There are forces favoring in it. By understanding the factors and dynamics behind different choices, we make more informed decisions.

Efficiency & Quality vs. Cycle time

Why do we want to have single-functional team? The answer is often with efficiency and quality, as shown in B1-loop and B2-loop.

Why do we want to have cross-functional team? The answer is often with cycle time, which further relates to speed and flexibility, as shown in B3-loop.

Blog - cross-functional team 1.jpg

B1-loop: Functional specialization for efficiency

When there is efficiency gap, we reduce team's functional scope and develop more functional skill, thus, increase the efficiency so that the efficiency gap is filled.

B2-loop: Functional specialization for quality

When there is quality gap, we reduce team's functional scope and develop more functional skill, thus, increase the quality so that the quality gap is filled.

B3-loop: Cross-functionality for speed

When there is time pressure, we expand team's functional scope and decrease the number of teams to coordinate, thus, shorten the cycle time, so that the time pressure is released.

Only seeing this, team's functional scope becomes a tradeoff between efficiency & quality and speed.


The efficiency and quality comes from the functional skill, how do we develop our functional skill? Traditional thinking is that we achieve functional proficiency by focusing on the narrow functional scope. There is some truth, but does not provide the complete picture. Learning comes from the feedback and the collaboration with other functions too.

Blog - cross-functional team 2.jpg

R1-loop: Reduced learning leads to less efficiency 

As we reduce team's functional scope for more efficiency in B1-loop, the functional silo gets stronger and the feedback speed gets slower, which reduces learning. It eventually decreases functional skill and makes it less efficient. Together with B1-loop, they form the "fixes that backfire" archetype.

R2-loop: Reduced learning leads to lower quality

The dynamic on quality is similar to the one on efficiency. We reduce team's functional scope for higher quality, but the reduced learning eventually leads to lower quality. B2-loop and R2-loop form the "fixes that backfire" archetype too.

This adds more advantage on cross-functional team, as it both provides broader context and speeds up the feedback to support learning. However, this means to abandon the traditional waterfall development practices, but to adopt Agile engineering practices especially specification by example to make the cross-functional team collaborate in a truly different way.

Functional sub-optimization

Functional team tries to optimize in its own scope, which often leads to sub-optimization.

Blog - cross-functional team 3.jpg

B4/B5-loop: Increase WIP for cost saving

Driven by the cascaded goal on cost saving, functional team increases WIP in its function. This achieves more efficiency, which leads to lower cost in its function, then, lower overall cost. One such common action is that testing team would accumulate many requirements to test altogether, as this is the most cost efficient way from their perspective.

R3-loop: High WIP increases cost of delay

As WIP gets higher, the cycle time gets longer. This increases cost of delay, which adds up to overall cost. The cost of delay includes both for the development (e.g. increased cost on rework due to delayed feedback from testing) and for the product (e.g. decreased customer value due to delayed releasing to market). B5-loop and R3-loop form the "fixes that backfire" archetype.

As team's functional scope gets bigger, it is more likely to make global optimization.


In the short term, this choice is about the tradeoff between efficiency & quality and speed. However, learning also benefits from the feedback speed and cross-functional collaboration associated with cross-functional team. Therefore, in the long term, cross-functional team could lead to high efficiency and quality as well. Moreover, we shall be cautious of the sub-optimization often made by single-functional team, while it is more likely for cross-functional team to make global optimization.

Revisit feature team - cont'd

Two years ago, I wrote a blog article called "Revisit feature team". I felt not quite complete, thus, the thought went on, until I discovered what was missing recently.

Collective ownership

Let me recap the scenario here. There is one so-called feature team, in which small groups work on different features. The team is stable, while those small groups are dynamic, as shown in the below picture.

Blog - revisit feature team 1.jpg

Within those small groups, they take collective ownership for delivering the feature. However, as the big team, they do not take collective ownership for all features. Therefore, it is not a real team. To make it a real team, it must take the whole-team approach, meaning that the whole team takes shared responsibility to deliver all features, as shown in the below picture.

Blog - revisit feature team 2.jpg

What does the whole-team approach mean in practice? How is it different from the above scenario?

Resilience and Overhead

Let's understand more about the whole-team approach from Scrum.

Blog - revisit feature team 3.jpg

Think about a team with 5 features to deliver in one sprint. A good team does not work on all features in parallel, but they may still work on a couple of features in parallel, as shown in the above picture. Are A1/A2/A3 and A4/A5/A6 also small dynamic groups in the team? Yes and no.

Yes in the sense that A1/A2/A3 working on feature 1 collaborate more closely and learn more details on that feature. They are more strongly connected on those days, during which they are working on the same feature.

No in the sense that the whole team learns about all features in the backlog refinement and planning, and every member inspects the progress in the daily scrum and is ready to jump in.

On one hand, we want to create resilience, so as to take advantage of the whole team's skill and capacity to deliver high-priority features. On the other hand, we want to have reasonable amount of overhead, as everybody in the team would spend effort in learning a bit more than what he/she absolutely and immediately needs.

Blog - revisit feature team 4.jpg

B1-loop: Increase the team size for more resilience

The bigger team, the more people who could swarm, the more resilient we are as a team.

B2-loop: Decrease the team size for less overhead

The bigger team, the more people who prepare themselves to swarm, the more overhead there is, till the point where we could not afford any more. 

It is the team size that balances these two factors. In my experience, the sweet spot for team size is usually 5-7 people. A team of 3 people does not create sufficient resilience, while a team of 10 people brings too much overhead.

Two alternatives

What are alternatives than what is in the original scenario - one big feature team, in which there are small dynamic groups on various features?

1. Split the big feature team into 2 small feature teams, as shown in the below picture.

Blog - revisit feature team 5.jpg

This alternative was suggested in my previous blog article. This is straightforward.

2. Keep one big feature team, in which there are small dynamic groups on various feature sets, as shown in the below picture.

Blog - revisit feature team 6.jpg

This differs from what is in the original scenario, in that the dynamic group is on feature set, rather than on one feature. This creates more balance between resilience and overhead. The collective ownership happens in those medium-sized feature groups, while the stability is kept in the big feature team.

It is indeed more complicated than the first alternative, then does it bring in any advantage? It avoids to force splitting the related work into two teams. It is more cohesive for one group to take all related work. This is essentially the same argument as whether it is good for timebox to force splitting the related work into two sprints.

About this Archive

This page is an archive of entries from April 2018 listed from newest to oldest.

March 2018 is the previous archive.

June 2018 is the next archive.

Find recent content on the main index or look in the archives to find all content.