Software Development: Its a team sport
What does a picture of a Triumph TR6 have to do with teamwork in a technical organization?
Well, I actually selected this image for 2 reasons. First, I’m a car guy and this specific car is a car I built myself from the ground up in my garage and I’m unabashedly proud of it. Second, and far more pertinent to this article, I was working on it the other day and it occurred to me that there’s a strong parallel between the world of cars, the world of software development and the importance of teamwork.
Consider the little british car I have in my garage. Its a pretty simple car, its not hard to drive, it can be a bit finicky at times but its generally forgiving and easy to fix. Its simple, pure, relatively inexpensive to purchase/maintain and it delivers good fun without a lot of fuss. Sure, you need tools to work on it and a place to work but nearly all of the work can be done in your own garage with a decent set of tools that you can buy at Home Depot (or if you’re old school like me, Sears). In the world of software it would be akin to a fun little IOS (or Android) game that some individual wrote and maintains in their spare time. Simple, fun and relatively easy to build and maintain.
Now contrast that to a Formula One race car. That’s much more like modern commercial software development. You have a team of specialized people maintaining the car, prepping it for every race, there are sponsors, driving it is hard work, just running it is an expensive endeavor, its a complex and difficult piece of machinery to maintain and it requires a variety of specialized tools. Winning races requires a delicate balance of people, tools, the car itself and the processes that make it all come together.
Very much the same, software development is a complex dance between people, process, infrastructure, tools and data. When they all come together perfectly, the technical team wins. Get any one of them wrong and you’re going to have problems. Take a perfectly prepped F1 car on the perfect track with the perfect pit crew but have the driver be off his game and…you’re going to lose. Take the same formula but have the pit crew be disorganized and slow…you’re going to lose.
So, how do you find that perfect balance? How does an F1 Race team do it? They start with great people, they build a great car and then they work together as a team to succeed. Doesn’t that sound easy and straightforward? Hint: Its not.
Just like winning races with an F1 race car, developing “good” software/applications is a team sport not a series of individual efforts. Doing it “right” requires strong leadership, a clear vision for what you’re trying to accomplish, hard work from every member of the team, and a delicate balance between all the various components that make up the effort.
Engaging a team on a complex project and finding that balance requires experienced leadership. The project leaders need to orchestrate all the pieces of the puzzle so they ultimately come together in the right combination. They need to be the enablers of the overall team so that work gets done in the right order and at the right time. Just think of the myriad of questions that have to be answered and answered correctly for the dance to be right. Do we need Scrum, SAFe, Disciplined Agile or our own blend? How do we track our work? Do we use our own infrastructure or something cloud-based? How many devs do we need? What should we use for automated QA? What are our compliance concerns? The list goes on and one and can seem quite daunting to someone who has not experienced it before.
Over the course of my career I’ve led teams of all sizes. I was one of the first people in the country writing code for the Macintosh before it was released, I’ve led developers at various startups and I’ve led multi-disciplinary, geographically distributed teams as we built an enterprise-grade platforms. Its different for every organization but the essence is the same. If you’d like to talk about how the thinking above applies to your particular environment, let me know, I’d love to chat.