Software Development Is a Team Sport

Developing software of any real significance requires a team.  A team is more than a group.  A group lacks a goal or a common purpose.  Are you a software developer that works as a member of a team, or a group?  Or, are you playing "individual sports"?

Software that requires a team is something of significance; not just a side project that many of us work on from time to time.  The software I'm talking about is designed, marketed, architected, built, tested, supported, and deployed for the world to use.  And EVERYONE on this team is important.  There is no single person that is more important than the other because a team is only as strong as its weakest link.  This is also why I like to focus on the team's successes rather than individual contributors.  

Marc Andreessen famously quipped that "software is eating the world" and I believe it. However, I don't quite subscribe to Microsoft's CEO belief that "every company is a software company".  Being a little geeky, that sentence fails the Liskov Substitution Principle; it's more accurate to say that every company has a (or should have a) software development element within it (if you're going to be competitive in the world economy). Software is everywhere and there really isn't an end in sight and building software of any real significance requires a team.

And, like team sports, software teams are comprised of individuals.  The individuals all have their own skills, ambitions, goals, challenges, strengths, and weaknesses.  As such, that team will be all the better when each of the individuals are the best at the skill that the team needs.  It's also a lot more fun when everyone is firing on all cylinders, confident, supported, encouraged by the rest of the team members.

There is nothing wrong with individual sports.  In fact, I have the utmost respect for people that play individual sports.  Just like being on the tennis court, there's no one else to blame. Or, just like being a pilot flying solo.  You have to be on top of your game to be able to do this.

I'm not saying, however, that this team has to literally be in the trenches shoulder to shoulder like Soldiers or like a football team for every play.  But, there has to be enough coordination and communication to ensure that the team is moving in the same direction with the same motivation. A software development team is very cross-functional with a lot of individual specialities.  Those individuals don't need to be spending every working hour constantly communicating because they need time to focus on their task - their specialty - because the team is relying on them.

I love everything about software development and working in a team. And I continue to get the opportunity to work with a lot of great teams. The "knowledge workers", as we are often referred to, appear to go into this abyss and emerge with something.  It's a very creative process.  Whether its a UI design, the front-end client code, the backend APIs, or database structures, they are all have fascinating things to consider;  everything from usability to performance.  

But, team's don't just happen.  They are cultivated.  They are built.  They are led!  

If you think software is hard to build, consider the challenges of building a team. People are the most complex systems I know.  They all have their own operating systems, communication protocols, and networking infrastructure.   They all come with their own "bugs", aka biases.  On top of this, many of these biases are subconscious, which make them even more difficult to identify.

Working with great teams is exhilarating, inspirational, and fun.  I've been part of a few great teams in my career and that feeling is alluring.  The one thing I really appreciated from a strong team is - strangely enough - teamwork.  Specifically, everyone supporting one another.  Encouraging one another.  Helping them get over roadblocks and freely giving them ideas.  Sharing what they learn along the way, regardless of whether or not they think the topic may apply to them.  In my experience, sharing things you learn along the way can result in surprising ways that it can be applied in other areas of the team or company.

Just like a sports team, a software team needs leadership.  Leaders that coach, guide, mentor, encourage, and supports individual members -- as well as the team as a whole. Leadership happens on many different levels.  Leadership is way more than management.  

Everyone gets up in the morning wanting to feel like they are contributing to the team and the goal.  "I'm going to go to work today and fail at my job and make everyone miserable", says no one, ever.

Moreover, people grow and change.  Their goals change.  Life happens.  They mature (hopefully).  It's a leader's job to communicate the direction of the team and the company and help people understand how they can contribute to that goal. It's also a leader's job to encourage individuals to learn new skills and get experience with a new technology to continue that growth so they can continue to be a valuable part of the team.  It's a leader's job to inspire and paint a clear picture.

So, are you playing on a team?  How are you doing in your role on the team to support, encourage, and lift everyone up?