On Managing Developers
An anonymous reader writes: A columnist at TechCrunch takes a crack at advice on how to manage developers. He has some decent starting points. For example, "Basically a manager's job is to make other people more productive. What's one really good way to do that? Do the work that is getting in their way. Which means: find out what kind of important work your developers dislike the most, and do it for them." Also: "[D]on't bull$%^& anyone, ever. ... Speak the truth as you see it. Speak it diplomatically, don't get me wrong; but be trustworthy. Only then will you be able to trust others." But some of his statements are open enough to be nearly devoid of meaning: "Any particular process artifact is probably irrelevant. The finest tech team I ever worked on began every day with a daily standup; so did one of the worst, most dysfunctional teams I ever encountered. ... [T]he systems and processes you choose for any given project should be fluid, and flexible, and depend in large part on the team and the context." If you are or have been a developer, what qualities have made your managers good or poor? If you've been in position to do the managing, does you experience jive with this guy's?
Everyone would be great at it. Anyone that thinks you can find the secrets to being a good anything in a couple of paragraphs, just doesn't know very much about the topic.
"But some of his statements are open enough to be nearly devoid of meaning: "Any particular process artifact is probably irrelevant. The finest tech team I ever worked on began every day with a daily standup; so did one of the worst, most dysfunctional teams I ever encountered. ... [T]he systems and processes you choose for any given project should be fluid, and flexible, and depend in large part on the team and the context."
Uh, what? Devoid of meaning? Maybe you should learn to read at a Junior High school level. What that sentence would tell you, could you read English, is that the religion of a specific process and procedure is not sufficient to guarantee success. A process which works correctly in one environment will result in doom in another. Nobody should have to spell this out for you; in the quote above, the text which precedes the ellipsis is sufficient to deliver this information. If you can't read and comprehend the above, perhaps you are not cut out to be an Editor (or story submitter?)
"You're right," Fisheye says. "I should have set it on 'whip' or 'chop.'"
Here is my approach to managing engineers.
1. Get the right people.
2. Get the right work.
3. Get obstacles out of the people's way.
4. Get myself our of the people's way.
This reminds me of the "Fast, cheap, flexible - choose one"-idiom.
You can be a great developer, a shitty manager and a good spouse.
You can be a good developer, good manager and a shitty spouse.
Or you can be a shitty developer, great manager and a good spouse.
(Forget about being a great spouse if your mission in life is to please a company!)
One of the best managers I've had have been technical, and got the boring parts done.
One of the best managers I''ve had have not been technical at all, but championed our services well and established a good network of connections throughout the organization that made the processes actually work.
It's all trade-offs. This also goes for "agile", which is just a choice for some trade-offs over another set of trade-offs.
The main problem is when people don't work together to find the best solutions, together.
Often, new hyped-up processes and tools become yet another excuse for people to NOT work together!
This even escalates the bigger the company gets.
Oh, and you should compensate work well done.
Well, if I'm left alone (no bullshit), it doesn't bother me to work extra time to get something done well. As soon as I have to deal with bullshit from a manager, I move into my 8 hour mode. That means I come in and do 8 hours a day as per my contract and don't give a shit.
I would disagree with "Which means: find out what kind of important work your developers dislike the most, and do it for them." I would say:
"Find out what non-essential stuff is interfering with real work and protect them from it."
There often is work that is important that must be done but is not exactly fun, such as documenting code, helping tech writers prepare user manuals, listening to users and getting feedback on the UI, etc. Developers may dislike that work but they are the ones that need to be involved with it or do it. Sometimes it's the manager's job to point out stuff that needs to be done and find a way to get it done; even if it isn't what they want to do.
I'm a consultant - I convert gibberish into cash-flow.
told me that his job was only partially to tell me what to do (because I should know most of it) and mostly to shield me from the bureaucrap so that I could concentrate on doing it. I try to emulate that.
Two other nuggets I aim for:
- a good manager tells his people what *his* objectives are, and explains to them how that translates into the objectives he's giving them.
- there are different kinds of management for different people, and a good manager must adapt. A newbie or an incompetent *needs* micromanaging (but beware of giving the impression of thinking either one is incompetent). As they get older/wiser/more experienced the manager can go more and more hands-off, until with a senior engineer/whatever the manager should be able to just discuss strategy and budget and priorities and such.
superior compensation. period.
Can't stress this enough. Few developers respond well when they're treated like machines, even if they get external rewards like bonuses. Showing how valuable a part of the team they are makes a big difference in developers' morale in my experience.
Learning how to manage software developers is exactly the same as learning to be a good manager in general. I manage software developers. I'm not perfect, I wouldn't even rate myself very high, but many of my employees have told me fairly often they appreciate what I do for them. They things they seem to appreciate are: being as transparent as possible, being interested in their personal interests and development, going to bat for them when they need something (new PC, training, etc), giving them honest and quick feedback both good and bad, and not being willing to place blame but instead just looking for solutions. None of those behaviors are specific to managing software developers, but instead are some things good managers do in general.
I was a software developer before this so while I'm not up to date on the tech they are currently using, I understand the types of struggles they face. That helps, although I'm fairly sure if I went tomorrow to manage a team of mechanical engineers that I could become effective fairly quickly in that role, too.
Don't get me wrong, I'm don't think I'm a great manager, but I have had one or two great managers and I'm trying to borrow the things I thought they did well and my employees seem to respond to that.
Two of the SDEs I manage told me in their last review I was the best boss they've ever had. Here is my advice:
1) Do not judge anyone on anything except on whether they get their job done. If someone quickly does a good job, I don't give a shit whether they take the rest of the day off.
2) Lead by example. Do the things you want your guys to do. That means the hard things.
3) Imagine your team as a machine. You're the oil. Be where there is the most friction and smooth it out.
4) Sacrifice yourself for your team. If you can't get a reward from the company for someone who deserves it, buy it yourself.
5) Understand the perspective of your boss's boss, and explain it often to the team.
6) Say you don't know when you don't know.
7) Fight for raises and bonuses.
8) Don't talk as a boss most of the time, but when you do, have a good reason to.
These guys worked on the project that won us a nomination by a government agency for Small Business of the Year. The morale earned from being a good boss repays itself in improved productivity and reduced turnover. Plus you make friends for life. It pays to be a good boss.
Until last month, I managed the 12 devs I had hired (I have 30+ years of dev experience). On my way out the door, 3 of them gave me a 'best manager I've ever had'. No one gave me a thumbs down, at least to my knowledge. My 'secret'? Honesty, kindness, and this one very important thing: I never imposed a decision unless they couldn't come to one themselves, or were going off the rails. Despite my sizable ego, I've found 'letting go' of control, and focusing on guiding the team, rather than telling them what to do, produces one very happy, productive team. And they' introduced ideas and solutions that never would have crossed my mind!
I left after a painful year of my naive boss and certain of his colleagues on the leadership team knocking us off course with their sophomoric meddling. Note to senior leaders: When you have a competent person running your dev team, let him/her do it. Just because you can spell Agile doesn't mean you know what it looks like.
- The Kessel run is for nerf herders. I can circumnavigate the entire Central Finite Curve in a lot less than 12 parse
from a distance. Say "Make this do this" and stand back, let the kids do their magic (hell, being a manager doesn't require technical knowledge) and look forward to the result. Micromanaging is for kindergarten teachers. You have a team of devs because they know how to code and you probably don't, keep thy nose in thine own trough.
While I like the overall message here of not micromanaging, I think an important distinction needs to be made between telling developers how to do their work and constantly validating that developers are doing their work. The latter is counterproductive but the former is absolutely necessary. Junior level employees often don't understand one of the major differences between managers and non-managers: in the eyes of executives your managers are ultimately responsible for the project's success or failure, regardless of who actually messed up. So they absolutely cannot just sit back and wait for developers to be done with their work and hope for the best.
While I agree with this article's advice that a good manager will find ways to take grunt work away from developers, that is such a minor part of their role as manager. The most important, and most difficult, part of being a manager is finding a way of constantly validating the project's progress without being a major hindrance to the developers. There is no easy answer to this that I can give in a Slashdot post, but it is vital to the success of any project.
As a senior level developer, one task I take upon myself is ensuring that our non-technical personnel have a method of validating our work throughout the project. I prefer having these milestones at least every other week. This doesn't have to mean you create a releasable product every other week like some Agile methodologies suggest, but you should at least find a way that your project / product managers, business analysts, and other key stakeholders can validate the project is on track.
When I join a new company (like I just did four months ago) I am very clear with my managers that I will take on this responsibility, but it means they are expected to trust me to do my job as long as they are happy with these validations. So far it has been working well for both me and my employers over the years, although that only comes from experience with two employers since I became a senior level resource.
-- All that is necessary for the triumph of evil is that good men do nothing. -- Edmund Burke
...He has some decent starting points. For example, Basically a manager's job is to make other people more productive...
Well, if the summary starts off on such a wrong assumption, it can only get worse from there.
imo, one of a software development manager's jobs is to create an environment that allows the software developers to do their jobs. If the manager has to "make" them do their jobs or be more productive, then the wrong people are in the software developer jobs.
I agree the article starts off with a very poor assertion about the most important role of a manager, but I don't necessarily agree with your either. I like your change to what the article says, but I still don't think it is the most important part of a manager's job.
IMHO, a manager's job is to ensure their projects are a success. Regardless of which developer or business analysts messes up, the ultimate responsibility always lies on the manager. Many employees don't realize this because they never witness their boss getting yelled at by his boss, but when projects miss their due dates the developers are not the only ones in trouble. Developers probably have a more silo-ed view of the whole project so they can legitimately blame failures on factors outside of their control, but a manager can rarely do that. The buck stops with him.
Bad managers micromanage because they are afraid the job won't be done right and they know their ass in on the line. Good managers find a way of trusting but validating their senior level resources.
-- All that is necessary for the triumph of evil is that good men do nothing. -- Edmund Burke
Or whatever your people are doing. You need to be able to understand what your people are doing so you can know if they're doing a good job or not.
The whole TPS report thing from office space was a consequence of someone that doesn't know how to code or understand the product trying to keep tabs on people that were creating that product or service.
So they create artificial benchmarks and paper work and then judge the employees by how well they comply with the paperwork.
The problem is that the paperwork is not actually anything the customer cares about. It has nothing to do with the product or service. It is an arbitrary management mechanism. And it is FINE if the manager doesn't need it. If the manager can judge your work without it, than the paperwork might make his job easier.
However, if he can't judge your work without that paperwork than he literally can't do his job at all. He can at best APPEAR to be able to do his job. And the only people that would make that mistake would other people that also don't know how any of this shit works.
How is a non-doctor going to judge the quality of a doctors work? You can't.
Same thing. Managers have to have experience in CS if we're talking about developers... ideally they should be programmers themselves.
Again, if you don't have enough programmers with management experience, then it is easier to give programmers management training than it is to give managers programming training. So do that.
I've decided to stop wasting my time responding to AC trolls/sockpuppets... so if you want a response from me... login.
Obviously, you need them to all work together, so you need to promote immediate communication between all developers.
I suggest one large open room, with several rows of folding tables. Then place the developers along the tables, alternating sides to make best use of the space, as well as making sure they talk to the two developers facing them. Also, disallow headphones or anyone to play music. Maybe also march up and down the aisles every once in awhile and encourage them.
Sleep your way to a whiter smile...date a dentist!
Amen to that. I once had someone removed from a project I worked on, because even after a week of explaining WHAT I wanted, it wasn't getting anywhere. I later worked on another project where they brought in a new programmer - lo and behold, the person I managed to get fired walked in. As it turned out, when given explicit instructions and a template, we got passable code. It just took a bit of time to set things up at first.
Personally, I'd not have hired that person in the first place, but when you lead a team that's been selected for you, you have to play the hand you're dealt.
Therefore, by the (faulty) logic you're using, you're just a cow with a keyboard - osu-neko (2604)
Don't hire assholes.
If you have them on your team, replace them as soon as you can with people who are not assholes. Take your time during the hiring process to ensure you are not hiring them. Doesn't matter how great the talent is, don't let it tempt you in to hiring an asshole. No matter what you think, you cannot manage an asshole to not be an asshole.
I guarantee that if you look at all of the dysfunctional teams that have ever existed in software development, there was at least one asshole on that team. So if you want to be a better software development manager, get rid of the assholes.
The world moves for love. It kneels before it in awe.
in 90% of projects I've ever been on, that have released late, it's the marketing teams fault that the project released late and under developed, all because they didn't think to ask the developer first, how long they need to deliver the product.