From Developer to Technical Manager
A long time ago my grandfather worked as a machinist in a factory. He was a damn fine machinist, a true craftsman, and he took great pride and joy in his work. Most of my memories of my grandpa were from after he retired, and I would have loved to have seen him "back in the day". I’ve done some woodworking in my relatively short life, and I understand the euphoric sense of pride and joy that come when you finish a project that you built from scratch.
Grandpa’s skills grew over time and, as it’s a natural thing, he began informally mentoring junior machinists. It wasn’t long at all before management at the factory noticed both his skill and his mentorship and did what any good manager would do. They promoted him to a supervisor.
My dad tells me that my grandfather was never the same.
Being a supervisor sucked the life out of my grandpa. Everything he loved about his job was gone. He no longer worked with peers, he oversaw employees. Reviewing their work, approving their vacation, dealing with "poor performers", and spending less of his time creating.
Grandpa’s managers made an all-too-common mistake. They assumed that because grandpa was good at his job, he’d be good at managing other people doing the same job. Sound familiar? Thought so. By no means is it limited to any one industry, either. I’m pretty sure that eons ago there existed a caveman who was good at killing mammoths, and as a result was promoted to "branch manager", and probably ended up killing his coworkers ’cause that’s all he knew how to do.
A lot has been written about this problem. And it’s definitely a problem.
But it’s not so simple. Managers need a good measure of domain knowledge. There are two ways to get a manager with domain knowledge: hire a "manager" and teach them the domain, or promote a domain expert and teach them to be a manager. Because domain knowledge tends to be more specific and more detailed, and because managing is incorrectly viewed to be "easy", the default is usually to promote a domain expert. Add more mundane logistics like the fact that domain experts tend to already be employees and it makes the decision that much "easier".
In the software world the problem is amplified by the nature of "domain experts". The majority of us can hardly interact with any other human being, not to mention "manage" developers.
Unfortunately, because of wrong assumptions, most organizational structures are set up in a way that assumes a career path from developer to manager. In Code Craft, Pete Goodliffe calls these people "Reluctant Team Leaders".
"This is the organizational classic; a developer who’s been promoted to team leader when there was no further technical route for him to advance. You can plainly see that he is uncomfortable in this role. He doesn’t have the correct skill set, and he struggles to keep up. He is a programmer, and he wants to program. This guy is not a natural organizer or manager of people, and he is a bad communicator."
Organizations with an outdated organizational structure have got to wake up and change before it’s too late. They will either lose or ruin their people. Either way, the company loses because people are the company.
I do think, though, that it is possible for a developer to successfully become a technical manager. There are some developers that have the skills, nay, more like the potential, to be good technical managers. We’re seeing more and more developers with "people skills". Partly because the barriers to entry have lowered. For example, you don’t need to have a secret love affair with bit twiddling 1’s and 0’s in order to write software. Higher level frameworks like Java, .NET, and Ruby/Rails enable more people to create something great than has previously been possible.
So what are the characteristics of a good technical manager?
- Communication. Communication is where developers struggle the most. The world with two personalities (1 and 0) is vastly different than the world of billions of personalities. Each personality type communicates in a different way. And as a technical manager, one of the most challenging tasks is to help a group of individuals communicate and work as a team. A developer has a ONE-TO-ONE communication path: developer to their manager. A technical manager has a ONE-TO-MANY communication path: from the manager to every person on the team. Often a technical manager will find themselves proxying the communication between two developers.
- Technical savvy. A technical manager has to maintain the respect of their team, and software developers tend to be an elitist group – if you can’t keep up, good luck. You don’t have to be technically "smarter" than your team, not by a long shot (otherwise you should stay a developer), but you should keep up to speed with current trends, best practices, new technologies, etc. In my experience, technical managers can "cherry pick" smaller features, but should never be in the critical path for a project. I’ve been there, it’s not fun. Open source projects are a great way to keep up with both deeper and broader design and implementation techniques.
- Organization skills. A normal developer keeps track of many things: bugs, features, ongoing email threads, and of course current designs, implementations, etc. A technical manager must track all of this, but at a higher level and for several people across the team.
- Priorities. Your primary job responsibility is no longer writing code. A technical manager has to come to terms with that before accepting the job. But a technical manager’s job also isn’t to dictate or control the team either. A technical manager needs to understand the business, and needs to set a vision for the team, but the primary role of a technical manager should be to clear the path of developers to make them the most productive they can be. Read about the ScrumMaster role in the Scrum project management process. It’s a great description of a technical manager’s priorities.
- Humility. Developers have egos. As much as I’ve tried to pretend that’s not true, it is. It’s crucial to understand that for a technical manager to successfully bring a team together, the "I’m the boss of you" attitude can never show it’s face. A manager who assumes they are superior to the people on their team both promotes the wrong assumption that managers are "above" developers (how do you think the wrong organizational structures came to exist in the first place?), and provides a horrible place to work.
In addition to the character traits of technical managers, it’s critical for a developer to have a clear grasp of what the job role will include, in terms of day-to-day activities. Andrew
Tokeley has a good write-up of what you can expect. I think most developers considering a move to a managerial role force themselves to believe delusions like "I can still write a lot of code" in order to make the move more palatable. I’d argue that, depending on your company culture, you’ll probably write less code than even Andrew indicates in his charts.
Over a year ago I took the plunge from developer to team lead. It’s been an interesting ride. Frustrating, rewarding, educational, and enlightening. For the right type of person, it’s a good move, if you’re ready for it. For the wrong type of person, you’ll never be ready for it, so avoid it like the plague. If your company forces you to become a manager to "move up", either be satisfied staying put, or find a new company that has a clear technical career path. But overall, do what you enjoy, and do it well.
April 21st, 2008 at 2:04 am
Good article.
> I do think, though, that it is possible for a developer to successfully become a technical manager. There are some developers that have the skills, nay, more like the potential, to be good technical managers.
I agree with this. It all hinges on the fact that the developer wants to perform this task and has prepared for it in the past and become more aware of the environment.
You can code without having to ask yourself if it’s making you happy/unhappy.
You can’t lead without asking yourself if it will make _someone else_ happy / unhappy.
Different people have different skills & interests. You need to think about this to ensure you bring out the best of everyone.
April 21st, 2008 at 8:02 am
[...] From Developer to Technical Manager (Aaron Lerch) [...]
April 21st, 2008 at 8:58 am
I read an Ask Slashdot once where the prevailing opinion was good bosses share two traits: a) organized b) useful. I think your #5 is about usefulness, or utility, and it’s the key. To sort of mix metaphors it’s about servant leadership.
April 21st, 2008 at 9:34 am
@Matt-
Totally agree. Maybe someday I’ll post my thoughts about how “servant leadership” can work in a software organization, and why it’s a better way of doing things.
April 21st, 2008 at 4:05 pm
I rose up and became project manager a number of years ago and I absolutely hated it. I lost the ability to be creative, at least with code and design from a hand’s on perspective. I missed it and realized that is what drives me. Much like your grandfather, it sucked the life and drive I had right out of me. It’s even worse when the company has project managers without a stitch of power to dictate direction or even have some smidgen of control over how things are done.
For myself, I reject project management gigs. Even if it will bring in more money. More money doesn’t equate to more a more happy human. Once I realized this and sat back down to really code, I made some great leaps forward in my coding knowledge, like something had opened up for me.
It was a great experience and an eye opener for me. Well said Aaron!
April 22nd, 2008 at 1:07 am
I am one of those that despise ever having to go to management. If I had wanted to be a manager, I would’ve studied business, not computer science… and I think throwing someone like me, an introverted nerd who enjoys solitude and a relatively non-stressful work environment (meaning not too many emails, phone calls, meetings, etc), would be the worst thing that you could do for your company.
April 22nd, 2008 at 3:21 pm
Interesting write up. I think I might toss a follow up to this myself.
April 24th, 2008 at 9:40 pm
[...] From Developer to Technical Manager | Aaron Lerch (tags: career development inspiration interesting job leadership programming) [...]
April 26th, 2008 at 5:41 am
[...] We Adopt Scrum or XP? Enterprise Service Bus Messaging Using nServiceBus From Developer to Technical Manager The Technical Manager The Problem Preventer Visual Cobol, Enterprise Processes, and SOA Should you [...]
April 27th, 2008 at 8:26 pm
Sounds like you’ve been reading The Peter Principle, Aaron. Definitely have to agree with you, having been in the exact position your grandfather was in — being promoted due to lack of opportunities, then eventually being sent back to my previous position. While some people are natural managers, others have to be taught managing skills. Being left floundering on your own is no way to have a career.
–JP
May 3rd, 2008 at 4:11 am
You forgot the one other trait of a tech mgr (not a tech lead): the ability to get paid *significantly less* than a skilled dev. Honestly I believe that to be one the largest barriers in our industry t getting better technical managers. The pay as a skilled and senior dev is *way* better.
May 8th, 2008 at 6:51 pm
Great post. I just recently promoted to Team Lead and I am seeing significantly less time doing what I love. Hopefully I will be able to offset this somehow…
May 24th, 2008 at 10:14 am
[...] We Adopt Scrum or XP? Enterprise Service Bus Messaging Using nServiceBus From Developer to Technical Manager The Technical Manager The Problem Preventer Visual Cobol, Enterprise Processes, and SOA Should you [...]
May 25th, 2008 at 8:57 am
Hi Aaron. I wrote a follow-up to your article. You can find it here:
http://www.noop.nl/2008/05/how-to-select-a-fine-technical-manager.html
June 10th, 2008 at 9:41 am
[...] a read a lot of articles talking about what it takes to be a good development manager. There are also articles about what makes a good developer. I thought it would be a good idea to [...]
August 17th, 2008 at 6:52 pm
Thank you for providing such interesting article.
There are useful thoughts for future career!
September 2nd, 2008 at 10:33 pm
[...] while ago I wrote about some characteristics of a good Technical Manager. After having some time to reflect on the transition from Developer to Technical Manager, there are [...]