Reformulating the Product Delivery Process
Israel Gat, Erik Huddleston and Stephen Chin present how Inovis realized a higher product throughput by using three unconventional Kanban practices and a Lean Release Management tool called APROPOS.
Tracking change and innovation in the enterprise software development community
Posted by Vikas Hazrati on Apr 14, 2009
There have been a lot of discussions and debates over the optimal team size for maximum productivity. While most Agilists agree that smaller teams are more functional and productive as compared to larger teams however, defining the optimal team size is still a challenge.
Jeff Sutherland shared some statistics in favor of smaller teams where, the cost per function point of a team of size 7 was $566 and that of a team of size 14 was $2970. On similar lines, in response to a post on InfoQ, about team growth and productivity, Mishkin Berteig commented that
Imagine that you have just been "given" a software development group consisting of 100 developers. Now imagine that you are given a really important project to work on. Which would be better:
a) Get all 100 people working on the project (with good project management, leadership etc.), or...
b) Find the 7 strongest people in the group who are willing to work on the project (in other words, the seven strongest people that are actually interested in the project) and get them working on the project, fire the rest of them, and spend the savings on giving the 7 people the absolute best tools and environment they need and want, and spending the rest to make them happy/comfortable.
Personally, despite the severity of scenario b), I would definitely bet on it and not on scenario a).
Jurgen Appelo suggested that the optimal team size might just be 5. Five is the common number based on various studies around communication and team structures.
Further adding suppoprt for a team of 5 with a comment on the Parkinson’s Law, PMHut suggested that
The more team members you have, the more communication channels you will have, and this thing goes exponentially. If you have 3 team members, then you will have 4 communication channels, if you have 4 then you have 9. I think the formula is m-1^2.
In my opinion, a small team of 4 or 5 is ideal.
Hence, given the above facts and studies a team size of 5 seems to satisfy all the conditions related to Scrum recommendations, Parkinson’s Law, natural limit of short term memory and favorable communication channels.
However, inspite of strong evidence in favor of a team of 5, Jurgen cautioned that instead of going with a recommendation on team size, the teams should first try to self organize and gradually arrive at an optimal team size. According to him,
When you need to structure a big project, don’t impose a “preferred” team size on people just because it is written in a book. Try to allow self-organization to do its job and let the people (within their real environment) figure out what their optimum is. Do they want to cut a team of seven into two teams of three and four? Sure, why not? Are they merging two teams into one big team of fifteen? Fine, let them see if that works.
A ScrumMaster’s Checklist: Product Owner, Team, Dev Practices, Organizational
Managing Agile: Transforming the Three Dysfunctions of Management @ QConSF Nov 1-5
Lean development governance whitepaper by Scott Ambler and Per Kroll
Collaboration, facilitation, leadership, coaching and team building - new skills required for Business Analysts on agile projects. Download the Agile Business Analyst to read more.
Some projects are just too big for even the best 7 people on the planet to do.
At that point, when you need to have more people, and multiple teams, this kind of guidance isn't particularly helpful.
There also isn't any discussion about the team makeup - broken down by skill (dev team, test team, dba team, etc) or cross-functional (each team with members from all disciplines - dev, test, db, etc).
There's also the issue of organizational dynamics to be taken into account, legacy to be maintained, etc that will impact the above. In green-field projects cross-functional teams tend to work best and minimize risk, yet brown-field in matrixed organization can bring constraints forcing skill-based teams.
As Conway's law states, the structure of the system will reflect the structure of the organization which built it. The corollary of that law is that to effectively change the architecture of a system, the organizational structure must be changed as well. This requires people to act as change agents - risky business for people inside certain organizations; external consultants often have better success not being perceived as a political threat.
As an architectural consultant I've seen the full gamut - there really is no silver bullet, not even 5 plus-minus 2.
Udi Dahan - The Software Simplist
I would agree with you Udi, you would need multiple teams for larger projects. I think Jurgen's proposal is to have a huge team split up into smaller teams of 5 people each.
This gets us to the problem of allocating the specialized functions like DBA etc that you talk about. There are several approaches that work for generalized-specialized functions. The one that we use is that the DBAs do not belong to any team but their services are used by multiple Scrum teams as and when required.
For the more traditional roles there is a suggested mapping defined here.
Again, there isn't a silver bullet. It would depend a lot on the people, environment both internal and external to the organization etc etc, to see what works for them.
I would agree with you Udi, you would need multiple teams for larger projects. I think Jurgen's proposal is to have a huge team split up into smaller teams of 5 people each.
And then, the 'maximum-maximum' number ends up on 5 teams of 5 people each? Inter-team communication suffers from the same constraints of individual communication :)
I think one of the underlying issues with the post is that it does not address what is optimal. Time to market is often a key factor - and more important than development cost. The cost of development might be relatively insignficant compared to the additional revenue or cost saving of the project. So running a team that in itself is less efficient might be irrelevant in the larger measure of cost/benefit of the project.
Imagine a project which saves a company $100,000 per month in operational costs. Delivering it 6 months earlier saves the company $600,000. Lets say developers cost this company $1000 per day. That means the project can deliver exactly the same result at 500 extra man days effort (that's additional, inefficient, effort) if they bring it in 6 months earlier and still be ahead of the game.
So although smaller teams within themselves might be more efficient - and hence companies ought to prefer them - they might not deliver results as quickly and the benefits of early delivery often outweigh the additional cost of doing so.
Hi,
I believe Jurgen's last name is spellt 'Appelo'.
cheers,
nico
I agree with the main discussion in the article about not writing reusable code until there is a need. But there is an option of having(managing) reusable code across project(only when there is a probability of code redundency or functional redundency) by having test coverage. So whenever someone in the project uses code used as a utility, he has to write a test for that usage so that if someone changes the reused code(utility), then the test fails indicating that there is a break of a functionality that is using the utility.
sorry this belongs to some other discussion.
"The more team members you have, the more communication channels you will have, and this thing goes exponentially. If you have 3 team members, then you will have 4 communication channels, if you have 4 then you have 9. I think the formula is m-1^2."
Can someone explain what "one communication channel" is here? I first thought it was the number of possible 1-to-1 communications possible in the team. That would equal the number of possible pairs in the team, which is not growing exponentially. A team of 3 has 3 channels, a team of 4 has 6 channels and so on, using the binomial coefficient.
Can some one clarify please.
Cheers,
Matt
My understanding of the growth of communications channels is it is the number of POSSIBLE communications links between nodes (people on the team).
2 nodes (people)A & B have one possible communication link: A-B
3 nodes A B C have 3 links: A-B B-C A-C
4 nodes A B C D have 6 links: A-B A-C A-D B-D B-C C-D
etc
I hope this helps ...
Shane
Matt,
You can safely ignore the math. Like statistics, it is used to prove a foregone conclusion. People can perform many-to-many communication: overheard conversations, meetings, all that.
hmm nice catch ;) but I guess inter team communication would be limited to something like a Scrum of Scrums which might not be that bad.
What are your recommendations and observations on the teams on which you have worked?
Good to see some updated statistics. But the really interesting question is, "Why do we persist with these large teams". Nothing in this article was a surprise to me - there have been similar papers and the results of team size have been well documented since I started in the industry - on System 360 with PL/I in 1968! Brook's law - adding more people to a late software project makes it later" was published in 1974, and demonstrations such as Harlan Mill's "Chief Programmer Team" in the early 70's should have nailed it. Yet 30 or 40 years later we continue to employ large teams and Waterfall methodology, in spite of the massive evidence that this is the worst way to develop software. Why? Are managers especially slow learners? Or is the reason more subtle.
Robert Barnes
Thanks Nicolas, corrected the typo.
I think one of the underlying issues with the post is that it does not address what is optimal.
True, and that is what the conclusion is. Though 5 seems like a suitable number but the teams should try to self organize and arrive at an optimal number which works for them.
Jurgen cautioned that instead of going with a recommendation on team size, the teams should first try to self organize and gradually arrive at an optimal team size.
It depends on the team structures I described above.
Skill based teams require huge amounts of communication as the software components they work on are necessarily tightly coupled (UI, BL, DAL, DB).
Cross-functional teams working on autonomous business services (SOA) require much (MUCH) less inter-team communication.
For larger projects, I would recommend against self-organization unless the team has already worked together enough, and on those kinds of projects, to know what will and won't work.
I've seen teams "self organize" in ways unsuitable to the project they're working on. All sorts of problems start popping up but the team doesn't necessarily have the experience (or perspective) to attribute those problems to their self-organization, so persists - and often fails as a result.
I would strongly recommend getting somebody in with experience in the project scale/style to avoid these kinds of costly self-organizing mistakes. As attributed above in Conway's law, both team structure/methodology and software architecture need to be put into alignment - something ignored by many "agile consultants".
Udi,
yes, I agree that the actual maths can be ignored.
When I see a formula presented I want to understand it and see how I can make use of it. And there is a difference to claim that communication grows exponentially or by its dimensions.
In an ideal world where this team would only be working on one project at a time, I would agree that a team size of 5 (not including the scrummaster and PO) is a good size. We have a small team of 4 developers and it's great for dedicated projects and focused work but throw in supporting the existing application and it gets very difficult very quickly. It can be extremely difficult to get an actual work done without constant sprint interruptions when your team can't focus on the project.
Israel Gat, Erik Huddleston and Stephen Chin present how Inovis realized a higher product throughput by using three unconventional Kanban practices and a Lean Release Management tool called APROPOS.
Ross Mason discusses how to use enterprise mashups by applying a number of patterns, such as FeedFactory, Super Search, and Pipeline, in order to find new ways to benefit from existing enterprise data
Udi Dahan discusses the Command Query Responsibility Segregation (CQRS) pattern, detailing on queries and commands, what they are and how they should be used in an asynchronous programming environment
Olivier Mallassi shares a story of a typical software development project, some typical problems and what he learned from Tom Demarco about addressing those problems, and an alternative story.
Ralph Johnson discusses principles, practices and tools relating to software development starting from already existing code which needs refactoring, maintenance, and sometimes architectural change.
At a recent IIBA New Zealand members event Shane and Pete debated the role of the business analyst on Agile projects. They looked at the importance of analysis on projects and how the role changes.
Pete Goodliffe provokes his listeners to keep learning, offering advice on how to approach learning, what is valuable and what can be ignored, how to deal with new things, having a healthy attitude.
If you want a job in Agile software development, using a framework like Scrum, you need a plan of action that spans all three phases of your job search: preparation, interviewing, and assessment.
18 comments
Watch Thread Reply