Geek Management
I observed in a previous entry that I found myself somewhat baffled by the software engineering process taken by some offshoring/outsourcing firms, and realized that one issue is that while these people were programmers, they weren't "geeks." I realized then that there are actually a lot of things that are done differently by the "computer geek" set -- a group which tends to include all of the best developers I know. Mainly, I've observed this in the differences between developers at my current employer (a large, traditional retailer) and my previous one (Microsoft.)
Geeks have different priorities than most people when it comes to software engineering jobs, and attracting and retaining them at a company can require some different strategies. And they're worth attracting and maintaining, for two reasons: first, most of the really good developers fall into that category, and while you don't need all your developers to be superstars, it sure helps if some of them are; and two, because they don't care all that much about the money.
What does matter to them? Several things:
- Autonomy. Micromanagement drives them crazy. This is a case where you must follow management-by-results, not management-by-tasks. Figuring out how to do things is precisely what geeks enjoy about work -- tell them what you want, not how you want them to achieve it. They'll figure something out, and be willing to go above and beyond what's required, because it's theirs. Whereas if you give them a checklist, they'll do it haphazardly, because they're not invested in it.
- Isolation. Geeks, all told, are not very social. They do their best work when left alone. The cubicle is a horrible environment, giving you all the obstacles to collaboration of offices but without any of the privacy. Offices are ideal for most development work, the only exception being the early stages wherein there's a lot more collaboration and brainstorming than actual coding. Actual coding needs extended, uninterrupted quiet time (well, sometimes it's not quiet at all if you count music, but the sounds are chosen.) Geeks coding get into the "zone" -- a 5-minute interruption can and will cost you an hour of productivity.
- Technology. Geeks want to be on the cutting edge. You're not going to retain one for a project writing Yet Another Database Front-End unless you've got a truly amazing work environment (or seriously overpay them for work that frankly doesn't require superstar developers.) More interesting projects often mean more than higher-paying projects. In addition, it's worth investing in the technology they'll use every day. Sure, they may not really "need" a $4,000 dev workstation with two LCD monitors... but they'll be more productive with one, be happier working on it, and it'll do more to retain them than you would from a comparably-sized raise. Ever having to wait on substandard technology to keep up with them is irritating.
Most importantly of all, though, geeks despise "politics," where by politics I mean any situation in which interpersonal considerations outweigh technical considerations. They have no patience at all for things like:
- Using an older, inferior, or simply less appropriate tool (e.g. programming language, web framework) because "the boss likes it," "we've always done it that way," or "we're a [insert product here] shop." They need technical reasons for using a technology, not somebody's feelings.
- Anything perceived as unfair. While I said they don't care much about money, there is one situation in which they do care -- if they feel they're paid less than market value, or that someone else who's not as good as they are is paid more. Trying to keep salaries secret helps not at all -- they for the most part don't understand why they should be kept secret, and thus will totally disregard any order to do so. Of course, the problem is that they're often unwilling or unable to see any non-technical factors in an employee's value, which sometimes do play a part in compensation.
- Fiefdoms and silos. Geeks want to get things done. And they don't care overmuch who does them -- when engineering solutions, they'll totally ignore interdepartmental boundaries. This isn't a bad thing; however, managers often think it's a bad thing, since they want their team to get the credit for it. What these managers fail to take into account is that trying to get the credit for it results in not just an inferior product but also unhappy developers.
Though I'm talking primarily about work here, these characteristics do extend outside of work, too, particularly the intolerance for personal considerations outweighing technical (or whatever they perceive as "rational" or "logical" considerations.) Geeks don't see the point of playing a game if they can't play to win -- it's not that they care overmuch about winning, it's that the game has a framework of rules, and that framework should be complete. I think this is one thing that makes geeks thought of as antisocial -- they don't take people's feelings into account when doing things, because those don't fit into the rational, logical, predictable framework they like. I think that how "normal-seeming" a geek is depends largely on how willing they are to sublimate this impulse in order to relate to other people.
Finally, when it comes to performance management, geeks need to be told, directly and clearly, how they're doing and what needs improvement, if anything. Not being people-oriented, they probably can't read you. They don't know if you're happy with them or not unless you tell them. And they're certainly not going to ask. While they deal extremely well with technical ambiguity -- they love to solve problems, so an incoherent mess from a technical perspective is just a challenge to overcome -- they don't deal well at all with ambiguity in other contexts. Clear expectations and consistent feedback turn the job itself into a problem to be solved, which makes it much more satisfying to them.
I can't help but think there's probably some correlation between what I've observed as the "software engineering geek" personality and some MBTI or enneagram types. It's probably not an exact mapping, but it sure is something that comes up a lot -- I can pretty easily classify most of the developers I've worked with into "geek" and "non-geek" if I try.