Lazycoder

31Jul/0912

Structure and composition of agile teams

I’ve been thinking a lot lately about how agile teams are composed today and how they typically work in a workplace that is practicing agile. I’ve only been "living the agile lifestyle" for a couple of years now, at first all by myself(?!) and the past year and a half with agile teams.

One thing that I’ve noticed about the agile teams I’ve been a part of is that they are mostly composed on unitaskers. That is, they are composed of developers, who only write production code and tests, some sort of tester, who only test the production code, and project managers/project owners, who define the requirements

The way I’ve seen these teams work is that the PM/PO writes up a story, then the testers and developers ask the PO questions about the story and make suggestions/clarifications. Then the developers starting writing code while the testers start writing test scripts. Once the developers have finished the code and pushed it to a test environment, the testers test the code, report bugs, and the developers fix the bugs. Eventually, the code settles down and all the team members agree that the story is complete.

So it seems like all the team members are busy all the time, but if you read between the lines you see a lot of waiting. The testers are waiting for the developers to finish writing the code and deploy it to the test environment. Then the developers are waiting for the testers to finish testing so they can either fix the bugs or demo the code to the PO and close the story. The PO is usually waiting for everyone to finish their tasks so they can see the demo and close the story.

I’ve been toying with the idea of all developer teams. As the interation progresses, the developers pair up on stories, fixing problems as they go. Then the developers swap off and test the other pairs stories, fixing any defects they find as they test. To cut out the lag from deploying to a test environment.

We’ve also had some success pairing up developers with QA during development and testing where I’m working now.

What do you think?

