Yes, engineering managers absolutely should understand how to code, and understanding concepts like technical debt, unreliability of estimation, etc. goes without saying. And it's awesome for a manager to be familiar enough with the tools and work to be able to implement a quick critical bugfix or similar when unexpectedly necessary.
But if they're a good manager, it's far better for the organization for them to be spending their full time managing. Let coders code and managers manage, as long as they're both good at their jobs. The author's argument makes as much sense as saying a professional baseball coach should be spending 30% of his game time actually playing with his team.
And honestly, this is just BS:
> Once a person stops coding for a significant portion of time, critical connections to the concerns of developers atrophy.
Citation needed. It sounds as fake as supposed facts like we only use 10 percent of our brains, or other hogwash.
Your argument sounds good in theory, but a lot of us have the experience that 'good managers' are unicorns.
Before my start-up, I was a dev manager. And a damn good developer. I knew what technical difficulties my team had, and understood them, because I was the first place they came for an extra set of eyes. I ran defense from upper management because I knew the concerns, and I was the one with the voice. Because I'm also an open-book style manager I didn't play the "they don't need to know" card, but I could handle those things without them first having to mount a case to me every time.
I've watched A LOT of "I used to code" managers, and almost to a man, they are a disasters.
I don't quite agree with that. Specialization is a good thing, but having managers and coders seems too much specialization. It leads to the situation where a manager could fix something small in the same time he communicates someone to fix it. Or situations where the manager slowly loses touch with technology. It's not likely someone will "understand" programming over the years without doing it constantly. And over time the manager's value to the team withers away.
I like this idea that there are no managers who manage and engineers who engineer. Instead, there's maybe one person who takes the responsibility of managing work, but does programming or other non-managing work the rest of the time. The engineers can also do a bit of managing, but they'll focus on the engineering.
The assumption is of course, that managing work can be automated away sufficiently and the team is a not huge. These are realistic assumptions, but are often untrue because of organizatonal flaws (or flaws with the manager).
The baseball coach argument doesn't really fit here, because baseball is not reinvented every 5 years. Programming quite often is. A C++ systems programmer probably can't understand much about HTML5 frontend programming. But a manager with C++ background can learn.
If you're looking for anecdata, I can tell you that after stopping coding and doing "business stuff" for a while, including the "engineering management" role, I did catch my perspective shifting away from that of a developer, towards that of a business guy. Adding some coding to my routine has helped get that back, besides a number of other benefits.
The problem that I've found with engineering managers who don't code anymore is that they are stuck in the mindset of the last project they worked on. I've spent a lot of time talking to managers about decisions that they make which I think are poor, but they "know better." They aren't on the front lines when it comes to knowing about libraries, languages, infrastructure and lots of other development related topics. I agree that if managers stayed in their lane, it would be great; but that rarely happens.
>> Once a person stops coding for a significant portion of time, critical connections to the concerns of developers atrophy.
> Citation needed. It sounds as fake as supposed facts like we only use 10 percent of our brains, or other hogwash.
I don't have a citation, but this seems obvious to me. It also bears out in my own experiences. Delivering great software requires deep thought and long, uninterrupted periods of concentration [1], and managing requires rapid context switching.
When I was lead developer at a web consultancy in Austin, I mostly attended meetings and context-switched between one of dozens of projects. I never had uninterrupted blocks of time to analyze problems deeply. When I left, it took me a good six weeks of coding before I felt I could really push on hard problems again.
I had trained my brain to context switch every 5 minutes, and so it expected to keep doing so. I still knew all the syntax, and remembered how everything played together, but breaking business stories down into their component parts was difficult. I couldn't hold the program in my head.
[This bears out in the physical world, too: we would not expect a 100-yard sprinter to necessarily be able to run marathons.]
I really think you are failing to recognize that to actually understand technical issues managers need to code. Most managers are terrible at their jobs precisely because they are totally out of touch with these technical realities. At best they are clueless. At worst managers actually think they know better than their engineers and develop a hostile relationship with them.
> The author's argument makes as much sense as saying a professional baseball coach should be spending 30% of his game time actually playing with his team.
This is a bad comparison because baseball hasn't significantly changed in the last 100 years, but software development changes significantly every 5 year to 10 years.
Over a 40 year career in software development, a typical person will see major fundamental shifts at least 4-5 times.
So yes, if you are directly managing engineers, you should be coding at least some of the time.
If you can't or don't want to contribute code, you should quickly move into upper management and focus on coaching middle managers.
Spending 30% of my time coding is just self-indulgent. My team knows I can code, knows I understand their work, and they need me to do the crap they can't afford to deal with, so they can focus on coding.
Also, I'm way to unreliable as a coder because my work can be interrupted at any time. Time blocking a few hours doesn't work, because being a developer is not just writing code for a few hours.
If I want to code in production, I have to participate in code reviews, handle pull request, take part in ad hoc discussions. Otherwise I'm just a tourist getting in the way. If I want to code as a hobby, I should just do it in my own time.
That's where managers often go wrong; they think a team of developers is something to be shaped. It's more like a movie director and his or her team, and the manager is a producer, providing resources and clearing away obstacles. In a well-functioning team there may be little need for active "managing," and when a manager takes it upon himself to do this, he can get in the way.
I think this works as long as the engineering managers follow a few guidelines:
* Don't code 20% of a full solution with your 30% time and expect the other engineers to pick up your work and finish the other 80% to make it production ready. If you can't cross the halfway point with a task, don't take it on.
* If you do need an engineer to make your code production ready or fix a bug in it, don't act like you did him/her a favor by "getting it off the ground". They are doing YOU a favor by finishing your work for you!
* Be humble and expect to take massive amounts of criticism from engineers who take a lot of pride in their code and spend their careers perfecting it.
* Avoid becoming overly defensive and asking engineers to relax their established code quality guidelines or test coverage to accommodate your compressed schedule.
To echo your first point, I think the best task for an engineering manager is fixing bugs. It lets them keep in touch with the code base, is generally small enough that it can be compatible with constant interruptions, and demonstrates a much needed humility.
This is a fascinating thread to read. I would love to know when people comment if they also consider themselves a manager, or have managed in the past. The reason is that I find management is a very different skill set than coding, and spending 30% on something that isn't making you a better manager would seem to be counter productive.
That said, I totally get the angst over managers who have never been coders. Sort of like Scully relating the sale of computers to being similar to selling 'colored water' (Pepsi vs Coke). Not so much in my experience.
There is also the question of scale, if you're a 20 person company I can easily see everyone writing code as well as doing other things, 50, 100, 2000 person company? Not so much.
And there is the question of perspective, a solid engineer is there to make the best thing they can, within the constraints of available CPU, memory, and storage resources. A solid manager is there to take a limited amount of money and time and ship the best thing their team can make within those constraints. So sometimes managers decide things one way, and engineers argue for a different way, it's always helpful to be able to see the problem from the other person's shoes. And yet my experience is that line managers, often drawn from the ranks of engineers, are more able to see the constraints the engineer is working under than the engineer is able to see the constraints the manager is working under.
I don't know if there is a 'right' way to blend those two roles. I suspect that if you're in a large company as a manager and spending a third of your time coding, you might want to check with your manager on how they perceive your performance. If you're in a small company and write no code you might want to check with your team to see if they feel they have it covered or not. But I can't imagine there being a 'blanket rule' like spend X% of your time coding that would have anything close to universal applicability.
Totally agree with everything you said here. The general response here is (understandably for HN) biased a bit too far in favor of coders.
As a lifelong programmer who only reluctantly does management, I have to say that it sometimes seems just as hard for an engineer to understand what a good manager does as it is for a manager to understand what an engineer does. It's easy to make fun of a non-technical person because the terminology they don't understand is concrete but people management is every bit as difficult.
Perhaps the problem is that it's relatively easy to weed out an incompetent programmer, but bad middle managers can often blend in or otherwise find ways to make themselves look good to upper management. In that sense a manager who codes is at least some kind of positive signal.
But as a pure programmer I have to say this: two of the best managers I've had were not technical in any way shape or form. It's a mistake to think a good manager has to be technical in all cases. Good managers can add value in invisible ways dealing with the higher ups and shielding the team from politics and distraction. If the technical team is good and the manager has the appropriate level of trust then lack of specific technical knowledge need not always be a problem.
As you say, it varies according to circumstance, but a lot of commenters here seem ignorant to the fact that there's more to the job than simply understanding the programmers world.
> spending 30% on something that isn't making you a better manager would seem to be counter productive.
You're assuming coding doesn't make you a better manager... what if it does?
>There is also the question of scale, if you're a 20 person company I can easily see everyone writing code as well as doing other things, 50, 100, 2000 person company? Not so much.
Bill Gates shipped code up until 1989 [1]. Microsoft was between 3000 and 4000 employees at the time. Sure, he may be the exception that proves the rule, but maybe there's something to the notion that coding managers have a better sense of the technical market... of course, it depends on what market you are in.
I've spent most of my time as a coder, but have managed from 1-12 people from time to time.
The worst manager I've had, tried to often pretend he had any idea what he was talking about when pitching some gibberish during the 10min standup talk. He would often make suggestions like "and if you use Apache Solr? ". My face would be like ":/" and had to explain a subtle no (cause he was paying my salary). If he wouldn't be putting up that act, and just work the team dynamics without trying to provide technical solutions to experienced coders who will be like ":/", he would actually fare pretty well I think.
But I must say if you are presented with a tough technical problem, and human resources to solve it, but you fail to comprehend the problem and how you should direct your resources in solving it, it's going to be a tough cookie to make any impact other than wasting your time, and precious developer hours trying to do something you can't.
The best one I've had I worked with for a long time as a colleague freelancer, and 0 hour contract directly under him until we expanded to a 15-20 workforce.
He was an experienced PHP'er, and would argue even a better salesman and networker.
He would almost never write any code, but when push came to shove he would provide the fix within minutes time after a client made an upset call after hours.
Most importantly: Other than being able to point out strength and weaknesses of his employee's, he was never afraid to acknowledge his own, and always assumed our expertise over his. ( unless someone really f'd up of course :) )
I would much rather my manager (if I had one, which I don't) be a good /manager/ and a non-engineer, rather than being a bad manager and a bad engineer.
I want my manager to have a great engineering background, but not be interested in the actual engineering except for purposes of helping the engineers get their jobs done. In other words, build a good team, remove obstacles and get the heck out of the way.
This is the correct answer. The manager's job is to manage the people, not the project. That's what a tech leads and PMs are for.
A good people manager works to keep their employees comfortable, aims to avoid conflicts (and resolves them if they arise despite these efforts), mentors and coaches people to develop new skills, and shields them from politics. Doing the work of an individual contributor just gets in the way of that. The manager should be familiar with and understand what their people do, but leave the actual performing of that work up to them.
Today, I quit my team because of the manager. Nice guy, but zero knowledge of our code base, no interest to learn it, and no connection to what the problems we, as developers, were encountering. He didn't know, and didn't want to know.
With each proposal to address major technical debt issues, he had no context, no understanding, and would only reply with demands that we prove to him that our projects were impossible without addressing technical debt. (Side note: nothing is impossible, as long as you're willing to add more technical debt).
Between this, and other major problems, I'd had enough. I needed out.
I told him that I was taking vacation for the rest of the week (5 day weekend, wooo) and when I come back Monday, his manager and HR are going to help me find a new team (as they had previous agreed to). I'm fortunate to work for a company where that is possible.
Having a manager who codes 30% of their time might be asking too much, but having a manager working with developers who does not even read the code is not enough.
I hate this term "technical debt." I understand where it is coming from but it sounds like made up fairy dust and can be a little hard to take seriously.
I am just playing devils advocate here, but you said the manager had zero interest in your challenges. Did you have an interest in his challenges, why he is pushing for certain dead lines etc?
I don't know where to begin with this. This is just nuts!
This might work for some snazzy valley startup with 16 people all working on the same code base, but this is just completely, shall I say, naive and shortsighted. It smacks of someone who hasn't been involved in anything big, complex or been in the industry for any length of time.
Some people don't like to use sports analogies, but I do so I will.
An NFL team typically has a head coach, an offensive coordinator, a defensive coordinator, a special teams coach, QB/WR/RB/DB/LB/Oline/Dline coach as well as a strength coach, among some more in certain cases. Then there are the players. Offensive, defensive, special teams.
Imagine you are the head coach. Should you spend 30% of your time doing ANYTHING any of the players are doing? Should the OC or DC being doing the drills or what not? Maybe, maybe working out, but probably not like the players.
My position is akin to the OC on an NFL team. I'm in charge of teams of teams of people. Developers (in different areas/focuses), QA, infra, release, ops etc etc. This is LOTS of people. So, if I'm "coding" 30% of my time, I'm effectively looking at only one area. Should I be spending 30% (or some % number) of my time doing jobs in those other areas? And do I want my managers in those areas to do those things? Well, probably not. I want them to understand them, yes, have done that job previously, yes. More over, I want someone who can 1. engage the team 2. direct the team 3. hold the team responsible 4. tell me (or others) "no" and intelligently show the way for their area and 5. lead up and down. Coding is literally so far down the list it isn't funny.
So, no, a manager shouldn't be coding 30% of their time. If they want to and it doesn't get in the way of their actual job, fine, but that is not their job. Their job is to set or enact direction, lead and protect their team.
To go back to the NFL example. If I'm the head coach, I want the OC to know exactly the type of offense I want to run, put in the system in place, coach the coaches on that system and make sure everyone is on the same page. I don't want them running routes with the WR or practicing blocking drills with the linemen.
Some people say they need dual 30" monitors to code, I'm not going to disagree with their personal preferences. But other people (like myself) see zero difference in productivity between that and a 13" Macbook Air screen, which I've been coding on for years.
The whole "real machine" thing is just ridiculous cowboy posturing, unless you're doing video game development or something. A Macbook Air is just fine for web development.
Maybe it depends on the sort of coding you're doing? And also how you use the computer.
I have both a Macbook Air and Macbook Retina - I have to say, I much more enjoy the Retina - more RAM (16Gb) and it feels snappier to multi-task.
I also tend to have a fair amount of browser tabs open (docs and stuff), so personal usage will influence things.
The author is the CTO of MongoDB - which is written in C++ - so speculation - maybe waiting 3x longer for a compile (or whatever the multiple is) is annoying?
I remember reading once that doctors who manage other doctors still practice medicine part of their day. If so, why, when they have a business that also changes quickly and is actually life threatening, is that the case? Perhaps they realize remaining in touch with your field is valuable. Here are some papers with findings that indicate how practicing doctors as hospital administrators improve the quality of their hospitals above those hospitals that have just business managers. http://www.amandagoodall.com/papers.html
Why then is it the norm that so many developers who move into management do so to "get away from developing"?
It seems unique to development, or maybe just uniquely easy to see when someone is clueless about technical matters.
Anecdotally, all my worst managers were "out of touch" but thought they still were hot stuff technically. My best were either completely non-technical and trusted their team, or were developing at least 1/4 of the time (and he worked mostly automating all the crap work we hated and fixing bugs).
If you have to be told you should still be writing code you've probably already lost it (or never had it to begin with). I'm surprised by the people here arguing so strongly against something that is just common sense to anyone who truly cares about software development. Sure the 30% figure is debatable, but you're splitting hairs if that's what you think this is about.
There are too many people who are completely incompetent in management positions who effectively hide their lack of knowledge and skills because they are never put to the test. Moreover one shouldn't want to completely lose touch with the processes and techniques of development and design of software. How much involvement in code is required to be effective is perhaps debatable, but that you should be involved definitely shouldn't be.
From following Mongo on JIRA, I have noticed that Elliott spends time coding, and could venture to say that he is led/allocated work by Dan Pasette (who is the SERVER team leader). A lot of recent Mongo releases have been delayed by over a month, with some features and fixes being delayed to 2.8.
If Elliott wasn't involved in the coding I doubt he would understand the pressure the team deals with, and how realistically would his explanations to say $150 million investors be (not disregarding that Dan and other team leaders would provide details status reports)? Of course this is a grand assumption, but when I read his article last week, I came to agree with it. In my field of work, I see it all the time, over time a lot of managers lose respect from us subordinates. They no longer make accurate project estimates, their staff planning is unrealistic, they lose some of the peronism solving skills that got them there, etc. I don't expect them to go down and do the dirty work, but I acknowledge that sometimes if such was possible in our line of work, they would benefit a lot in keeping in up with us subordinates
I'm lucky enough to have managers that care about the people under them and I think that's good enough so far.
They would listen to advises/opinions, they would try to diffuse stressful situation, they would try to communicate what's necessary, they do negotiation fairly (got to give something to get something back).
As a result, I would give more to them (within limits, of course). At the end of the day, it's a win-win situation: I make them look good, they make sure I'm happy and not burn-out.
Background: both managers code before, one has MSc in Quantum Computing, the other does a lot of infrastructure/big-enterprise system (batch processing) so their backgrounds varies with the only commonality between them is that they both come from *NIX background and understand DB/Infrastructure rather quite well.
It's very hard to be an engineering manager (lots of examples in this threads why they don't like their managers or their previous bad experiences) and if you found a "matching" one with you, priceless. Of course, nothing is forever...
This sounds more like what a Senior Developer/Engineer should do, not an Engineering Manager or a PM or a TPM.
I seem comments here that "used to code" managers were either the worst or the best manager they ever had. However, it's the job of the Senior Developer to represent the engineering concerns of the team. It's the job of the Manager type to sit between the Engineering Team and the Senior Management, deal with paperwork nightmares, prioritize major work units, set deadlines and manage both up and down.
The Senior Dev should sit at a high level of the actual business of the engineering, dip down from time to time to spot shoot thorny issues, but they should prioritize the specific engineering items and keep the team well fed with work. It is a management function, with expertise in very hard engineering problems.
Sometimes the Senior Developer might represent that some work item is problematic for whatever reason and try and keep the team off of it. The manager, knowing the strategic priorities of the upper management, can either chose to manage this up, or override the Senior Dev and manage this down depending on the situation.
This is something that Senior developers aren't in a position to understand. Representing only engineering up means that unpleasant shit work is often just not done. It sucks, but needing to press your team into doing work they don't want to do is how things get done.
It may sound like overspecialization, and on small teams it is. But with large engineering groups, you don't want to tie up the Senior Dev, who's basically the guy who beats the drum on a slave ship, with being the ship captain.
This is really hard to understand until you've been in a medium to large sized organization and had to manage there. Managing takes an incredible amount of time. Most managers don't stop working when they leave work. Hell putting together a decent proposal might take 2 or 3 months of 50-60 hour weeks.
At least from a big company perspective: This breaks down. Any set % for coding doesn't work because there are so many 'big company' problems to deal with already that take up enough of their time. Either you will end up fixing trivial stuff that a coder would have done in 10% of the time you took or you will spend too much energy on this and lose track of your actual job.
Ideally I want managers who can code / have coded for a long time in their history so that they understand the software development world. But I actually want them to do time management, people management, expectations management, customer co-ordination, issue prioritization etc.
IOW - Engineers can code. Engineers usually can't do those other things without flinching. Leave engineering to the Engineers and management to the Managers.
Yes, and developers should manage 30% of the time and do design work 30% of the time. You know, because good management and good design is essential to a good product, and just saying that you have "done some" design or management in the past isn't good enough.
I suppose it depends on what you/your-organization views as the realm of "management". I like Joel Spolsky's suggestion that they should just be moving furniture out of the engineers' way. Of course, he cites Microsoft, and I know how many of us feel about that company.
"At Microsoft, management was extremely hands-off. In general, everybody was given some area to own, and they owned it. Managers made no attempt to tell people what to do, in fact, they saw their role as running around, moving the furniture out of the way, so their reports could get things done. "
I don't think the average professional programmer gets to code in much more than 30% of working time. Too much time gets spilled looking at documentation, sitting in requirements meetings, etc.
The problem is more that, to get something done while working 30% of the time, the CTO has to cherry-pick the fun projects where things can be accomplished quickly without the time-consuming slogs. That can cause morale problems if the rest of the team is spending a lot of time on slogs. One might argue that that's a sign of a deeper problem, but few companies have figured out how not to generate drudge work when at significant scale.
[+] [-] crazygringo|12 years ago|reply
Yes, engineering managers absolutely should understand how to code, and understanding concepts like technical debt, unreliability of estimation, etc. goes without saying. And it's awesome for a manager to be familiar enough with the tools and work to be able to implement a quick critical bugfix or similar when unexpectedly necessary.
But if they're a good manager, it's far better for the organization for them to be spending their full time managing. Let coders code and managers manage, as long as they're both good at their jobs. The author's argument makes as much sense as saying a professional baseball coach should be spending 30% of his game time actually playing with his team.
And honestly, this is just BS:
> Once a person stops coding for a significant portion of time, critical connections to the concerns of developers atrophy.
Citation needed. It sounds as fake as supposed facts like we only use 10 percent of our brains, or other hogwash.
[+] [-] jasallen|12 years ago|reply
Before my start-up, I was a dev manager. And a damn good developer. I knew what technical difficulties my team had, and understood them, because I was the first place they came for an extra set of eyes. I ran defense from upper management because I knew the concerns, and I was the one with the voice. Because I'm also an open-book style manager I didn't play the "they don't need to know" card, but I could handle those things without them first having to mount a case to me every time.
I've watched A LOT of "I used to code" managers, and almost to a man, they are a disasters.
[+] [-] nawitus|12 years ago|reply
I like this idea that there are no managers who manage and engineers who engineer. Instead, there's maybe one person who takes the responsibility of managing work, but does programming or other non-managing work the rest of the time. The engineers can also do a bit of managing, but they'll focus on the engineering.
The assumption is of course, that managing work can be automated away sufficiently and the team is a not huge. These are realistic assumptions, but are often untrue because of organizatonal flaws (or flaws with the manager).
The baseball coach argument doesn't really fit here, because baseball is not reinvented every 5 years. Programming quite often is. A C++ systems programmer probably can't understand much about HTML5 frontend programming. But a manager with C++ background can learn.
[+] [-] alexandros|12 years ago|reply
[+] [-] joeblau|12 years ago|reply
[+] [-] nthj|12 years ago|reply
> Citation needed. It sounds as fake as supposed facts like we only use 10 percent of our brains, or other hogwash.
I don't have a citation, but this seems obvious to me. It also bears out in my own experiences. Delivering great software requires deep thought and long, uninterrupted periods of concentration [1], and managing requires rapid context switching.
When I was lead developer at a web consultancy in Austin, I mostly attended meetings and context-switched between one of dozens of projects. I never had uninterrupted blocks of time to analyze problems deeply. When I left, it took me a good six weeks of coding before I felt I could really push on hard problems again.
I had trained my brain to context switch every 5 minutes, and so it expected to keep doing so. I still knew all the syntax, and remembered how everything played together, but breaking business stories down into their component parts was difficult. I couldn't hold the program in my head.
[This bears out in the physical world, too: we would not expect a 100-yard sprinter to necessarily be able to run marathons.]
[1] Holding a Program in One's Head | http://paulgraham.com/head.html
[+] [-] eagsalazar2|12 years ago|reply
[+] [-] hkarthik|12 years ago|reply
This is a bad comparison because baseball hasn't significantly changed in the last 100 years, but software development changes significantly every 5 year to 10 years.
Over a 40 year career in software development, a typical person will see major fundamental shifts at least 4-5 times.
So yes, if you are directly managing engineers, you should be coding at least some of the time.
If you can't or don't want to contribute code, you should quickly move into upper management and focus on coaching middle managers.
[+] [-] bowlofpetunias|12 years ago|reply
Spending 30% of my time coding is just self-indulgent. My team knows I can code, knows I understand their work, and they need me to do the crap they can't afford to deal with, so they can focus on coding.
Also, I'm way to unreliable as a coder because my work can be interrupted at any time. Time blocking a few hours doesn't work, because being a developer is not just writing code for a few hours.
If I want to code in production, I have to participate in code reviews, handle pull request, take part in ad hoc discussions. Otherwise I'm just a tourist getting in the way. If I want to code as a hobby, I should just do it in my own time.
[+] [-] dinkumthinkum|12 years ago|reply
[+] [-] allochthon|12 years ago|reply
That's where managers often go wrong; they think a team of developers is something to be shaped. It's more like a movie director and his or her team, and the manager is a producer, providing resources and clearing away obstacles. In a well-functioning team there may be little need for active "managing," and when a manager takes it upon himself to do this, he can get in the way.
[+] [-] malbiniak|12 years ago|reply
[+] [-] hkarthik|12 years ago|reply
* Don't code 20% of a full solution with your 30% time and expect the other engineers to pick up your work and finish the other 80% to make it production ready. If you can't cross the halfway point with a task, don't take it on.
* If you do need an engineer to make your code production ready or fix a bug in it, don't act like you did him/her a favor by "getting it off the ground". They are doing YOU a favor by finishing your work for you!
* Be humble and expect to take massive amounts of criticism from engineers who take a lot of pride in their code and spend their careers perfecting it.
* Avoid becoming overly defensive and asking engineers to relax their established code quality guidelines or test coverage to accommodate your compressed schedule.
[+] [-] patrickmay|12 years ago|reply
* Spend some time on bug fixes and paying down technical debt. You'll get a better understanding of the challenges your team deals with day-to-day.
[+] [-] ojbyrne|12 years ago|reply
[+] [-] ChuckMcM|12 years ago|reply
That said, I totally get the angst over managers who have never been coders. Sort of like Scully relating the sale of computers to being similar to selling 'colored water' (Pepsi vs Coke). Not so much in my experience.
There is also the question of scale, if you're a 20 person company I can easily see everyone writing code as well as doing other things, 50, 100, 2000 person company? Not so much.
And there is the question of perspective, a solid engineer is there to make the best thing they can, within the constraints of available CPU, memory, and storage resources. A solid manager is there to take a limited amount of money and time and ship the best thing their team can make within those constraints. So sometimes managers decide things one way, and engineers argue for a different way, it's always helpful to be able to see the problem from the other person's shoes. And yet my experience is that line managers, often drawn from the ranks of engineers, are more able to see the constraints the engineer is working under than the engineer is able to see the constraints the manager is working under.
I don't know if there is a 'right' way to blend those two roles. I suspect that if you're in a large company as a manager and spending a third of your time coding, you might want to check with your manager on how they perceive your performance. If you're in a small company and write no code you might want to check with your team to see if they feel they have it covered or not. But I can't imagine there being a 'blanket rule' like spend X% of your time coding that would have anything close to universal applicability.
[+] [-] dasil003|12 years ago|reply
As a lifelong programmer who only reluctantly does management, I have to say that it sometimes seems just as hard for an engineer to understand what a good manager does as it is for a manager to understand what an engineer does. It's easy to make fun of a non-technical person because the terminology they don't understand is concrete but people management is every bit as difficult.
Perhaps the problem is that it's relatively easy to weed out an incompetent programmer, but bad middle managers can often blend in or otherwise find ways to make themselves look good to upper management. In that sense a manager who codes is at least some kind of positive signal.
But as a pure programmer I have to say this: two of the best managers I've had were not technical in any way shape or form. It's a mistake to think a good manager has to be technical in all cases. Good managers can add value in invisible ways dealing with the higher ups and shielding the team from politics and distraction. If the technical team is good and the manager has the appropriate level of trust then lack of specific technical knowledge need not always be a problem.
As you say, it varies according to circumstance, but a lot of commenters here seem ignorant to the fact that there's more to the job than simply understanding the programmers world.
[+] [-] pjmorris|12 years ago|reply
I have a couple of quibbles
> spending 30% on something that isn't making you a better manager would seem to be counter productive.
You're assuming coding doesn't make you a better manager... what if it does?
>There is also the question of scale, if you're a 20 person company I can easily see everyone writing code as well as doing other things, 50, 100, 2000 person company? Not so much.
Bill Gates shipped code up until 1989 [1]. Microsoft was between 3000 and 4000 employees at the time. Sure, he may be the exception that proves the rule, but maybe there's something to the notion that coding managers have a better sense of the technical market... of course, it depends on what market you are in.
I've spent most of my time as a coder, but have managed from 1-12 people from time to time.
[1] http://www.quora.com/When-did-Bill-Gates-last-write-code-for...
[+] [-] easy_rider|12 years ago|reply
But I must say if you are presented with a tough technical problem, and human resources to solve it, but you fail to comprehend the problem and how you should direct your resources in solving it, it's going to be a tough cookie to make any impact other than wasting your time, and precious developer hours trying to do something you can't.
The best one I've had I worked with for a long time as a colleague freelancer, and 0 hour contract directly under him until we expanded to a 15-20 workforce. He was an experienced PHP'er, and would argue even a better salesman and networker. He would almost never write any code, but when push came to shove he would provide the fix within minutes time after a client made an upset call after hours. Most importantly: Other than being able to point out strength and weaknesses of his employee's, he was never afraid to acknowledge his own, and always assumed our expertise over his. ( unless someone really f'd up of course :) )
[+] [-] kabdib|12 years ago|reply
I want my manager to have a great engineering background, but not be interested in the actual engineering except for purposes of helping the engineers get their jobs done. In other words, build a good team, remove obstacles and get the heck out of the way.
[+] [-] crbnw00ts|12 years ago|reply
A good people manager works to keep their employees comfortable, aims to avoid conflicts (and resolves them if they arise despite these efforts), mentors and coaches people to develop new skills, and shields them from politics. Doing the work of an individual contributor just gets in the way of that. The manager should be familiar with and understand what their people do, but leave the actual performing of that work up to them.
[+] [-] nickmain|12 years ago|reply
[+] [-] mabbo|12 years ago|reply
Today, I quit my team because of the manager. Nice guy, but zero knowledge of our code base, no interest to learn it, and no connection to what the problems we, as developers, were encountering. He didn't know, and didn't want to know.
With each proposal to address major technical debt issues, he had no context, no understanding, and would only reply with demands that we prove to him that our projects were impossible without addressing technical debt. (Side note: nothing is impossible, as long as you're willing to add more technical debt).
Between this, and other major problems, I'd had enough. I needed out.
I told him that I was taking vacation for the rest of the week (5 day weekend, wooo) and when I come back Monday, his manager and HR are going to help me find a new team (as they had previous agreed to). I'm fortunate to work for a company where that is possible.
Having a manager who codes 30% of their time might be asking too much, but having a manager working with developers who does not even read the code is not enough.
[+] [-] dinkumthinkum|12 years ago|reply
[+] [-] kabouseng|12 years ago|reply
[+] [-] endlessvoid94|12 years ago|reply
There's just too much other stuff that's more important.
[+] [-] hcho|12 years ago|reply
[+] [-] fingerprinter|12 years ago|reply
This might work for some snazzy valley startup with 16 people all working on the same code base, but this is just completely, shall I say, naive and shortsighted. It smacks of someone who hasn't been involved in anything big, complex or been in the industry for any length of time.
Some people don't like to use sports analogies, but I do so I will.
An NFL team typically has a head coach, an offensive coordinator, a defensive coordinator, a special teams coach, QB/WR/RB/DB/LB/Oline/Dline coach as well as a strength coach, among some more in certain cases. Then there are the players. Offensive, defensive, special teams.
Imagine you are the head coach. Should you spend 30% of your time doing ANYTHING any of the players are doing? Should the OC or DC being doing the drills or what not? Maybe, maybe working out, but probably not like the players.
My position is akin to the OC on an NFL team. I'm in charge of teams of teams of people. Developers (in different areas/focuses), QA, infra, release, ops etc etc. This is LOTS of people. So, if I'm "coding" 30% of my time, I'm effectively looking at only one area. Should I be spending 30% (or some % number) of my time doing jobs in those other areas? And do I want my managers in those areas to do those things? Well, probably not. I want them to understand them, yes, have done that job previously, yes. More over, I want someone who can 1. engage the team 2. direct the team 3. hold the team responsible 4. tell me (or others) "no" and intelligently show the way for their area and 5. lead up and down. Coding is literally so far down the list it isn't funny.
So, no, a manager shouldn't be coding 30% of their time. If they want to and it doesn't get in the way of their actual job, fine, but that is not their job. Their job is to set or enact direction, lead and protect their team.
To go back to the NFL example. If I'm the head coach, I want the OC to know exactly the type of offense I want to run, put in the system in place, coach the coaches on that system and make sure everyone is on the same page. I don't want them running routes with the WR or practicing blocking drills with the linemen.
[+] [-] elwell|12 years ago|reply
Why do you think he said that?
[+] [-] crazygringo|12 years ago|reply
Some people say they need dual 30" monitors to code, I'm not going to disagree with their personal preferences. But other people (like myself) see zero difference in productivity between that and a 13" Macbook Air screen, which I've been coding on for years.
The whole "real machine" thing is just ridiculous cowboy posturing, unless you're doing video game development or something. A Macbook Air is just fine for web development.
[+] [-] icedchai|12 years ago|reply
[+] [-] victorhooi|12 years ago|reply
I have both a Macbook Air and Macbook Retina - I have to say, I much more enjoy the Retina - more RAM (16Gb) and it feels snappier to multi-task.
I also tend to have a fair amount of browser tabs open (docs and stuff), so personal usage will influence things.
The author is the CTO of MongoDB - which is written in C++ - so speculation - maybe waiting 3x longer for a compile (or whatever the multiple is) is annoying?
[+] [-] bhousel|12 years ago|reply
[+] [-] Mikeb85|12 years ago|reply
[+] [-] michaelochurch|12 years ago|reply
[+] [-] JackMorgan|12 years ago|reply
Why then is it the norm that so many developers who move into management do so to "get away from developing"?
It seems unique to development, or maybe just uniquely easy to see when someone is clueless about technical matters.
Anecdotally, all my worst managers were "out of touch" but thought they still were hot stuff technically. My best were either completely non-technical and trusted their team, or were developing at least 1/4 of the time (and he worked mostly automating all the crap work we hated and fixing bugs).
[+] [-] lucisferre|12 years ago|reply
There are too many people who are completely incompetent in management positions who effectively hide their lack of knowledge and skills because they are never put to the test. Moreover one shouldn't want to completely lose touch with the processes and techniques of development and design of software. How much involvement in code is required to be effective is perhaps debatable, but that you should be involved definitely shouldn't be.
[+] [-] nevi-me|12 years ago|reply
If Elliott wasn't involved in the coding I doubt he would understand the pressure the team deals with, and how realistically would his explanations to say $150 million investors be (not disregarding that Dan and other team leaders would provide details status reports)? Of course this is a grand assumption, but when I read his article last week, I came to agree with it. In my field of work, I see it all the time, over time a lot of managers lose respect from us subordinates. They no longer make accurate project estimates, their staff planning is unrealistic, they lose some of the peronism solving skills that got them there, etc. I don't expect them to go down and do the dirty work, but I acknowledge that sometimes if such was possible in our line of work, they would benefit a lot in keeping in up with us subordinates
[+] [-] edwinnathaniel|12 years ago|reply
They would listen to advises/opinions, they would try to diffuse stressful situation, they would try to communicate what's necessary, they do negotiation fairly (got to give something to get something back).
As a result, I would give more to them (within limits, of course). At the end of the day, it's a win-win situation: I make them look good, they make sure I'm happy and not burn-out.
Background: both managers code before, one has MSc in Quantum Computing, the other does a lot of infrastructure/big-enterprise system (batch processing) so their backgrounds varies with the only commonality between them is that they both come from *NIX background and understand DB/Infrastructure rather quite well.
It's very hard to be an engineering manager (lots of examples in this threads why they don't like their managers or their previous bad experiences) and if you found a "matching" one with you, priceless. Of course, nothing is forever...
[+] [-] bane|12 years ago|reply
I seem comments here that "used to code" managers were either the worst or the best manager they ever had. However, it's the job of the Senior Developer to represent the engineering concerns of the team. It's the job of the Manager type to sit between the Engineering Team and the Senior Management, deal with paperwork nightmares, prioritize major work units, set deadlines and manage both up and down.
The Senior Dev should sit at a high level of the actual business of the engineering, dip down from time to time to spot shoot thorny issues, but they should prioritize the specific engineering items and keep the team well fed with work. It is a management function, with expertise in very hard engineering problems.
Sometimes the Senior Developer might represent that some work item is problematic for whatever reason and try and keep the team off of it. The manager, knowing the strategic priorities of the upper management, can either chose to manage this up, or override the Senior Dev and manage this down depending on the situation.
This is something that Senior developers aren't in a position to understand. Representing only engineering up means that unpleasant shit work is often just not done. It sucks, but needing to press your team into doing work they don't want to do is how things get done.
It may sound like overspecialization, and on small teams it is. But with large engineering groups, you don't want to tie up the Senior Dev, who's basically the guy who beats the drum on a slave ship, with being the ship captain.
This is really hard to understand until you've been in a medium to large sized organization and had to manage there. Managing takes an incredible amount of time. Most managers don't stop working when they leave work. Hell putting together a decent proposal might take 2 or 3 months of 50-60 hour weeks.
[+] [-] SubuSS|12 years ago|reply
Ideally I want managers who can code / have coded for a long time in their history so that they understand the software development world. But I actually want them to do time management, people management, expectations management, customer co-ordination, issue prioritization etc.
IOW - Engineers can code. Engineers usually can't do those other things without flinching. Leave engineering to the Engineers and management to the Managers.
[+] [-] jeremyt|12 years ago|reply
[+] [-] zeroonetwothree|12 years ago|reply
[+] [-] daveslash|12 years ago|reply
"At Microsoft, management was extremely hands-off. In general, everybody was given some area to own, and they owned it. Managers made no attempt to tell people what to do, in fact, they saw their role as running around, moving the furniture out of the way, so their reports could get things done. "
src: http://www.joelonsoftware.com/articles/fog0000000072.html
[+] [-] puppetmaster3|12 years ago|reply
Code 30% of time? You know nothing of coding. Can't be done.
[+] [-] icedchai|12 years ago|reply
[+] [-] michaelochurch|12 years ago|reply
The problem is more that, to get something done while working 30% of the time, the CTO has to cherry-pick the fun projects where things can be accomplished quickly without the time-consuming slogs. That can cause morale problems if the rest of the team is spending a lot of time on slogs. One might argue that that's a sign of a deeper problem, but few companies have figured out how not to generate drudge work when at significant scale.