There are so many people out there writing books about the best software development processes, tools, architectures, and so much more. I woke up this morning wanting to concentrate on writing about the lower level as I see it to a High Performance Software Development team. I truly see this as the essence to great teams, and great companies. It’s simply not enough anymore to have the smartest people working for you. You need to have smart people that embody the essence of your company.
You need teamwork! Take a look at the little kids playing soccer. One of them is playing the goalie, and happy to do so, while the other is playing forward trying to score a goal. They aren’t both fighting to score a goal are they? Here are the 7 Key attributes of High Performance Software Development Teams
Software Development Team Purpose
Does your team actually understand how it fits into the overall business objectives of your company? If you are a software developer ask yourself when the last time was that your manager sat down with you to talk about the actual purpose of your team, and your role within that team to help the company succeed. If the answer is "never" or "a long time ago", you might want to talk to them about it. A team with a sense of purpose and conviction will outperform a team without purpose any day. And I don’t just mean: “Your purpose is to ship this software on time and make it awesome, here is the architect you will work with, here is the team, go at er!”. I’m talking about “Your team is critical to the success of our business. With the ongoing threat posed to us by our competitors, your team is building the foundation for future applications built on our platform. Your key component will drive business for the next 20 years.”
Team Member Involvement
The individual team members must be involved with each other at every level. Everyone has a role on the team. Although your team might consist of software developers, quality assurance team members, business analysts, and software architects, it is critical that everyone on the team feel a sense of involvement in the project. This is achieved by focusing on two things. Ensure that each team member understands how valuable they are with their unique skill set, and two, make sure that they understand that without their involvement on the project, without them bringing that special “secret sauce” to the table, the team would not function as well!
Commitment to the Software Development Team’s Goals
Everyone on your team must be committed to the group’s goals and direction. Nobody on your team should be looking out for #1. The level of commitment in a high performing software development team goes far beyond personal goals and agendas. If your team seems to be having a lot of turmoil, or things aren’t getting done, chances are one or many individuals on the team have forgotten what it means to be a part of the team, and have become more concerned about themselves. One has to question the commitment level of every individual when projects fail. Not always, but a big factor in the failure can be the level of commitment of individuals on the team.
Be very careful with this one, as when commitment falls in a few members, or even just one, it can spread like a wild fire across your team. Not putting out that one burning bush quickly, might cause you to lose more than one or two trees.
Trust in Everyone
Just like in any good family, your team must trust each other, the company, and the leader. Everyone on the software development team must have trust in each other to honour commitments, timelines, and goals for each other. Trust within your team comes extremely handy when trouble arises, or objectives seem far too challenging to achieve. Having those relationships will ensure things keep moving. If you are a software developer and are feeling the pressure, having the trust in your quality assurance team to properly test and provide you with feedback is huge in a high stress project.
Process Orientation Critical to the Software Project Success
Software development teams that are extremely high performing are masters of process. When they work on projects, that have an arsenal of proven best practices and process’s to rely on to help them get the job done. They are usually the ones with the best tools to develop the software, as well as the knowledge that is needed to get the best out of the tools they are using. For example, some tools that our team uses include Visual Studio 2008, Cruise Control Continuous Integration, Subversion, Team Systems, and other tools.
This is a huge one. Your team needs to understand how to constantly improve. They need to love and thirst for feedback. A team that has decided they are “good enough” and happy with the way they perform are going to get lazy and start failing. A lot of people believe that once you get to a certain level, learning stops (used to be the case anyway). In today’s fast spaced world you have to be constantly learning new skills, improving yourself, and taking your game to the next level. If you don’t, you are not staying where you were, you are actually sinking.
Taking time for yourself to improve yourself is one thing, but your team also needs to take time to improve itself! Hold post-mortem sessions, have lunch and learns, promote continuous education through local colleges, and much more. While much behind lifelong learning is about the individual, the company that you work for needs to take care of its employees as well and promote continuous improvement. This doesn’t just mean just telling everyone “Always learn and take criticism well”. It means allowing the software development team to learn and take time. Give them time!
I’ve written about communication in the past. Communication in the software development process and in the software development team is extremely important. Extend that to within the organization, and any client you are working with. Yes that age old statistic of nearly 80% of the software development projects fail is true. I would lay a big bet however that had communication been at the forefront of the project, and excellent throughout the entire process, that number would be astronomically lower. With the fantastic tools and process’s we know have at our disposal as software developers, communication will be one of the major contributors to the success of the project, or the failure.
And there you have it! Now you may think to yourself “I know all this already”. If that is the case I have a few questions. Are you fostering an environment within your organization that will allow these kinds of attributes to shine through and be rewarded? If you are an employee, “Does the company you currently work at have these high performance teams?”. Everyone can effect change. And if you can’t seem to make change stick, you can always leave and try somewhere else!