0001 .. _managementstyle:
0002
0003 Linux kernel management style
0004 =============================
0005
0006 This is a short document describing the preferred (or made up, depending
0007 on who you ask) management style for the linux kernel. It's meant to
0008 mirror the :ref:`process/coding-style.rst <codingstyle>` document to some
0009 degree, and mainly written to avoid answering [#f1]_ the same (or similar)
0010 questions over and over again.
0011
0012 Management style is very personal and much harder to quantify than
0013 simple coding style rules, so this document may or may not have anything
0014 to do with reality. It started as a lark, but that doesn't mean that it
0015 might not actually be true. You'll have to decide for yourself.
0016
0017 Btw, when talking about "kernel manager", it's all about the technical
0018 lead persons, not the people who do traditional management inside
0019 companies. If you sign purchase orders or you have any clue about the
0020 budget of your group, you're almost certainly not a kernel manager.
0021 These suggestions may or may not apply to you.
0022
0023 First off, I'd suggest buying "Seven Habits of Highly Effective
0024 People", and NOT read it. Burn it, it's a great symbolic gesture.
0025
0026 .. [#f1] This document does so not so much by answering the question, but by
0027 making it painfully obvious to the questioner that we don't have a clue
0028 to what the answer is.
0029
0030 Anyway, here goes:
0031
0032 .. _decisions:
0033
0034 1) Decisions
0035 ------------
0036
0037 Everybody thinks managers make decisions, and that decision-making is
0038 important. The bigger and more painful the decision, the bigger the
0039 manager must be to make it. That's very deep and obvious, but it's not
0040 actually true.
0041
0042 The name of the game is to **avoid** having to make a decision. In
0043 particular, if somebody tells you "choose (a) or (b), we really need you
0044 to decide on this", you're in trouble as a manager. The people you
0045 manage had better know the details better than you, so if they come to
0046 you for a technical decision, you're screwed. You're clearly not
0047 competent to make that decision for them.
0048
0049 (Corollary:if the people you manage don't know the details better than
0050 you, you're also screwed, although for a totally different reason.
0051 Namely that you are in the wrong job, and that **they** should be managing
0052 your brilliance instead).
0053
0054 So the name of the game is to **avoid** decisions, at least the big and
0055 painful ones. Making small and non-consequential decisions is fine, and
0056 makes you look like you know what you're doing, so what a kernel manager
0057 needs to do is to turn the big and painful ones into small things where
0058 nobody really cares.
0059
0060 It helps to realize that the key difference between a big decision and a
0061 small one is whether you can fix your decision afterwards. Any decision
0062 can be made small by just always making sure that if you were wrong (and
0063 you **will** be wrong), you can always undo the damage later by
0064 backtracking. Suddenly, you get to be doubly managerial for making
0065 **two** inconsequential decisions - the wrong one **and** the right one.
0066
0067 And people will even see that as true leadership (*cough* bullshit
0068 *cough*).
0069
0070 Thus the key to avoiding big decisions becomes to just avoiding to do
0071 things that can't be undone. Don't get ushered into a corner from which
0072 you cannot escape. A cornered rat may be dangerous - a cornered manager
0073 is just pitiful.
0074
0075 It turns out that since nobody would be stupid enough to ever really let
0076 a kernel manager have huge fiscal responsibility **anyway**, it's usually
0077 fairly easy to backtrack. Since you're not going to be able to waste
0078 huge amounts of money that you might not be able to repay, the only
0079 thing you can backtrack on is a technical decision, and there
0080 back-tracking is very easy: just tell everybody that you were an
0081 incompetent nincompoop, say you're sorry, and undo all the worthless
0082 work you had people work on for the last year. Suddenly the decision
0083 you made a year ago wasn't a big decision after all, since it could be
0084 easily undone.
0085
0086 It turns out that some people have trouble with this approach, for two
0087 reasons:
0088
0089 - admitting you were an idiot is harder than it looks. We all like to
0090 maintain appearances, and coming out in public to say that you were
0091 wrong is sometimes very hard indeed.
0092 - having somebody tell you that what you worked on for the last year
0093 wasn't worthwhile after all can be hard on the poor lowly engineers
0094 too, and while the actual **work** was easy enough to undo by just
0095 deleting it, you may have irrevocably lost the trust of that
0096 engineer. And remember: "irrevocable" was what we tried to avoid in
0097 the first place, and your decision ended up being a big one after
0098 all.
0099
0100 Happily, both of these reasons can be mitigated effectively by just
0101 admitting up-front that you don't have a friggin' clue, and telling
0102 people ahead of the fact that your decision is purely preliminary, and
0103 might be the wrong thing. You should always reserve the right to change
0104 your mind, and make people very **aware** of that. And it's much easier
0105 to admit that you are stupid when you haven't **yet** done the really
0106 stupid thing.
0107
0108 Then, when it really does turn out to be stupid, people just roll their
0109 eyes and say "Oops, not again".
0110
0111 This preemptive admission of incompetence might also make the people who
0112 actually do the work also think twice about whether it's worth doing or
0113 not. After all, if **they** aren't certain whether it's a good idea, you
0114 sure as hell shouldn't encourage them by promising them that what they
0115 work on will be included. Make them at least think twice before they
0116 embark on a big endeavor.
0117
0118 Remember: they'd better know more about the details than you do, and
0119 they usually already think they have the answer to everything. The best
0120 thing you can do as a manager is not to instill confidence, but rather a
0121 healthy dose of critical thinking on what they do.
0122
0123 Btw, another way to avoid a decision is to plaintively just whine "can't
0124 we just do both?" and look pitiful. Trust me, it works. If it's not
0125 clear which approach is better, they'll eventually figure it out. The
0126 answer may end up being that both teams get so frustrated by the
0127 situation that they just give up.
0128
0129 That may sound like a failure, but it's usually a sign that there was
0130 something wrong with both projects, and the reason the people involved
0131 couldn't decide was that they were both wrong. You end up coming up
0132 smelling like roses, and you avoided yet another decision that you could
0133 have screwed up on.
0134
0135
0136 2) People
0137 ---------
0138
0139 Most people are idiots, and being a manager means you'll have to deal
0140 with it, and perhaps more importantly, that **they** have to deal with
0141 **you**.
0142
0143 It turns out that while it's easy to undo technical mistakes, it's not
0144 as easy to undo personality disorders. You just have to live with
0145 theirs - and yours.
0146
0147 However, in order to prepare yourself as a kernel manager, it's best to
0148 remember not to burn any bridges, bomb any innocent villagers, or
0149 alienate too many kernel developers. It turns out that alienating people
0150 is fairly easy, and un-alienating them is hard. Thus "alienating"
0151 immediately falls under the heading of "not reversible", and becomes a
0152 no-no according to :ref:`decisions`.
0153
0154 There's just a few simple rules here:
0155
0156 (1) don't call people d*ckheads (at least not in public)
0157 (2) learn how to apologize when you forgot rule (1)
0158
0159 The problem with #1 is that it's very easy to do, since you can say
0160 "you're a d*ckhead" in millions of different ways [#f2]_, sometimes without
0161 even realizing it, and almost always with a white-hot conviction that
0162 you are right.
0163
0164 And the more convinced you are that you are right (and let's face it,
0165 you can call just about **anybody** a d*ckhead, and you often **will** be
0166 right), the harder it ends up being to apologize afterwards.
0167
0168 To solve this problem, you really only have two options:
0169
0170 - get really good at apologies
0171 - spread the "love" out so evenly that nobody really ends up feeling
0172 like they get unfairly targeted. Make it inventive enough, and they
0173 might even be amused.
0174
0175 The option of being unfailingly polite really doesn't exist. Nobody will
0176 trust somebody who is so clearly hiding their true character.
0177
0178 .. [#f2] Paul Simon sang "Fifty Ways to Leave Your Lover", because quite
0179 frankly, "A Million Ways to Tell a Developer They're a D*ckhead" doesn't
0180 scan nearly as well. But I'm sure he thought about it.
0181
0182
0183 3) People II - the Good Kind
0184 ----------------------------
0185
0186 While it turns out that most people are idiots, the corollary to that is
0187 sadly that you are one too, and that while we can all bask in the secure
0188 knowledge that we're better than the average person (let's face it,
0189 nobody ever believes that they're average or below-average), we should
0190 also admit that we're not the sharpest knife around, and there will be
0191 other people that are less of an idiot than you are.
0192
0193 Some people react badly to smart people. Others take advantage of them.
0194
0195 Make sure that you, as a kernel maintainer, are in the second group.
0196 Suck up to them, because they are the people who will make your job
0197 easier. In particular, they'll be able to make your decisions for you,
0198 which is what the game is all about.
0199
0200 So when you find somebody smarter than you are, just coast along. Your
0201 management responsibilities largely become ones of saying "Sounds like a
0202 good idea - go wild", or "That sounds good, but what about xxx?". The
0203 second version in particular is a great way to either learn something
0204 new about "xxx" or seem **extra** managerial by pointing out something the
0205 smarter person hadn't thought about. In either case, you win.
0206
0207 One thing to look out for is to realize that greatness in one area does
0208 not necessarily translate to other areas. So you might prod people in
0209 specific directions, but let's face it, they might be good at what they
0210 do, and suck at everything else. The good news is that people tend to
0211 naturally gravitate back to what they are good at, so it's not like you
0212 are doing something irreversible when you **do** prod them in some
0213 direction, just don't push too hard.
0214
0215
0216 4) Placing blame
0217 ----------------
0218
0219 Things will go wrong, and people want somebody to blame. Tag, you're it.
0220
0221 It's not actually that hard to accept the blame, especially if people
0222 kind of realize that it wasn't **all** your fault. Which brings us to the
0223 best way of taking the blame: do it for someone else. You'll feel good
0224 for taking the fall, they'll feel good about not getting blamed, and the
0225 person who lost their whole 36GB porn-collection because of your
0226 incompetence will grudgingly admit that you at least didn't try to weasel
0227 out of it.
0228
0229 Then make the developer who really screwed up (if you can find them) know
0230 **in private** that they screwed up. Not just so they can avoid it in the
0231 future, but so that they know they owe you one. And, perhaps even more
0232 importantly, they're also likely the person who can fix it. Because, let's
0233 face it, it sure ain't you.
0234
0235 Taking the blame is also why you get to be manager in the first place.
0236 It's part of what makes people trust you, and allow you the potential
0237 glory, because you're the one who gets to say "I screwed up". And if
0238 you've followed the previous rules, you'll be pretty good at saying that
0239 by now.
0240
0241
0242 5) Things to avoid
0243 ------------------
0244
0245 There's one thing people hate even more than being called "d*ckhead",
0246 and that is being called a "d*ckhead" in a sanctimonious voice. The
0247 first you can apologize for, the second one you won't really get the
0248 chance. They likely will no longer be listening even if you otherwise
0249 do a good job.
0250
0251 We all think we're better than anybody else, which means that when
0252 somebody else puts on airs, it **really** rubs us the wrong way. You may
0253 be morally and intellectually superior to everybody around you, but
0254 don't try to make it too obvious unless you really **intend** to irritate
0255 somebody [#f3]_.
0256
0257 Similarly, don't be too polite or subtle about things. Politeness easily
0258 ends up going overboard and hiding the problem, and as they say, "On the
0259 internet, nobody can hear you being subtle". Use a big blunt object to
0260 hammer the point in, because you can't really depend on people getting
0261 your point otherwise.
0262
0263 Some humor can help pad both the bluntness and the moralizing. Going
0264 overboard to the point of being ridiculous can drive a point home
0265 without making it painful to the recipient, who just thinks you're being
0266 silly. It can thus help get through the personal mental block we all
0267 have about criticism.
0268
0269 .. [#f3] Hint: internet newsgroups that are not directly related to your work
0270 are great ways to take out your frustrations at other people. Write
0271 insulting posts with a sneer just to get into a good flame every once in
0272 a while, and you'll feel cleansed. Just don't crap too close to home.
0273
0274
0275 6) Why me?
0276 ----------
0277
0278 Since your main responsibility seems to be to take the blame for other
0279 peoples mistakes, and make it painfully obvious to everybody else that
0280 you're incompetent, the obvious question becomes one of why do it in the
0281 first place?
0282
0283 First off, while you may or may not get screaming teenage girls (or
0284 boys, let's not be judgmental or sexist here) knocking on your dressing
0285 room door, you **will** get an immense feeling of personal accomplishment
0286 for being "in charge". Never mind the fact that you're really leading
0287 by trying to keep up with everybody else and running after them as fast
0288 as you can. Everybody will still think you're the person in charge.
0289
0290 It's a great job if you can hack it.