InfoQ

News

Debate: Scaling teams up in productivity rather than in personnel

Posted by Sadek Drobi on Nov 28, 2007 08:58 PM

Community
Architecture,
Agile
Topics
Delivering Quality,
Artifacts & Tools,
Teamwork
Tags
Collaborative Technologies,
Quality,
Productivity

An interesting debate has occurred in the blogspace around the issue of team sizes. It started with Reg Braithwaite's post questioning the relevance of powerful languages in a large team environment:

What if programming conventions and closures and meta-programming and expressive type systems and annotations and all of the other tools that give us the power to build powerful abstractions actually don't scale to larger teams?


Reg argues that "productivity drops off a cliff as team size increases" and this assertion is rather consensual. Bob Warfield stresses in his earlier post that "small talented teams crush big teams" not only with regard to productivity but also in quality terms. According to Guillaume who comments on Braithwaite's post, this performance gap is due to the fact that with large teams there are only two choices: "either you code for the lowest common denominator or you end up with a lot of programmers who don't understand the code base." As a remedy, Reg Braithwaite advocates for scaling teams up in productivity rather than in personnel and investing "in tools and processes that are specifically tuned to maximizing the productivity of small teams". This way, it would become possible to build teams around "tools and processes proven to produce working software" rather than "dumbing the tools down to the level of whomever we hired last Tuesday".


Many bloggers argue however that even if very sophisticated software – such as Linux - can be developed by a small team, eventually team growth is inevitable. Chris Winters asserts, for instance, that there is "a huge distinction between creating something and maintaining/improving it" especially since any successful software results in increasing number of costumers and requests coming from them. Nevertheless, according to Warfield, team growth trend is much more related to cultural reasons. Many decision makers are not familiar with the specificity of IT projects and tend to believe that increasing personnel would result in better/faster outcomes. Moreover, career growth aspirations of team members result in hiring more junior stuff, thus contributing to team growth.

If larger teams are inevitable, how can quality and productivity level be maintained? Oftentimes, the solution consists in multiplying the layers of review, which many consider as waste. Commenting on Braithwaite's post, Mike Kucera, who actually does not believe that "having a large team automatically means that the software will be crappy and bloated", insists on the role of abstraction and code readability that help to "figure out the code quickly and get productive maintaining it". Moreover, he highlights that having correct abstraction allows breaking the project down into distinct components that can be developed by several small teams:

With the correct abstractions you can break software down into loosely coupled components, then have a small team focus on each component.


Warfield argues that it is not always possible to break the project into separate components. Hence he suggests cutting the scope of the project because he believes that much of it can "be done away with" without significant impact on costumer satisfaction. This is what according to Warfield accounts for the "art of great software" and allows "a small team [keeping] a product fresh and current for years"

Related Sponsor

VersionOne is recognized by Agile practitioners as the leader in Agile project management tools. Companies such as Adobe, BBC, CNN, Dow, HP, IBM, Sony and 3M have turned to VersionOne to help deliver greater value to their customers.

4 comments

Reply

Small Teams by Mishkin Berteig Posted Nov 29, 2007 1:41 AM
Re: Small Teams by jeremy daw Posted Jan 13, 2008 3:49 PM
Too many roles by Steven Devijver Posted Nov 29, 2007 4:40 AM
Start small... by Jon Rose Posted Nov 29, 2007 11:56 AM
  1. Back to top

    Small Teams

    Nov 29, 2007 1:41 AM by Mishkin Berteig

    The story at the start of Mary and Tom Poppendieck's book "Lean Software Development" tells the story well. Personally, I have seen this same thing over and over. I worked with a team of five people at a major financial institution that built incredible things, and tool choice was an important factor (this was back in the days of Java 1.2 and 1.3). The team was using Visual Age for Java, and eventually migrated to Eclipse due to some similar approaches to working. Even though this project (code base) was huge considering the number of developers, it would have been ridiculous to add many more people to the team because the level of sophistication of the code would have made it very difficult to manage a bunch of junior people. Anyone who has read the book "The Mythical Man-Month" understands this concept as well. We can see it in a very simple way: 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). Of course, there are lots of other possible ways of handling this that are much more humane than firing 93 developers, and it would be great to take that middle path, but the two options are meant for contrast.

  2. Back to top

    Too many roles

    Nov 29, 2007 4:40 AM by Steven Devijver

    I think that in the meanwhile people are learning how to write software. The tools are slowly but surely getting better as well (I hate you maven). This means teams are already smaller than they used to be. The problem with big teams is not so much a lot of developers. THE problem is a lot of roles. Analysists, designers, developers, architects, team leaders, testers, release managers, deputies, project managers, programme managers, product managers, ... While I believe we're getting much better at development than a couple of years ago we're still struggling to manage all these roles on one project. This is nothing new. This paper on the subject dates back from 1996: http://users.rcn.com/jcoplien/Patterns/AnnalsOfSE.pdf

  3. Back to top

    Start small...

    Nov 29, 2007 11:56 AM by Jon Rose

    Having the right team size and makeup is a major part of building quality software. Although, it is so often ignored.

    Many bloggers argue however that even if very sophisticated software – such as Linux - can be developed by a small team, eventually team growth is inevitable.
    This is the key to me. Not all software can be built with a small team, but in my mind it is always a mistake to start off with too large of a team. Projects should almost always start small - allowing the key building blocks to be put in place.

  4. Back to top

    Re: Small Teams

    Jan 13, 2008 3:49 PM by jeremy daw

    Hmm, love Poppendieck, but their advice is typically consultant style. Advice is cheap. What would you do faced with the responsibility of the decision? That is the test. My answer is to create solid interfaces and scale up the teams. You can't go to 7, you have to go to 100 and make it work. btw, I'm not exactly sure who thinks linux is developed by a small team.

Exclusive Content

Rationalizing the Presentation Tier

Thin client paradigm characterized by web applications is a kludge that needs to be repudiated. Old compromises are no longer needed and it's time to move the presentation tier to where it belongs.

Agile Project Management: Lessons Learned at Google

In this presentation filmed during QCon 2007, Jeff Sutherland, the creator of Scrum, talks about his visit at Google to do an analysis of Google's first implementation of Scrum.

AtomServer – The Power of Publishing for Data Distribution

In this article, Bryon Jacob and Chris Berry introduce AtomServer, their implementation of a full-fledged Atom Store based on Apache Abdera, which is now available as open source.

An Introduction to Virtualization

It is easy to think that virtualization applies only to servers. In reality the recent resurgence of the concept is also being applied to networking, storage, and application infrastructure.

REST Anti-Patterns

In this article, Stefan Tilkov explains some of the most common anti-patterns found in applications that claim to follow a "RESTful" design and suggests ways to avoid them.

Choosing between Routing and Orchestration in an ESB

In this article, Adrien Louis and Marc Dutoo discuss the differences and relative merits of using orchestration vs. routing in a typical ESB setup, and discuss various implementation options.

Enterprise Batch Processing with Spring

Wayne Lund discusses batch processing, Spring Batch objectives and features, scenarios for usage, Spring Batch architecture, scaling, example code, failures and retrying, and the future roadmap.

User Story Estimation Techniques

Developer Jay Fields draws on his experiences as a ThoughtWorks consultant to describe effective user story estimation techniques.