I have a confession to make: I’m a huge football fan.
Every Sunday you can find me glued to the TV watching the high drama we call the NFL play out like gladiators in a Roman coliseum. It’s a gorgeous spectacle. The other day I was watching a game where the team was punting to the Hawks. The kicker, a specialist if there ever was one, dispatched the kick and then all hell broke loose.
The receiver, some professional 800 pound wrecking machine of a human being, caught the ball and proceeded to mow his way down the field. This guy was in Beast Mode. He was flinging 300 pound linemen left and right like rag dolls. In short order it was apparent that there was only one thing left between him and the goal line: our hero, the kicker.
The kicker, wearing only one shoe. The tiny little kicker, with shoulder pads that are probably best described as vestigial. This one scrawny guy was the only thing in between a rip-snorting, fire-breathing, brahma bull and the goal.
Right before he tried to tackle the coming human freight train I remember thinking, “You poor bastard.” As you would expect, he was cast aside by the rampaging helmeted monster like a toy.
After the play, the kicker got up, bleeding and concussed and headed for the sideline. You couldn’t blame the guy for thinking, this ain’t my job. I don’t get paid enough for this crap.
But he did it anyway. Let’s face it, anyone can tackle somebody. All you have to do is spread your arms wide and kiss your ass goodbye. We all have the tools required to do that.
And that’s what makes cross functional teams work. On a cross functional team we all have a minimum set of skills that we can all use. Like our kicker, we aren’t all equally skilled at using them, but we can do it in a pinch. If we have too.
The more I thought about that, the more I realized that this is just as applicable to software teams as for football. In order for a truly cross functional team to work, there must be a common underlying set of skills that is shared by every single member of the team. No exceptions. None.
Any member of a truly cross functional software development team must be able to do the following on demand:
- Pull the latest version of the code from the code repository
- Build the code from scratch
- Deploy and configure the application
- Build the tests
- Configure the tests
- Run the tests and be able to understand the results
Every single member of the team needs to be able to do all of the above. Everyone. That means:
- The project manager
- The developers
- The QA
- The Release Engineer
- The UI guy
- The Documentation specialist
- The Business analyst
- The Product Manager
- Did I mention everyone?
You don’t have to know how the code works. You don’t even have to know how to program (although that helps). Each of the tasks I listed is entirely mechanical. You could train a rat to do any of those tasks (with enough food pellets). They are the bare minimum necessary to contribute to helping a cross functional software development team get their work done.
You may even use tools to help make each of these steps nearly automatic (if you are on an especially bright team). That way you minimize the training required for someone to join the team and help you out. You automate the overhead so that any idiot can build the product and run the tests. This makes it possible for others to help you. It lowers the barriers to entry and creates the opportunity for others in your team to help you out.
If you can’t do these things, then you have barriers to helping each other out. If you don’t even know how to build the code, then there isn’t even an opportunity for you to contribute. These things are basic. No, they’re even more important than that, they are primitive. Learning these fundamentals should be part of joining the team for everyone.
So, is your team cross functional according to this definition?