Documentation/ManagementStyle: convert it to ReST markup
[cascardo/linux.git] / Documentation / ManagementStyle
1 Linux kernel management style
2 =============================
3
4 This is a short document describing the preferred (or made up, depending
5 on who you ask) management style for the linux kernel.  It's meant to
6 mirror the CodingStyle document to some degree, and mainly written to
7 avoid answering [#f1]_  the same (or similar) questions over and over again.
8
9 Management style is very personal and much harder to quantify than
10 simple coding style rules, so this document may or may not have anything
11 to do with reality.  It started as a lark, but that doesn't mean that it
12 might not actually be true. You'll have to decide for yourself.
13
14 Btw, when talking about "kernel manager", it's all about the technical
15 lead persons, not the people who do traditional management inside
16 companies.  If you sign purchase orders or you have any clue about the
17 budget of your group, you're almost certainly not a kernel manager.
18 These suggestions may or may not apply to you.
19
20 First off, I'd suggest buying "Seven Habits of Highly Effective
21 People", and NOT read it.  Burn it, it's a great symbolic gesture.
22
23 .. [#f1] This document does so not so much by answering the question, but by
24   making it painfully obvious to the questioner that we don't have a clue
25   to what the answer is.
26
27 Anyway, here goes:
28
29 .. _decisions:
30
31 1) Decisions
32 ------------
33
34 Everybody thinks managers make decisions, and that decision-making is
35 important.  The bigger and more painful the decision, the bigger the
36 manager must be to make it.  That's very deep and obvious, but it's not
37 actually true.
38
39 The name of the game is to **avoid** having to make a decision.  In
40 particular, if somebody tells you "choose (a) or (b), we really need you
41 to decide on this", you're in trouble as a manager.  The people you
42 manage had better know the details better than you, so if they come to
43 you for a technical decision, you're screwed.  You're clearly not
44 competent to make that decision for them.
45
46 (Corollary:if the people you manage don't know the details better than
47 you, you're also screwed, although for a totally different reason.
48 Namely that you are in the wrong job, and that **they** should be managing
49 your brilliance instead).
50
51 So the name of the game is to **avoid** decisions, at least the big and
52 painful ones.  Making small and non-consequential decisions is fine, and
53 makes you look like you know what you're doing, so what a kernel manager
54 needs to do is to turn the big and painful ones into small things where
55 nobody really cares.
56
57 It helps to realize that the key difference between a big decision and a
58 small one is whether you can fix your decision afterwards.  Any decision
59 can be made small by just always making sure that if you were wrong (and
60 you **will** be wrong), you can always undo the damage later by
61 backtracking.  Suddenly, you get to be doubly managerial for making
62 **two** inconsequential decisions - the wrong one **and** the right one.
63
64 And people will even see that as true leadership (*cough* bullshit
65 *cough*).
66
67 Thus the key to avoiding big decisions becomes to just avoiding to do
68 things that can't be undone.  Don't get ushered into a corner from which
69 you cannot escape.  A cornered rat may be dangerous - a cornered manager
70 is just pitiful.
71
72 It turns out that since nobody would be stupid enough to ever really let
73 a kernel manager have huge fiscal responsibility **anyway**, it's usually
74 fairly easy to backtrack.  Since you're not going to be able to waste
75 huge amounts of money that you might not be able to repay, the only
76 thing you can backtrack on is a technical decision, and there
77 back-tracking is very easy: just tell everybody that you were an
78 incompetent nincompoop, say you're sorry, and undo all the worthless
79 work you had people work on for the last year.  Suddenly the decision
80 you made a year ago wasn't a big decision after all, since it could be
81 easily undone.
82
83 It turns out that some people have trouble with this approach, for two
84 reasons:
85
86  - admitting you were an idiot is harder than it looks.  We all like to
87    maintain appearances, and coming out in public to say that you were
88    wrong is sometimes very hard indeed.
89  - having somebody tell you that what you worked on for the last year
90    wasn't worthwhile after all can be hard on the poor lowly engineers
91    too, and while the actual **work** was easy enough to undo by just
92    deleting it, you may have irrevocably lost the trust of that
93    engineer.  And remember: "irrevocable" was what we tried to avoid in
94    the first place, and your decision ended up being a big one after
95    all.
96
97 Happily, both of these reasons can be mitigated effectively by just
98 admitting up-front that you don't have a friggin' clue, and telling
99 people ahead of the fact that your decision is purely preliminary, and
100 might be the wrong thing.  You should always reserve the right to change
101 your mind, and make people very **aware** of that.  And it's much easier
102 to admit that you are stupid when you haven't **yet** done the really
103 stupid thing.
104
105 Then, when it really does turn out to be stupid, people just roll their
106 eyes and say "Oops, he did it again".
107
108 This preemptive admission of incompetence might also make the people who
109 actually do the work also think twice about whether it's worth doing or
110 not.  After all, if **they** aren't certain whether it's a good idea, you
111 sure as hell shouldn't encourage them by promising them that what they
112 work on will be included.  Make them at least think twice before they
113 embark on a big endeavor.
114
115 Remember: they'd better know more about the details than you do, and
116 they usually already think they have the answer to everything.  The best
117 thing you can do as a manager is not to instill confidence, but rather a
118 healthy dose of critical thinking on what they do.
119
120 Btw, another way to avoid a decision is to plaintively just whine "can't
121 we just do both?" and look pitiful.  Trust me, it works.  If it's not
122 clear which approach is better, they'll eventually figure it out.  The
123 answer may end up being that both teams get so frustrated by the
124 situation that they just give up.
125
126 That may sound like a failure, but it's usually a sign that there was
127 something wrong with both projects, and the reason the people involved
128 couldn't decide was that they were both wrong.  You end up coming up
129 smelling like roses, and you avoided yet another decision that you could
130 have screwed up on.
131
132
133 2) People
134 ---------
135
136 Most people are idiots, and being a manager means you'll have to deal
137 with it, and perhaps more importantly, that **they** have to deal with
138 **you**.
139
140 It turns out that while it's easy to undo technical mistakes, it's not
141 as easy to undo personality disorders.  You just have to live with
142 theirs - and yours.
143
144 However, in order to prepare yourself as a kernel manager, it's best to
145 remember not to burn any bridges, bomb any innocent villagers, or
146 alienate too many kernel developers. It turns out that alienating people
147 is fairly easy, and un-alienating them is hard. Thus "alienating"
148 immediately falls under the heading of "not reversible", and becomes a
149 no-no according to :ref:`decisions`.
150
151 There's just a few simple rules here:
152
153  (1) don't call people d*ckheads (at least not in public)
154  (2) learn how to apologize when you forgot rule (1)
155
156 The problem with #1 is that it's very easy to do, since you can say
157 "you're a d*ckhead" in millions of different ways [#f2]_, sometimes without
158 even realizing it, and almost always with a white-hot conviction that
159 you are right.
160
161 And the more convinced you are that you are right (and let's face it,
162 you can call just about **anybody** a d*ckhead, and you often **will** be
163 right), the harder it ends up being to apologize afterwards.
164
165 To solve this problem, you really only have two options:
166
167  - get really good at apologies
168  - spread the "love" out so evenly that nobody really ends up feeling
169    like they get unfairly targeted.  Make it inventive enough, and they
170    might even be amused.
171
172 The option of being unfailingly polite really doesn't exist. Nobody will
173 trust somebody who is so clearly hiding his true character.
174
175 .. [#f2] Paul Simon sang "Fifty Ways to Leave Your Lover", because quite
176   frankly, "A Million Ways to Tell a Developer He Is a D*ckhead" doesn't
177   scan nearly as well.  But I'm sure he thought about it.
178
179
180 3) People II - the Good Kind
181 ----------------------------
182
183 While it turns out that most people are idiots, the corollary to that is
184 sadly that you are one too, and that while we can all bask in the secure
185 knowledge that we're better than the average person (let's face it,
186 nobody ever believes that they're average or below-average), we should
187 also admit that we're not the sharpest knife around, and there will be
188 other people that are less of an idiot than you are.
189
190 Some people react badly to smart people.  Others take advantage of them.
191
192 Make sure that you, as a kernel maintainer, are in the second group.
193 Suck up to them, because they are the people who will make your job
194 easier. In particular, they'll be able to make your decisions for you,
195 which is what the game is all about.
196
197 So when you find somebody smarter than you are, just coast along.  Your
198 management responsibilities largely become ones of saying "Sounds like a
199 good idea - go wild", or "That sounds good, but what about xxx?".  The
200 second version in particular is a great way to either learn something
201 new about "xxx" or seem **extra** managerial by pointing out something the
202 smarter person hadn't thought about.  In either case, you win.
203
204 One thing to look out for is to realize that greatness in one area does
205 not necessarily translate to other areas.  So you might prod people in
206 specific directions, but let's face it, they might be good at what they
207 do, and suck at everything else.  The good news is that people tend to
208 naturally gravitate back to what they are good at, so it's not like you
209 are doing something irreversible when you **do** prod them in some
210 direction, just don't push too hard.
211
212
213 4) Placing blame
214 ----------------
215
216 Things will go wrong, and people want somebody to blame. Tag, you're it.
217
218 It's not actually that hard to accept the blame, especially if people
219 kind of realize that it wasn't **all** your fault.  Which brings us to the
220 best way of taking the blame: do it for another guy. You'll feel good
221 for taking the fall, he'll feel good about not getting blamed, and the
222 guy who lost his whole 36GB porn-collection because of your incompetence
223 will grudgingly admit that you at least didn't try to weasel out of it.
224
225 Then make the developer who really screwed up (if you can find him) know
226 **in_private** that he screwed up.  Not just so he can avoid it in the
227 future, but so that he knows he owes you one.  And, perhaps even more
228 importantly, he's also likely the person who can fix it.  Because, let's
229 face it, it sure ain't you.
230
231 Taking the blame is also why you get to be manager in the first place.
232 It's part of what makes people trust you, and allow you the potential
233 glory, because you're the one who gets to say "I screwed up".  And if
234 you've followed the previous rules, you'll be pretty good at saying that
235 by now.
236
237
238 5) Things to avoid
239 ------------------
240
241 There's one thing people hate even more than being called "d*ckhead",
242 and that is being called a "d*ckhead" in a sanctimonious voice.  The
243 first you can apologize for, the second one you won't really get the
244 chance.  They likely will no longer be listening even if you otherwise
245 do a good job.
246
247 We all think we're better than anybody else, which means that when
248 somebody else puts on airs, it **really** rubs us the wrong way.  You may
249 be morally and intellectually superior to everybody around you, but
250 don't try to make it too obvious unless you really **intend** to irritate
251 somebody [#f3]_.
252
253 Similarly, don't be too polite or subtle about things. Politeness easily
254 ends up going overboard and hiding the problem, and as they say, "On the
255 internet, nobody can hear you being subtle". Use a big blunt object to
256 hammer the point in, because you can't really depend on people getting
257 your point otherwise.
258
259 Some humor can help pad both the bluntness and the moralizing.  Going
260 overboard to the point of being ridiculous can drive a point home
261 without making it painful to the recipient, who just thinks you're being
262 silly.  It can thus help get through the personal mental block we all
263 have about criticism.
264
265 .. [#f3] Hint: internet newsgroups that are not directly related to your work
266   are great ways to take out your frustrations at other people. Write
267   insulting posts with a sneer just to get into a good flame every once in
268   a while, and you'll feel cleansed. Just don't crap too close to home.
269
270
271 6) Why me?
272 ----------
273
274 Since your main responsibility seems to be to take the blame for other
275 peoples mistakes, and make it painfully obvious to everybody else that
276 you're incompetent, the obvious question becomes one of why do it in the
277 first place?
278
279 First off, while you may or may not get screaming teenage girls (or
280 boys, let's not be judgmental or sexist here) knocking on your dressing
281 room door, you **will** get an immense feeling of personal accomplishment
282 for being "in charge".  Never mind the fact that you're really leading
283 by trying to keep up with everybody else and running after them as fast
284 as you can.  Everybody will still think you're the person in charge.
285
286 It's a great job if you can hack it.