My son rows on a crew team. He practices 6 days a week for 4 hours a day. When he isn’t rowing he’s frequently watching rowing videos; examining technique and evaluating strategy. Initially, I knew very little about rowing. I realized that if I was going to communicate with my son, I had to learn more. So, I picked up the book “The Boys in the Boat” by Daniel James Brown. It’s an amazing story about 9 Americans and their participation in the 1936 Olympics that helped me understand rowing, it’s intricacies and team dynamics.
The teamwork required just to get a boat launched is impressive. It is fascinating to watch nine teenage boys take a 60 foot boat from it’s rack onto their shoulders, walk it several hundred yards to the water and orchestrate a launch. Think of the teamwork required. It dawned on me how the dynamics in a crew boat are similar to the dynamics of a software team. Just like crew teams, there are winners and losers. All teams are not created equal with performance directly related to the people on the team (and equally important, how they work together).
On an 8 man boat there are 9 positions, 8 rowers and the coxswain. The coxswain guides the boat, on and off the water, providing direction, motivation and strategy during the race. The 8 seat, who sits directly in front of the coxswain is the stroke seat. The stroke is, at the coxswains direction, setting the pace for the boat. A Stroke needs to be confident, strong, level headed and consistent. They can’t let the stress of the race and their emotion get the best of them. 7 seat shadows 8 and must match the pace of 8 for those on the opposite side of the boat, following, yet setting the appropriate pace. Six seat through three seat are considered the engine room. They are the powerhouse at the core of the boat. They follow the 8 and 7 seats and pull hard, though, perhaps, less technically efficient than other positions in the boat. The bow pair (two and one) must have excellent technique. The front of the boat is the narrowest and they must deal with any instability or motion generated in the rest of the boat. One and two make constant adjustments attempting to make the boat as fluid as possible.
Coaches are also important. Their job is to try to put the best boat they can on the water. This means that they are looking for the right mix of rowers on their team. The right mix may not be the strongest rower’s but the mix that makes the boat move the quickest through the water. Coaches must recognize any issues on the team and make adjustments. In rowing, coaches determine which team members impact the boat in different ways by “seat racing”. Seat racing involves racing two boats and then replacing a person on one team with a person from the other team to see how it impacts the performance of the boat. Coaches seat race the team looking for the most effective dynamics. When it all comes together they call it “swing”. “All were merged into one smoothly working machine; they were, in fact, a poem of motion, a symphony of swinging blades.” ― Daniel James Brown.
As in rowing, seek the right mix of skills and roles on your software team. These include:
· Business and product understanding
· Software architectural skills
· Software developers and testers
· System admin or software configuration management
Unlike rowing, however, these skills don’t have to be in a particular seat on the boat. While position doesn’t matter, highly successful teams will have a balanced mix of all of the necessary skills and clear leadership.
Software leaders act as coach and coxswain. They aren’t necessarily the best technical architect, developer or tester but they push the team forward. They must constantly evaluate the team skillset and the team dynamics to determine if they have the right mix. Load your boat with people with the skills necessary to make your team the most productive and efficient. Software teams missing key talent and skills will go more slowly or completely get off track. If there is a problem on the team then, as with a rowing team, make adjustments.
A strong architect acts as the “stroke” and is key to establishing a good foundation and design for the rest of the team. A boat must have a good athlete at the "stroke rower position", someone who can maintain the pace the coxswain is looking for, and set the rhythm standard for the other rowers. This compares to the team architect who takes direction from the team lead and creates an architecture for the team to utilize. Ideally, the software design should be as simple as possible while solving the problem. Convoluted or poor design software design occurs when teams don’t have the necessary architectural skills or lack an architectural leader. This can result in a system that is difficult to test. Conversely, too many architects on the team can slow the team due to conflicts. How would the boat move if there were two rowers trying to set the pace or strategy for the boat?
Software Developers and Testers act as the "engine room". They generate the force to move the project forward at the pace set by the software leaders and architect. They work with the architect to develop a cohesive design. They should have solid software development and/or testing skills and be diligent in their approach. They should have a zeal for developing working software and making sure that the implementation will meet the given requirements.
Software team members are not interchangeable. In rowing, seat racing is a way to determine the impact of one individual on a boat. As in rowing, replacing one software developer or tester with another could have a big impact on the team. Have you ever heard an executive say, “Just go hire some developers”. If Joe knows Java and it’s a Java project then does it matter if we replace Sarah with Joe? Well, it might… if Sarah has been providing software design strategy to the team and has specific domain knowledge about the application. Perhaps Joe isn’t very good at design and replacing Sarah’s in depth experience could take a long time and slow the team. Consider the dynamics in your team when making changes.
Successful teams keep their eyes on the end goal. They are diligent in their technique and approach and find ways to be more efficient (make the boat go faster). They work together, not against each other. Imagine if one person in a crew team was working against other team members. It would be an ugly site, indeed!
Developing software is an art. It takes skill and creativity to develop cohesive, supportable, and easily maintainable software. There are software developers and testers that are more talented than others, or software developers and testers that might be less talented but make your boat go faster. Consider this quote from famous boat builder George Yeoman Pocock:
“It’s a great art, is rowing. It’s the finest art there is. It’s a symphony of motion. And when you’re rowing well, why it’s nearing perfection. And when you near perfection, you’re touching the Divine. It touches the you of yous. Which is your soul.”
Software teams don’t get to experience the motion on the water, the pain of the 2k race or the joy of winning an Olympic medal; however, working on a good project can invoke similar feelings if the team finds it’s “swing”. It’s extremely rewarding to be part of a team of talented people, perfecting their craft, creating elegant solutions and working together towards a common goal.