Leading software development teams present many different challenges. Over the years I have come to realize that there is a core set of principles related to successfully leading software developers, principles that I will share in this post. Many of these principles are not specifically related to managing a team of software developers, but are more about leadership in general. I encourage you to develop your own set of core principles, because to be truly guided by them you must own them. I have found that innovation flows from creating a positive software development environment, and so this article is ultimately about creating the type of environment where innovation, results and team development flourish.
Communicate clearly and directly; do not wait to correct undesirable habits, address these habits as soon as they are observed. Praise developers when they exhibit desirable habits, never focus only on the negative. If a developer has only bad habits, this needs to be addressed right away and if not rectified the developer may have to be dropped from the team.
Be open, honest and transparent with your team and never deceive them. Take responsibility for your mistakes and learn from them, always demand the same of your team. Be honest and transparent with other groups you interact with as well. Remember that you often represent your team to other groups, and it is important that you represent the team well. Be transparent in all your dealings; always put the team above yourself. On a rare occasion, you may be faced with a situation where putting your team first conflicts with company plans. The team is depending on you to represent their best interests, so you must be willing to fight for them. However, never compromise your integrity. Check your gut and let your core principles guide you, if fighting for your team does the larger business serious harm, then direct your efforts more towards the proper treatment of your team. For example if the team is dependent on a certain product line that is slipping, and the company decides it can no longer afford to support the product, fight for the product and try to find ways to make it more profitable. However, if you realize that the company is correct to abandon the product, focus efforts on trying to find other products or groups within the company that your developers can move toward.
Always maintain a positive attitude, even when faced with crisis and difficulties. Your team will take their cues from you, if you are negative this attitude will certainly spread and infect others. A challenge is an opportunity to succeed, this is how you should look at every difficulty that arises.
Guide, Mentor, Motivate and Develop team
Talk to developers about their goals, both long and short term goals. As a leader do all you can to help then realize their goals, even if their goal is to one day have your job. Build their personal career goals into your plans for that developer, and do what you can to help them progress towards these goals. If the developer has unrealistic goals, let them know. This of course can be very difficult, but it needs to be addressed. A developer with unrealistic goals will not be happy working on the team. But be fair, an unrealistic goal is not a goal that is too high to achieve, it is a goal that you believe could be harmful to your team or the company, and therefore you absolutely cannot support their goals. Identify future leaders and delegate more responsibility to them.
Clearly communicate expectations
Let folks know what is expected of them. Low performers on the team may not be clear on the team’s expectations. Often these individuals can improve by clearly communicating expectations, and giving prompt feedback when they are not performing to expectations. To develop a high performance team, it is important to address and improve low performers. It can be demotivating for the team to see others on the team that are not making a positive, constructive contribution.
Marketing your team
Make the rock stars on your team visible to the rest of the organization. Put the team before yourself. When mistakes are made that affect other teams, take responsibility and communicate it as a team problem that you will remedy. When dealing with the issues within the team you can address individuals responsible for the mistake, however make every effort to avoid throwing the individual under the bus publicly.
Work hard, but reserve some time for fun. It is important to keep a sense of humor, and talk about common interests unrelated to work. This helps you develop a rapport with those that you lead. Empower developers and give them a chance to design and be creative in their work. Often leaders that are particularly bright and talented coders want to micro-manage design and code. Resist this urge and let the developers be as creative as possible. If you think there are issues with a proposed design or coding approach, by asking questions you can often lead develops towards a better approach while still giving them the freedom to think on their own. Build up your developers; do not tear them down unless you sincerely feel that it is warranted. If it is warranted, be blunt and honest, make your point clearly and without fear, but be careful not to do permanent, destructive damage. Always keep in mind that your primary objective during these times is to avoid a repeat and teach a lesson that will stick. Ultimately your objective is to help the developer improve and to reach new professional heights.
I have outlined my philosophy about leading software development teams, but I’m always seeking to learn and improve. So please comment with your thoughts and feedback!