Should they have a degree?
A few things I can see, they:
- should know the platform they are working on
- should know to listen
- should know how to drive problems
- should know how to mediate between co-workers
- many others....
Should they have a degree?
A few things I can see, they:
Here's my previous take:
I think a degree can be very helpful. In my former field, mechanical engineering, it would be a given, but it doesn't appear to be a requirement in computer science or software development.
A certain amount of technical skills in the area is table stakes, but they don't necessarily have to be very strong or very up to date. You're looking for intelligence, solid people skills, calmness under fire, lots of focus on what matters, strong common sense, persuasiveness, energy and hard work, selflessness and integrity, an almost eager willingness to give credit to others, ability to sift through complexity to focus on what really matters, and a vision for where the team is headed.
Edit: There's an undefinable charisma in the very best leaders, and an ability to energize people to produce much more than they think possible. Part of it is the vision, focus, and common sense aspects, but there's also an undefinable charisma at work.
I appreciate the following skills and habits of my previous and current tech leader:
A tech leader should:
Update: There is an excellent post on this here.
IMO the most important skill is to motivate the people working for you. Especially when the job is 80% done, but it seems like it takes another 80% to finish the project.
A leader must be able to defend his people against hostile influences from outside the team. Obviously the programmers often have to talk directly to the customers, to gather requirements etc. But an angry customer should never ever have a chance to shout at the programmer, even if the programmer deserves it.
The leader must have a clear vision of how the system should be structured. He doesn't have to know each and every detail, but without an overview, he will not be able to make reasonable decisions.
Which is the next important skill. Some people are just too anxious to make a decision, not matter how much information they have.
A good tech lead should have a sense of humor and a sense of ownership in other's success. Being the lead means you'll have to deal with personalities, and the fractious moments that you inevitably experience can be greatly smoothed over with humor. Some of the best ways to point out errors is in jest, and sometimes at your own expense and not the team member you are trying to guide. Your sense of humor will also help the business units not feel as threatened by the "smart" people.
You also need to make the team feel as though their accomplishments matter, as it is about their productivity, not the team leader's.
That said, the tech leader needs to have highly polished technical skill, as this person will have less time for developing on their own and must ensure that their are good sound solutions being implemented as you build your application. So while you are reviewing and communicating you will spend less time coding, but you'll need to be able to recognize bad code. The only way to do this is if you have good code skills and experience that you can rely on to help make decisions.
In addition to the other items here, they should have the trust in the team to delegate responsibility and allow other people to take on the work. Too many leads take all of the work themselves, increase their personal stress and deliver poor quality and / or late because the rest of the team is ssat around twiddling their thumbs with nothing to do.
A tech lead should have good technical skills. Without solid skills she or he won't gain respect of the technical team.
On top of that a tech lead really needs soft skills that s/he has probably little or no training in. An important one is how to give feedback, and another is how to resolve conflict.
Giving feedback can be as often as simple as "When you do x, the impact on the business/team member/you is y". As people get more comfortable with that "When you do x, the impact i y, what can you do about this?". There's a bit more to it, but as long as you keep focus on behaviors you'll be set.
Managing conflict may sound a bit airy fairy. It's very important. There may be conflict within the team (over practices, rewards, technology) there may be conflict with a customer (over priorities, budgets, even sadly personalities) or even your boss. A tech lead should have the skills to help or at least if s/he can't solve it, then escalate it as soon as possible to someone who can.
That's just two soft skills that i'd expect a tech lead to be able to demonstrate s/he has done in the past.
they should be able to conduct a tech briefing session. basically sitting with the programmers in a meeting for a few hours to go through the spec in pains-taking detail, its the only way to be sure the requirements sink into programmers heads.
i know, i know... this smacks of distrust and disrespect of programmers, and i would apologize to the programmers in advance for this - but do you want your project to run smoothly or not?
ive written more about this topic in my blog article: http://pm4web.blogspot.com/2010/04/conducting-tech-briefing-session.html
LM
The ability to communicate well. Everything else can be taught, learned, faked, begged, borrowed, or stolen. Effective, meaningful communication is hard, and that's why it's the missing link in loads of otherwise very strong teams.