What skills, knowledge and talents should a junior programmer aim to obtain in order to be qualified to become a team leader?
The best team leaders I've seen have all been dynamite programmers. But they've all had several other qualities, which are harder to define: wisdom, good judgment, good people skills (friendly and pleasant but not a pushover), dedication, commitment, and — most important of all — knowing how to give credit to others. Such people are natural leaders.
The worst qualities you could cultivate are arrogance, always having to be right, always having to have the final say, being a glory hound, one-upmanship, having a huge, bruiseable ego, never admitting you're wrong, deflecting blame onto others while hogging all the credit for yourself, and, worst of all, competing with the people who work for you.
Where I work, the title Team Lead is often a completely artificial title applied to developers that don't want to get on the management track and don't want to spend time managing direct reports.
You become a team lead by being the defacto developer on the team to ask when there are technical, business or process issues. And you know you have reached that point when you tell someone on your team No, I don't think you should do it that way and they respect your opinion enough to take your suggestion more often than not. Likewise, you know your manager sees you in that role when you can tell him Have Bob do that rather than Ted, Bob will do a better job and he adjusts the project plan because he knows you know the team better.
It will be tough to be the best programmer you are capable of and be a leader, so accept the fact that you may be spending time doing things you don't like to do when you'd rather be coding. Not that you can't become a really good programmer, but eventually, something in your time constraints will have to give. This does not mean you will be a respected development team leader if your code is crap.
Like everyone in power, you'll be tempted to think of them as your minions, but the best leaders are the ones who have something to offer those who are in their responsibility. Be a resource for programming solutions or at least point them in the right direction. Create an environment conducive to software development by making those on your team responsible for their code and run interference on the outside forces threatening your team.
Get in touch with your natural tenancies. If you have an aversion to the following, think twice about this career move:
- Teaching other developers and caring about their career development.
- Giving critical feedback; sorry, but one day you will have to fire someone (Or maybe you should be.).
- Justifying and standing up for your team to the rest of the company. They won't 'just get it'. You have to sell, persuade, and convince. Just thinking of them as stupid will hinder your team. Eventually, you'll have to toe the company line. Admit it to your team and don't come up with some illogical nonsense excuse why doing something stupid is the right thing to do. Hey, I know it doesn't make sense, but do it anyway.
- Stick to what you know is the acceptable workload, time expectations, and code quality without being deluded into thinking you use to be able to program for 100 hours straight with no sleep and zero defects.
If you don't want these confrontations and would rather be coding, just be a great programmer and forget about being a manager. Every project/team/company could use a bus load of those.