What Qualities are Necessary in a Good Team Lead?
Midnight Thunder asks: "We have all had our share of team leads and some of us have been in
the position ourselves. I would be curious to know what things you have appreciated from your team leads and what you didn't like. Also,
for those of you who have been in the position how you found it. The main reason I ask is because this offer has been given to me as a carrot and I would like to make the right choice, and if I take
it learn from other people's experience how to be a good lead."
the ability to effectively run interference for the team, allowing them to focus on their tasks at hand is *very* valuable trait for a leader to have. there are some terrific books on leading technical teams - Debugging the Development Process (Steve Maguire), and Peopleware (Timothy Lister and Tom DeMarco) come to mind.
patience, and a cool head
respect, trust and support for your team
take chances on people, then make sure they have what they need to succeed (training, time, etc.)
listen to others' ideas, don't assume being lead means your ideas or decisions are better
like any other role, put people and doing the right thing above looking good to your managers or meeting a date on a plan.
I can think of tons of others, but if you get that right, you are miles ahead of most leads.
...begins in wonder
Fuck you and your power trip. Watch yourself constantly -- bad managers get big heads from being in charge. Good managers are constantly asking if they're applying rank only in areas that further the project. If you get off on playing top dog socially among your coworkers, if you pull a little more of the budget for a better PC for yourself when someone else on your team's going to advance the project more with that same bump, if you equate your position in any way with dominance... you're becoming one of those raging assholes who's only going to have a handful of brown-nosing followers while the rest of the team does the bare minimum and cuts out as early as they can.
Keep your whining to yourself. You don't get to vent about superiors, other team members, or the state of the company. You can start a big panic without realizing it. And you can make people paranoid about just what kind of crap you spew about them when they're not around. "If he says this stuff about Bill, what the hell is he saying about me?"
Be assertive, not confrontational. Learn the difference between stating what you want and holding that position and being a manipulative and domineering fucktard. "We need this by Friday. How can we get this by Friday? What can I do to help you do this by Friday?" That's a good chain of discussion. "We need this by Friday. (Interrupting)-Bullshit! I know you can do this. Stay late if that's what it takes. Jesus, anyone else could do this by Friday. You know, others are delivering more than you." That's a good indication that you're an ass. Follow up by complaining about a worker to others for bonus points.
"I don't know." Stand in the mirror and practice saying that every morning. The most dangerous kind of lead is the lead who thinks he knows everything. The next most dangerous kind is the kind who thinks he should know everything. It's your job to know how to get things done and how to find answers. Learn which people on your team are good for what kinds of answers. Don't even begin to pretend you know everything yourself, you dick.
Relax control. You have a pet way of doing things. That's cool if you're doing them. If one of your guys wants to take a different approach than you would take, hear him out and let him do it his own way if it sounds like it'll still work. You may have ten favorite algorithms and coding tricks that you think make things easy. But you know what? Your guy probably has different styles, algorithms, and tricks that he's familiar with. Let him do it his way if it's going to be easier for him, even if it doesn't generate the code you would have written yourself, you fascist pig.
Don't change. I see people promoted into management all the time who change their personalities completely. They buy books on how to act and think, start dressing differently, on and on. Hey, you were promoted because it looked like you were good material already. Lay off the overnight reinvention. It puts off your coworkers, and it means you stand a good chance of missing the boat on what you're supposed to be doing yourself. If you really think you need to make changes, ease into them a bit at a time as specifically demonstrated by need, you six cent whore.
Buy indemnity. That version of Linux you may be running is a liability to your company. Be sure to buy a license for every CPU from SCO. It's cheap at under $700 a seat, and in your new position, you've got control over the budget to help you do it. ~Darl
I'd recommend the advice in The Career Programmer: Guerilla Tactics For An Imperfect World. If you do this (and help the members of your team to do the same), you'll avoid many of the problems that typical programmers have dealing with the realities of a corporate environment.
Don't be a jackass to your employees.
Treat them with respect.
Remember, that their job is not their #1 priority in life. Family life always comes first.
Watch Office Space so you know how the average worker feels. Seriously.
Don't create meetings for no purpose
Don't attend meetings outside of the team when there is no purpose
Don't let marketing pull your team into meetings
Don't let your frustrations out on the team
Deal with the frustrations of the team
(The last two probably won't be a problem as long as there are no meetings)
- Do you have a pretty fair understanding of your system as a whole, even if you're not contributing code to every single aspect? (Could you, if you had to?)
- Do so many people come to you with questions that you've begun delegating them to other team resources?
- When a junior person has a question do you get up and go back to their cube and help them figure it out rather than just sighing and saying "I'll take it.."?
- When management is making a decision about what can and can't be done to the product, do they seek out your opinion?
You already are tech lead.www.HearMySoulSpeak.com
Take credit for your employees' good ideas and hard work. Don't recognize their contributions.
Stick to your guns. Being decisive is more important than learning from your mistakes. Changing your mind is a sign of weakness. Other points of view just undermine your authority.
Don't train your employees. Make it difficult or impossible for them to get other jobs or to do theirs with skill and enjoyment.
Reward punctuality and diligence above innovation and ingenuity. Employees' noses should be kept (a) clean, and (b) to the grindstone, not (c) "poking around in things that don't concern them." Which brings us to:
Keep secrets. Employees don't need to know about your company's mission and goals, its financial condition or even its day-to-day operation. Have lots of closed-door meetings; emerge looking mysterious and self-important.
Keep business and personal matters separate. Tell your employees to leave their problems at home. Reward long hours and penalise people who would rather spend evenings with the family than the programming. Forbid personal phone calls. Quash budding romances, discourage friendships and for heaven's sake don't have a company picnic.
Run a tight ship. Monitor everything: e-mail, pencils, photocopies (especially around tax time). No coffee at the desk (easily discouraged by charging 50 pence a cup).
Make clear distinctions between senior staff and hourly wage-earners. Regarding the latter, don't trouble to learn their names. Call the women "honey" and the men "boy." Regarding the former, take frequent long, boozy lunch breaks with them.
Pay as little as you can get away with. Don't promote. Don't be concerned about high turnover. When your employees go on strike, outsource everything overseas, where laborers know their place and there are plenty of skilled workers looking for jobs
More than anything, you need the human qualities: humility, forgiveness, optimism, caring. Being good at the technical side: scheduling, risk management, and so on, is a necessary but not sufficient condition for being a good leader. The human side is the other condition.
Books about the technical side:
Here's a book about scheduling: Slack by DeMarco.
Another DeMarco book: The Deadline. It appears to be a book about managing a factory. It's not. It very much applies to software.
Don't forget Peopleware, again by DeMarco (really, read everything DeMarco writes). This one is very much about software, and is right on.
Back to the human side of being a leader, be sure to read Managing from the Heart. I hope you aren't put off by the title; it explains better than I can how being humane is good for you, good for your employees, and it's even good business.
Having been in the position a couple of times, I know that I am not suited to being a team lead.
Having said that, I can point out the qualities that are really important.
"Provided by the management for your protection."
As I understand it is:
... blah blah blah").
Set general direction. Don't argue specifics unless your people are going off in a direction that directly contradicts project (client) requirements.
Consider your role to empower your people, not "control" them. I know that's a buzzword, but look past that. If you're hiring good people, let them do their jobs. Be sure to hire good people. Run interference for them. Buffer them from the vicissitudes of corporate politics whenever possible.
If you're not hiring good people, or not able to hire the people you want, or have inherited a group, it's much more difficult. But if you focus on letting the good people do their jobs, and possibly having them help the not-so-good people, you can get somewhere.
You can get a lot of mileage by publically giving credit to your people. When your management commends you for your department's work, be sure to mention by name the people who contributed. Giving praise to your people (almost) never costs you any credit for your group's accomplishments; it usually reflects even more positively upon you. Placing blame will always reflect badly upon you, regardless.
If you have people who are deliberately out to sabotage you or your people, it's again a bigger challenge. Play a lot of Diplomacy on your spare time. Read Machiavelli and Lao Tsu. Pray. Be ruthless. Play golf/poker/Counterstrike with the boss occasionally. Don't always win, but never make it obvious. Always be exceedingly polite to your enemies. Cite them as inspiration for your good ideas, without suggesting that the idea was theirs (e.g., "I asked myself what ___ would do, which lead to our implementing a flexible framework
Always be friendly to the people other managers neglect. Secretaries can wield incredible power. Janitors know more about what's going on in a company than anyone else, even if they don't speak the language. The box guy usually has stories to tell. If you're not the IT staff, make friends with them. Make sure they trust you. Don't abuse their trust (or ask them to monitor your enemy's email); they'll be helpful to you if there's a crisis. Treat people with respect. The lower they are in the food chain, the more they will value this, and you never know when they will be in a position to help you out.
If you have power, use it quietly. Never pull rank unless it's a very, very serious situation. Don't be ostentatious about telling people what to do. Whenever possible, phrase orders as requests. Thank people for doing their jobs well. Sure, that's what they're paid for, but they'll do a lot better work for you if they feel appreciated.
Eloi, Eloi, lema sabachtani?
www.fogbound.net
I'm currently a team lead, and have been the lead on many projects over the course of 20 years of software engineering. Here are the qualities I believe are the most important for being an effective team lead:
1. Technical skills - Very strong in the areas of relevance to the project, and in other surrounding technical areas as well. It's best if you're very good at doing what it is you'll be leading.
2. People skills - It's critical to relate to your technical team properly. Respect them and listen to their ideas. Explain your ideas to them. Come to a consensus if possible; if impossible, then explain clearly why you're saying it has to be done a certain way. Convince them through the logical application of problem solving, not brute force. Give people flexibility in their jobs, try to find good fits for their skills and interests, and tailor the level of direction you give to how much each individual needs - it's not one size fits all. Communicate clearly, and don't waste peoples time in unnecessary meetings, (some are necessary however).
3. Organizational skills - You need to be extremely organized. Make sure you yourself clearly understand precisely what's going on with all aspects of the project, and that you keep track of issues and resolutions. Use whatever methods work for you to track tasks and progress, but keep it up to date and accurate.
4. Buffering - Shield your team from the vageries of upper management. You be the one to deal with the crap that comes from the top, filter it out, and protect your team's work environment. You be the one to set tasks and priorities - don't allow people outside the team to direct the efforts of your team...it just results in confusion and wasted effort.
There are a lot of others, but I think these are the most important ones. Most technical people simply want to work on interesting tasks in an environment where they have a certain amount of independence as well as respect and consideration. Lead them in this way and you'll have a solid and happy team.
Facts are stubborn things.
Recognize when your employees can complete a given task. Then leave them the hell alone and let them work.
Recognize when your employees cannot complete a task, or make a deadline. Then help them. Give them the resources they need. Go to bat for them with upper management.
Good luck!
The more experience I have dealing with 3-year olds, the easier it is to deal with engineers... there's really not much difference. Ask nicely, don't demand. Make them think they're getting their own way. Don't play favorites. Praise them, even for doing something as fundamental as crapping in the potty chair. Take them all out for ice cream once in a while. Give them the best new toys to play with, and they'll be occupied for days. Let go, and trust them to learn how to handle things themselves, or ask you for help when they can't. Protect them from the bullies.
"Freedom means freedom for everybody" -- Dick Cheney
A lead is like a dogsled driver, particularly if you have strong, experienced developers. They are pulling the sled, not you - your job is to ensure everyone goes the same direction (toward the end goal) and that the sled doesn't tip over or fall through thin ice.
You can't understand every line of code, because you'll be busy running interference with managers and customers, so that your team can keep running.
You must constantly manage the expectations of your managers, your team, and your customers: everyone has preconceptions about your job, and most are probably wrong. Define specific boundaries on your time: how much you will code, how much design time, code review, meeting time, informal one-on-ones with team members, etc. You will probably code much less than you think.
You are the project personified. Your enthusiasm or cynicism will affect everyone involved. You must be genuine, or people will lose trust and dismiss you as a management stooge.
Don't get angry. Stay calm. Treat everyone with respect. Keep a sense of humor. If the project fails, stand up and take the bullet. But if the project succeeds, credit your team, not yourself.