Filed under: Agile Leave a comment
  • http://www.opgenorth.net Tom Opgenorth

    Sounds kind of Lean-ish to me, and a good idea.

    One thing that always bugs me is how testers always seem to be isolated from dev’s (or vis versa). This always seems to result in some sort of miscommunication/understanding about what “correct” really is for the story. This in turn leads to a lot of back and forth as developers say something is “fixed” and then the testers say “no it’s not”.

  • http://twitter.com/bitsandpeace Jason Looney

    Don’t really like the idea. Developers are expensive and often too logical for their own good. All teams are going to have inefficiencies and waiting around; it’s part of the human condition. Building relationships, trust, and understanding take longer than slinging code.

    If you have a culture that encourages constant improvement then there’s no such thing as downtime, anyway. Waiting for a new feature? Go rewrite/refactor an old feature. Anything that’s not actively evolving is dying.

    What you describe is in-line with the “swarming” concept in Lean, which I have found to be horrendously inefficient. Eight people looking at a bug doesn’t help anything if only two of them can actually understand and fix it. Everyone doesn’t need to know everything.

  • Jason van Brackel

    I’m with Tom on this one. It does sound very lean-ish. Wait is waste. Do whatever you can to minimize wait-time.

    @Jason Looney I do agree on the idea of creating a culture of constant improvement, but waiting is still waste. IMO refactoring should be occuring during feature development. To have that kind of downtime in many small business environments would crash delivery dates and timelines.

  • http://twitter.com/bitsandpeace Jason Looney

    Agreed that waiting is a waste, but I feel like too much “swarming” only leads to more waiting & inefficiency. We all hate waterfalls, but you can’t really test and deploy something until it exists.

    In the old days, QA would get involved months after coding, which was bad. But that doesn’t mean we should try do do *everything* simultaneously.

    Truth is, that first build you ship to QA has the most bugs, probably including a big one that requires a dev to work a long night get a new build out. But, three or four days later, it’s QA doing all the work while the Dev waits for new bugs.

    I personally prefer a more “rolling” approach where QA is never more than a week behind Dev. I feel like this helps you dodge the inefficiency of the swarm while still maintaining team unity.

    My last Lean/Agile experience wasn’t a great one, though, so I’m probably a little bitter. I do love the “zero technical debt” concept though… definitely encourages refactoring as you go. But man, did we have a lot of arguments about generalization and specialization. In the end, you just can’t expect every team member to be the same. Everyone has a different skill set and role to play, and not all roles can be played simultaneously.

    (I’ve also seen the emphasis on Lean cause a team to completely stop designing, but that’s a different gripe altogether…)

  • Alex

    I think you can still have specialization and work simultaneously. Chunks of code can be tested independently and integrated with the entire build before anything makes it to a “QA” server. Testers can pair with developers to help flesh out unit tests and create automated functional/integration tests.
    I appreciate that stuff can’t be tested until it exists, but I guess it depends on what is meant by “exists.” Code should be written and tested, and that’s when it exists.

  • http://www.lazycoder.com Scott

    Jason: I see what you are saying. But having the QA a week behind the devs is still waste. Then the QA people file the bugs, and the devs have to fix the bugs. Which may or may not get prioritized ahead of other features. Meaning the bugs may never get fixed. I’ve worked at a lot of places with a “defect purgatory” backlog, the bugs just languish and are never fixed.
    We’re trying to get good unit and integration test coverage. That would cover a lot of ground, just leaving the UI-code interaction to be tested (since automated UI testing is usually a pain to put in place and ends up being very fragile), I’ve found it’s better to just pull a QA person over to pair with you and test the UI. That way, any possible defects are fixed before it even gets checked into the SCM.

    Our team didn’t have a specific goal of “adopt Lean practices”, we’re just trying out things and evolving.

    Alex: Yes, I’d like to see SDETS pairing with developers and writing integration tests. Which lead to my initial thought of having an all-dev team. It would require some evolution on the developers part. Learning how to test an application, how to think of edge cases, etc…

  • http://blog.torresdal.net Jon Arild Tørresdal

    Putting testers and devs together worked like a charm for my team. One immediate benefit was that bugs often got fixed immediately when testers found them, instead of added to the bug tracking system and fixed later. This got us one step closer to the zero bugs goal.

  • http://testertested.blogspot.com Pradeep Soundararaja

    So there is a lot of time with everyone that is referred to as “waiting time”.

    I am hoping that you are aware of the impossibility of complete testing – which means there are billions of possible tests that we could ideally run on the system we usually work on.

    Also, test teams focus should be on test coverage and or quality criteria coverage.

    The scripts your QA write can be only to check if the story came alive but there are stories beyond that and life of the system in different and often contradicting ways to the story.

    How about using the waiting time to run exploratory testing on the previous build?

    This makes at most sense to me because I am focusing on coverage of quality of the system. As you might be aware that quality isn’t just about functionality but a combination of other yyyyy-ability’s ( such as reliability, install-ability, support-ability )

    I like the idea of pairing up a dev with a QA but that can be helpful for the dev to learn more about the system when QA is performing Exploratory Testing.

    However, if what you have posted works well for you, I am fine with that. The question I am wondering is – we will know we are fine only after making a couple of releases to the customer. Are we willing to take that risk?

    Why not minimize risks by maximizing coverage.

    Think exploratory testing. Think Session Based Test Management.

  • http://testertested.blogspot.com Pradeep Soundararaja

    My name is Pradeep Soundararajan – however the name field appears to be restricted to 20 characters. Is that intentional?

    I wish there was a story for long names that QA people explored.

  • http://hex.lostechies.com Eric Hexter

    We (at Headspring) have found that having a developer who did not implement the story to a developer review (test) of the “completed” story … testing acceptance criteria and looking at the completed feature as if they were the PO. This dramatically helps in quickly finding issues with a story and builds a culture of development pairs delivering higher quality to the developer reviews. This helps getting to “done” with less waste.

  • Mike

    @Pradeep: Your issues are certainly deeper than technology. Lay off the 20 character restriction stuff. Its old.

  • http://storagemax1.com/az-peoria.php peoria self storage

    The organization is to bureaucratic, like for instance the PO is usually waiting for everyone to finish their tasks so they can see the demo and close the story. It needs streamlining.