One idea that confuses people when moving to Agile is the concept of the cross-functional team. The idea is that the team has all the skills necessary to move every item from pending to done by the end of the iteration. The wording is that the team is “self-directing and cross-functional.” Many people read that and start to worry about having a team of generalists that can accomplish any given task at any moment.
This can lead to very unsatisfied team members. Imagine this same situation in a restaurant. The head chef would possibly bring guests from the front door to a table while the bartender may have to make side dishes. Not only would this result in sub-par products, the people in question would likely look for new jobs.
I have good news. People do not need to seek new jobs because this is not the intent of cross-functional Teams.
Every person on a cross-functional team does not need to do every job. There is nothing inherently wrong with every person contributing to every job. Someone hired as a database developer should not necessarily be prevented from doing UX work. There is a time and place for it though. As told to me by the owner of the McDonald’s I started my working life at so many years ago, “when the rush comes we want aces in their places.” In my world today that means I need to see someone with solid analysis experience talking to the business about what they really need and want. As that happens a developer and tester can come together and get functional pieces of code ready to deliver more rapidly than the database administrator and user interface designer. We are striving to meet the definition of done by the end of the iteration. We must allow the right team member to do the right part of our required work to best accomplish this.
As a counter point we want to allow the team to grow in a self-directed way. If that means when they spike out a new idea the analyst tries getting into some design work, then let it happen. It doesn’t mean the analyst will stop working with the users. It will mean the team as a whole is better able to deliver value over time.
The confusion really seems to come from small teams. It is impossible to have every possible job handled by a unique individual on a team of 3-9 people. Either some task ends up requiring specialized skills that nobody on the team has, someone on the team is so specialized they cannot do many tasks outside of their specialty, or someone on the team is the only person in the company that can do certain tasks and gets pulled into other teams to accomplish their work. None of these situations means Agile is a failure. None of them mean cross-functional teams are a failure. This is where the Agile Project Manager/Scrum Master/Agile Coach comes in. There should be a person on each team that works with outside teams on blockers. This person will co-ordinate time and tasks such that specialized knowledge doesn’t get in the way of sprint delivery.
At the end of the day we just need to remember that to deliver the team needs to be cross-functional. The individuals on the team do not. They can be specialized as long as the team has everything it needs to move tasks to done. Having everything needed doesn’t mean every skill is specifically on the team, some may be brought in as needed for specific iterations.
How have you ensured a team has everything needed to achieve the definition of done in the past?