A place to cache linked articles (think custom and personal wayback machine)
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

index.html 50KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044
  1. <!doctype html><!-- This is a valid HTML5 document. -->
  2. <!-- Screen readers, SEO, extensions and so on. -->
  3. <html lang="fr">
  4. <!-- Has to be within the first 1024 bytes, hence before the `title` element
  5. See: https://www.w3.org/TR/2012/CR-html5-20121217/document-metadata.html#charset -->
  6. <meta charset="utf-8">
  7. <!-- Why no `X-UA-Compatible` meta: https://stackoverflow.com/a/6771584 -->
  8. <!-- The viewport meta is quite crowded and we are responsible for that.
  9. See: https://codepen.io/tigt/post/meta-viewport-for-2015 -->
  10. <meta name="viewport" content="width=device-width,initial-scale=1">
  11. <!-- Required to make a valid HTML5 document. -->
  12. <title>No, We Won’t Have a Video Call for That! (archive) — David Larlet</title>
  13. <meta name="description" content="Publication mise en cache pour en conserver une trace.">
  14. <!-- That good ol' feed, subscribe :). -->
  15. <link rel="alternate" type="application/atom+xml" title="Feed" href="/david/log/">
  16. <!-- Generated from https://realfavicongenerator.net/ such a mess. -->
  17. <link rel="apple-touch-icon" sizes="180x180" href="/static/david/icons2/apple-touch-icon.png">
  18. <link rel="icon" type="image/png" sizes="32x32" href="/static/david/icons2/favicon-32x32.png">
  19. <link rel="icon" type="image/png" sizes="16x16" href="/static/david/icons2/favicon-16x16.png">
  20. <link rel="manifest" href="/static/david/icons2/site.webmanifest">
  21. <link rel="mask-icon" href="/static/david/icons2/safari-pinned-tab.svg" color="#07486c">
  22. <link rel="shortcut icon" href="/static/david/icons2/favicon.ico">
  23. <meta name="msapplication-TileColor" content="#f7f7f7">
  24. <meta name="msapplication-config" content="/static/david/icons2/browserconfig.xml">
  25. <meta name="theme-color" content="#f7f7f7" media="(prefers-color-scheme: light)">
  26. <meta name="theme-color" content="#272727" media="(prefers-color-scheme: dark)">
  27. <!-- Documented, feel free to shoot an email. -->
  28. <link rel="stylesheet" href="/static/david/css/style_2021-01-20.css">
  29. <!-- See https://www.zachleat.com/web/comprehensive-webfonts/ for the trade-off. -->
  30. <link rel="preload" href="/static/david/css/fonts/triplicate_t4_poly_regular.woff2" as="font" type="font/woff2" media="(prefers-color-scheme: light), (prefers-color-scheme: no-preference)" crossorigin>
  31. <link rel="preload" href="/static/david/css/fonts/triplicate_t4_poly_bold.woff2" as="font" type="font/woff2" media="(prefers-color-scheme: light), (prefers-color-scheme: no-preference)" crossorigin>
  32. <link rel="preload" href="/static/david/css/fonts/triplicate_t4_poly_italic.woff2" as="font" type="font/woff2" media="(prefers-color-scheme: light), (prefers-color-scheme: no-preference)" crossorigin>
  33. <link rel="preload" href="/static/david/css/fonts/triplicate_t3_regular.woff2" as="font" type="font/woff2" media="(prefers-color-scheme: dark)" crossorigin>
  34. <link rel="preload" href="/static/david/css/fonts/triplicate_t3_bold.woff2" as="font" type="font/woff2" media="(prefers-color-scheme: dark)" crossorigin>
  35. <link rel="preload" href="/static/david/css/fonts/triplicate_t3_italic.woff2" as="font" type="font/woff2" media="(prefers-color-scheme: dark)" crossorigin>
  36. <script>
  37. function toggleTheme(themeName) {
  38. document.documentElement.classList.toggle(
  39. 'forced-dark',
  40. themeName === 'dark'
  41. )
  42. document.documentElement.classList.toggle(
  43. 'forced-light',
  44. themeName === 'light'
  45. )
  46. }
  47. const selectedTheme = localStorage.getItem('theme')
  48. if (selectedTheme !== 'undefined') {
  49. toggleTheme(selectedTheme)
  50. }
  51. </script>
  52. <meta name="robots" content="noindex, nofollow">
  53. <meta content="origin-when-cross-origin" name="referrer">
  54. <!-- Canonical URL for SEO purposes -->
  55. <link rel="canonical" href="https://xahteiwi.eu/resources/presentations/no-we-wont-have-a-video-call-for-that/">
  56. <body class="remarkdown h1-underline h2-underline h3-underline em-underscore hr-center ul-star pre-tick" data-instant-intensity="viewport-all">
  57. <article>
  58. <header>
  59. <h1>No, We Won’t Have a Video Call for That!</h1>
  60. </header>
  61. <nav>
  62. <p class="center">
  63. <a href="/david/" title="Aller à l’accueil"><svg class="icon icon-home">
  64. <use xlink:href="/static/david/icons2/symbol-defs.svg#icon-home"></use>
  65. </svg> Accueil</a> •
  66. <a href="https://xahteiwi.eu/resources/presentations/no-we-wont-have-a-video-call-for-that/" title="Lien vers le contenu original">Source originale</a>
  67. </p>
  68. </nav>
  69. <hr>
  70. <p>FrOSCon 2020 was an online event due to the COVID-19 pandemic, and
  71. gave me the opportunity to present an extended and heavily updated
  72. version of my <a href="https://xahteiwi.eu/resources/presentations/devopsdays-tel-aviv-2019/">DevOpsDays 2019</a> talk.</p>
  73. <hr>
  74. <p>I normally make my talks available as a video, and a slide deck with
  75. full speaker notes. In this case though, I consider it fitting to
  76. write the whole thing out, so that you <em>don’t</em> need to watch a full
  77. length video in 45 minutes, but can read the whole thing in 15.</p>
  78. <p>You’ll still find links to the recording and deck downpage, as usual.</p>
  79. <hr>
  80. <p>No, we won’t have a video call for that!</p>
  81. <p>Communications for distributed teams</p>
  82. <p>FrOSCon 2020</p>
  83. <p>This presentation is a talk presented at <a href="https://www.froscon.de/">FrOSCon 2020
  84. Cloud Edition</a>. It is <a href="https://creativecommons.org/licenses/by-sa/4.0/">CC-BY-SA
  85. 4.0</a> licensed, see
  86. <a href="/LICENSE">the license</a> for details.</p>
  87. <p>Hello and welcome, dear FrOScon people — this is my talk on
  88. communications in distributed teams. My name is Florian, this is the
  89. second time I‘m speaking at FrOScon, and you probably want to know
  90. what the hell qualifies me to talk about this specific issue. So:</p>
  91. <h3>Why am I talking here?</h3>
  92. <p>So, why am I talking about <strong>that</strong>?</p>
  93. <p>Or rather more precisely, why am <strong>I</strong> talking about that?</p>
  94. <p>I turned 40 last year, have been in IT for about 20 years now (19
  95. full-time), and out of that I have worked</p>
  96. <ul>
  97. <li>
  98. <p>in 4 successive companies, all of which worked out of offices,
  99. for 11 years, </p>
  100. </li>
  101. <li>
  102. <p>in a completely distributed company, that I founded, for 6 years,</p>
  103. </li>
  104. <li>
  105. <p>and now, for about three years, I have been running a distributed
  106. team that is a business unit of a company that has existed for 15
  107. years and throughout that time, has only ever worked from a single
  108. office.</p>
  109. </li>
  110. </ul>
  111. <p>So I think I might have seen and become aware of some of the rather
  112. interesting challenges that come with this.</p>
  113. <h3>What changed since last time?</h3>
  114. <p>I originally wrote and presented this talk for the first time in
  115. December 2019. At the time, you probably had forgotten about SARS, had
  116. no idea what SARS-CoV2 or COVID-19 were, and many of you were probably
  117. working from offices.</p>
  118. <p>And then something like three months later, everything changed and
  119. suddenly, this talk became much more relevant to a much greater
  120. audience.</p>
  121. <p>And something else happened: a lot of people suddenly started talking
  122. about working from home and distributed teams, and a lot of those
  123. people who were talking very loudly, had themselves only been working
  124. with or managing distributed teams since March. And a fair amount of
  125. what you could about the subject then, and can still read now, is
  126. complete and utter bullshit.</p>
  127. <p>So there’s one point I actually <em>didn’t</em> make in the initial version
  128. of this talk, because I thought it was self-evident. But I have come
  129. to the conclusion that to a lot of people it is not, so to rectify
  130. this omission from last December — and with apologies for that
  131. omission to the wonderful DevOpsDays Tel Aviv crowd, who were my first
  132. audience for this talk, let me make this one thing very clear from the
  133. outset:</p>
  134. <blockquote>
  135. <p>Effective distributed collaboration is <strong>not</strong> pretending to be in
  136. an office while staring into a webcam all day.</p>
  137. </blockquote>
  138. <p>You will never be able to capitalize on work as a distributed team
  139. unless you kick some office habits. The key to distributed teams being
  140. effective is <strong>not</strong> that they happen to not be in the same place, as
  141. you’ll see from the remainder of this talk. So to expect success from
  142. the approach that you take the habits of an office, simply remove the
  143. element of locality, replace every face to face meeting with a video
  144. call and carry on, is ludicrous.</p>
  145. <p>The good news is that if you do it right, you’ll end up with a far
  146. better team than a local one would ever be, <em>and</em> everyone has a
  147. chance at far better work-life balance, <em>and</em> you don’t waste awful
  148. amounts of time and energy and fossil fuels on your commute.</p>
  149. <h3>What’s in this talk?</h3>
  150. <p>So you’ll find a few general themes throughout this talk:</p>
  151. <ul>
  152. <li>
  153. <p>What modes we have <em>available</em> for communications in teams;</p>
  154. </li>
  155. <li>
  156. <p>Why distributed teams always collaborate <em>asynchronously,</em> and what
  157. communication modes lend themselves to that particularly well;</p>
  158. </li>
  159. <li>
  160. <p>Why <em>written communication</em> is so important in distributed teams;</p>
  161. </li>
  162. <li>
  163. <p>And why <em>meetings</em> (like video calls) are a mode of communication
  164. that effective distributed teams hardly ever need to use — except
  165. for very specific reasons.</p>
  166. </li>
  167. </ul>
  168. <p>But I do want to state one thing upfront:</p>
  169. <blockquote>
  170. <p>This is <em>not science.</em></p>
  171. </blockquote>
  172. <p>Nothing of what I am talking about is steeped in any scientific
  173. rigour. I present anecdotes, not evidence. I might be mistaking
  174. correlation for causation, or the other way round. It’s solely based
  175. on my personal experience, and the experience of others I have talked
  176. to, watched, or read. Everything I say here is subject to debate and
  177. rebuttal, or you can simply have a different opinion.</p>
  178. <p>But it’s definitely <strong>not</strong> science.</p>
  179. <p>Now with all of that said, let me attempt to give a definition of a
  180. distributed team, according to my understanding:</p>
  181. <p>A distributed team is a <strong>professional</strong> group whose members do not
  182. rely on proximity in order to <strong>routinely</strong> collaborate
  183. productively.</p>
  184. <p>Now this is clearly not an ideal definition, not least because it
  185. defines something by a negative, and an outside factor to boot: it
  186. defines a distributed team by what it <em>does not need</em> to exist to
  187. function. But it’s the best definition I’ve been able to come up with.</p>
  188. <p>Now there’s a couple of key words in here:</p>
  189. <ul>
  190. <li>
  191. <p><strong>Professional.</strong> I’m talking about teams that work towards a
  192. professional goal. This doesn’t necessarily mean that they all work
  193. in the same company. They could, for example, all work in different
  194. companies collaborating on a joint project, which is what frequently
  195. happens in open source software projects. But they’re not pursuing
  196. their hobby, they’re doing their jobs.</p>
  197. </li>
  198. <li>
  199. <p><strong>Routinely.</strong> I’m talking about teams that <em>habitually</em> work in a
  200. distributed fashion, not the work that goes on in an office-based
  201. team when one person is having a work-from-home day.</p>
  202. </li>
  203. </ul>
  204. <p>It is important to understand that that lack of proximity is not only
  205. spatial, it is temporal as well, because:</p>
  206. <blockquote>
  207. <p>Working in a distributed team means <strong>working asynchronously.</strong></p>
  208. </blockquote>
  209. <p>If your team is distributed, this is equivalent to saying that it
  210. works in an asynchronous fashion, that is to say, that people will
  211. work on things in parallel, and a capable distributed team will have
  212. just as few synchronization points as absolutely necessary.</p>
  213. <p>The reason for this is not just working in different timezones, but
  214. also the fact that everyone will have their own daily routine, and/or
  215. have their individual times when they are most productive. Which you
  216. <em>will not attempt to synchronize.</em> (Doing so would mean setting the
  217. entire team up for failure.)</p>
  218. <p>Now, this doesn’t come for free, nor does it fall in our lap:</p>
  219. <blockquote>
  220. <p>Being productive in a distributed team is a skill
  221. that most people must <strong>learn;</strong> it is not innate to us.</p>
  222. </blockquote>
  223. <p>People are not born with the ability to work in a distributed
  224. team. Humans function best in groups that collaborate in close
  225. proximity to one another; it is only very recently that technology has
  226. started to enable us to override that to an extent — giving us other
  227. benefits like the ability to work from home, or the ability to hire
  228. people residing anywhere, provided they have internet connectivity.</p>
  229. <p>So we now <em>can</em> work in teams despite being continental distances away
  230. from each other but we do have to acquire the skills to do that. And
  231. if we fail to do so, that has a rather grave disadvantage, which is
  232. that...</p>
  233. <blockquote>
  234. <p><strong>Nothing</strong> has as dire an impact on productivity as <strong>poor
  235. communications.</strong></p>
  236. </blockquote>
  237. <p>This is a truism that applies to both distributed and non-distributed
  238. teams. Having bad communications will wreck any project, blow any
  239. budget, fail any objective. Now note that the reverse is <em>not true:</em>
  240. having <em>good</em> communications does not guarantee success. But having
  241. bad communications does guarantee failure.</p>
  242. <p>And here is one thing to start with:</p>
  243. <blockquote>
  244. <p>A capable distributed team <strong>habitually externalises</strong> information.</p>
  245. </blockquote>
  246. <p>Information is generally far less useful when it is only stored in one
  247. person’s head, as opposed to being accessible in a shared system that
  248. everyone trusts and can use. If you take important information out of
  249. your own head and store it in a medium that allows others to easily
  250. find and contextualise it, that’s a win for everyone.</p>
  251. <p>And since we’re all technology people, we typically have multiple
  252. facilities to externalise, share, and then access information at our
  253. disposal. So let’s see how those compare.</p>
  254. <h2>Modes of communication in distributed teams</h2>
  255. <p>A distributed team will habitually use multiple modes of
  256. communication, relying mostly on those that make sharing, finding, and
  257. contextualising information easy, and avoiding those that make it
  258. difficult.</p>
  259. <p>In many teams, distributed or not, using chat as a default mode of
  260. communication is becoming the norm. Now with an important exception,
  261. which I’ll get to near the end of the talk, this is <strong>not</strong> a symptom
  262. of having a particularly dynamic or efficient team; it’s the opposite.</p>
  263. <blockquote>
  264. <p>Excessively using chat isn’t being efficient.
  265. It’s being lazy.</p>
  266. </blockquote>
  267. <p>It’s a symptom of the worst kind of laziness <em>(not malice!)</em>: in an
  268. attempt to communicate quickly and easily, for yourself, you are really
  269. making things harder for everyone, including yourself.</p>
  270. <table class="table-hover table table-striped">
  271. <thead>
  272. <tr>
  273. <th></th>
  274. <th align="center">Share</th>
  275. <th align="center">Find</th>
  276. <th>Contextualise</th>
  277. </tr>
  278. </thead>
  279. <tbody>
  280. <tr>
  281. <td>Chat</td>
  282. <td align="center">🙂</td>
  283. <td align="center">😐</td>
  284. <td>🙁</td>
  285. </tr>
  286. </tbody>
  287. </table>
  288. <p>This is because, while <em>sharing</em> information in a chat is extremely
  289. easy, it is also a “fire and forget” mode of communications. Chat
  290. makes it difficult to find information after the fact. If you’ve ever
  291. attempted to scour a busy Slack or IRC archive for a discussion on a
  292. specific topic that you only remember to have happened a “few months
  293. ago”, you’ll agree with me here.</p>
  294. <p>It’s even <em>more</em> difficult to read a Slack discussion in context, that
  295. is to say in relation to <em>other</em> discussions on the same topic, days
  296. or weeks earlier or later.</p>
  297. <p>Let’s compare that to other communication modes:</p>
  298. <table class="table-hover table table-striped">
  299. <thead>
  300. <tr>
  301. <th></th>
  302. <th align="center">Share</th>
  303. <th align="center">Find</th>
  304. <th>Contextualise</th>
  305. </tr>
  306. </thead>
  307. <tbody>
  308. <tr>
  309. <td>Chat</td>
  310. <td align="center">🙂</td>
  311. <td align="center">😐</td>
  312. <td>🙁</td>
  313. </tr>
  314. <tr>
  315. <td>Email</td>
  316. <td align="center">😐</td>
  317. <td align="center">😐</td>
  318. <td>😐</td>
  319. </tr>
  320. </tbody>
  321. </table>
  322. <ul>
  323. <li>Email makes it easy to share information with a person or a group
  324. from the get-go, but quite difficult to loop people into an ongoing
  325. discussion after the fact. Finding information later is just as hard
  326. as with chat, and it’s marginally better at contextualizing
  327. information than chat (because you get proper threading).</li>
  328. </ul>
  329. <table class="table-hover table table-striped">
  330. <thead>
  331. <tr>
  332. <th></th>
  333. <th align="center">Share</th>
  334. <th align="center">Find</th>
  335. <th>Contextualise</th>
  336. </tr>
  337. </thead>
  338. <tbody>
  339. <tr>
  340. <td>Chat</td>
  341. <td align="center">🙂</td>
  342. <td align="center">😐</td>
  343. <td>🙁</td>
  344. </tr>
  345. <tr>
  346. <td>Email</td>
  347. <td align="center">😐</td>
  348. <td align="center">😐</td>
  349. <td>😐</td>
  350. </tr>
  351. <tr>
  352. <td>Wiki</td>
  353. <td align="center">🙂</td>
  354. <td align="center">🙂</td>
  355. <td>🙂</td>
  356. </tr>
  357. <tr>
  358. <td>Issue tracker</td>
  359. <td align="center">🙂</td>
  360. <td align="center">🙂</td>
  361. <td>🙂</td>
  362. </tr>
  363. </tbody>
  364. </table>
  365. <ul>
  366. <li>A wiki and an issue tracker (provided you don’t lock them down with
  367. silly view permissions), in contrast, both make it <em>very</em> easy to
  368. share, find, <strong>and</strong> contextualise information.<br>
  369. Note that “wiki”, in this context, is shorthand for any facility
  370. that allows you to collaboratively edit long-form documents
  371. online. That can be an actual wiki like a MediaWiki, but also
  372. something like Confluence, or even shared Google Docs.<br>
  373. Likewise, “issue tracker” can mean RT, OTRS, Jira, Taiga, Bugzilla,
  374. whatever works for you.</li>
  375. </ul>
  376. <table class="table-hover table table-striped">
  377. <thead>
  378. <tr>
  379. <th></th>
  380. <th align="center">Share</th>
  381. <th align="center">Find</th>
  382. <th>Contextualise</th>
  383. </tr>
  384. </thead>
  385. <tbody>
  386. <tr>
  387. <td>Chat</td>
  388. <td align="center">🙂</td>
  389. <td align="center">😐</td>
  390. <td>🙁</td>
  391. </tr>
  392. <tr>
  393. <td>Email</td>
  394. <td align="center">😐</td>
  395. <td align="center">😐</td>
  396. <td>😐</td>
  397. </tr>
  398. <tr>
  399. <td>Wiki</td>
  400. <td align="center">🙂</td>
  401. <td align="center">🙂</td>
  402. <td>🙂</td>
  403. </tr>
  404. <tr>
  405. <td>Issue tracker</td>
  406. <td align="center">🙂</td>
  407. <td align="center">🙂</td>
  408. <td>🙂</td>
  409. </tr>
  410. <tr>
  411. <td>Video call</td>
  412. <td align="center">😐</td>
  413. <td align="center">🙁</td>
  414. <td>🙁</td>
  415. </tr>
  416. </tbody>
  417. </table>
  418. <ul>
  419. <li>Video calls are even worse than chat or email, because sharing
  420. information works but doesn’t scale — you can’t reasonably have more
  421. than 5-or-so people in a video call, and sharing the recording of a
  422. full video call is just pointless.</li>
  423. </ul>
  424. <p>So really, make your wiki and your issue tracker your default mode of
  425. communications, and use the others sparingly. (This isn’t meant to be
  426. a euphemism for “don’t use them”, as we’ll get to in a moment.)</p>
  427. <h2>Text chat</h2>
  428. <p>So. Let’s talk about text chat. These days, that frequently means
  429. <a href="https://slack.com/">Slack</a>, but what I am talking about also and
  430. equally applies to
  431. <a href="https://en.wikipedia.org/wiki/Internet_Relay_Chat">IRC</a>,
  432. <a href="https://mattermost.com/">Mattermost</a>, <a href="https://riot.im/">Riot</a>, and
  433. anything similar.</p>
  434. <p>Is text chat universally useful? No. Is it universally bad? Not that,
  435. either. There is a very specific type of situation in which text chat
  436. is a good thing:</p>
  437. <blockquote>
  438. <p>Use <strong>chat</strong> for collaboration that requires <strong>immediate,
  439. interactive mutual feedback.</strong></p>
  440. </blockquote>
  441. <p>Using interactive chat is a good idea for the kind of communication
  442. that requires immediate, interactive mutual feedback from two or more
  443. participants. If that is not the case, chat is not a good idea.</p>
  444. <p>This means that the only thing that chat is good for is communication
  445. that is required to be <em>synchronous,</em> and remember, in a distributed
  446. team <em>asychronicity</em> is the norm. So using interactive chat for
  447. communications needs to be an <em>exceptional</em> event for a distributed
  448. team; if it is instead a regular occurrence you’ll make everyone on
  449. the team miserable.</p>
  450. <p>For any interaction that does <em>not</em> require feedback that is <em>both</em>
  451. immediate and interactive, email, a wiki, or an issue tracker are <em>far
  452. superior</em> modes of communication.</p>
  453. <blockquote>
  454. <p>The only reason to use <strong>DMs</strong> for collaboration<br>
  455. is a need for immediate, interactive mutual feedback<br>
  456. <strong>and confidentiality.</strong></p>
  457. </blockquote>
  458. <p>Using chat direct messages (DMs) as the <em>default</em> means of
  459. communication is utterly braindead. In order for a chat DM to be
  460. useful, there is precisely one clearly delineated confluence of events
  461. that must occur:</p>
  462. <ul>
  463. <li>You need immediate feedback from the other person,</li>
  464. <li>you need mutual back-and-forth with the other person,</li>
  465. <li>you don’t want others to follow the conversation.</li>
  466. </ul>
  467. <p>I can’t emphasize enough that this combination is perfectly valid —
  468. but it is <em>exceedingly rare.</em> If you want just a private exchange of
  469. ideas with someone, encrypted email will do. If you want to work on
  470. something together with one person before you share it with others,
  471. restricted view permissions on a wiki page or an issue tracker ticket
  472. will work just fine.</p>
  473. <p>If you don’t need confidentiality but you do need interactive and
  474. immediate feedback, chances are that you’re working on something
  475. urgent, and it is far more likely you’ll eventually need to poll other
  476. opinions, than that you won’t. So just use a shared channel from the
  477. get-go, that way it’s easier for others to follow the conversation if
  478. needed — and they might be able to point out an incorrect assumption
  479. that one of you has, before you end up chasing a red herring.</p>
  480. <blockquote>
  481. <p>A chat ping is a shoulder tap.</p>
  482. </blockquote>
  483. <p>“Pinging” someone in a chat (that is, mentioning their username, which
  484. usually triggers a visual or auditory notification), is exactly like
  485. walking up to a person, interrupting what they are doing, tapping them
  486. on the shoulder, and asking them a question.</p>
  487. <p><strong>No matter whether it is your intention or not,</strong> they will feel
  488. compelled to answer, relatively promptly (the only exception is when
  489. you’ve done this so often that you have conditioned your colleagues
  490. to ignore you — congratulations).</p>
  491. <p>This means that you’ve broken their train of thought, yanked them out
  492. of a potentially complex task, forced them to redo what they did
  493. pre-interruption, or actually have them commit a mistake.</p>
  494. <p>So pinging someone in a chat is something you should only do if you
  495. are aware of exactly this risk, <em>and</em> you are convinced that whatever
  496. you’re pinging about is more important. Otherwise, to be very blunt,
  497. you’ll be seen as the asshole.</p>
  498. <blockquote>
  499. <p>Want people to hate you? Send naked pings.</p>
  500. </blockquote>
  501. <p>A “naked ping” is the action of sending someone a message consisting
  502. only of their username and a marker like “ping”, “hi”, “hey” or
  503. similar.</p>
  504. <div class="highlight"><pre><span></span><code><span class="mi">14</span><span class="o">:</span><span class="mi">00</span><span class="o">:</span><span class="mi">02</span><span class="n">Z</span> <span class="n">johndoe</span><span class="o">:</span> <span class="n">florian</span><span class="o">:</span> <span class="n">ping</span>
  505. <span class="o">[...]</span>
  506. <span class="mi">15</span><span class="o">:</span><span class="mi">56</span><span class="o">:</span><span class="mi">17</span><span class="n">Z</span> <span class="n">florian</span><span class="o">:</span> <span class="n">johndoe</span><span class="o">:</span> <span class="n">I</span> <span class="n">hate</span> <span class="n">you</span>
  507. </code></pre></div>
  508. <p>Don’t. Just don’t.</p>
  509. <p>Any person who is versed in the use of chat communications will, when
  510. subjected to this behavior, be inclined to flay you alive. Infinitely
  511. more so if it’s a DM. <strong>Do not do this.</strong></p>
  512. <p>Instead, always provide context. Always always always. Don’t say “can
  513. I ask you a question, instead, <em>ask the question.</em> If something isn’t
  514. urgent, say something like “no urgency.”</p>
  515. <div class="highlight"><pre><span></span><code><span class="mi">14</span><span class="o">:</span><span class="mi">00</span><span class="o">:</span><span class="mi">02</span><span class="n">Z</span> <span class="n">johndoe</span><span class="o">:</span> <span class="n">florian</span><span class="o">:</span> <span class="n">can</span> <span class="n">I</span> <span class="kd">get</span> <span class="n">your</span> <span class="n">eyes</span> <span class="n">on</span> <span class="n">PR</span> <span class="err">#</span><span class="mi">1422</span><span class="o">?</span>
  516. <span class="o">[...]</span>
  517. <span class="mi">15</span><span class="o">:</span><span class="mi">56</span><span class="o">:</span><span class="mi">17</span><span class="n">Z</span> <span class="n">florian</span><span class="o">:</span> <span class="n">johndoe</span><span class="o">:</span> <span class="n">done</span><span class="o">!</span>
  518. <span class="o">(</span><span class="n">was</span> <span class="n">afk</span> <span class="k">for</span> <span class="n">a</span> <span class="n">bit</span> <span class="err">–</span> <span class="n">sick</span> <span class="n">kiddo</span><span class="o">)</span>
  519. <span class="mi">15</span><span class="o">:</span><span class="mi">56</span><span class="o">:</span><span class="mi">58</span><span class="n">Z</span> <span class="n">johndoe</span><span class="o">:</span> <span class="n">florian</span><span class="o">:</span> <span class="n">np</span><span class="o">,</span> <span class="n">ty</span>
  520. </code></pre></div>
  521. <p>It should be self-evident why this is better than naked pings, but if
  522. to you it is not, then please read <a href="https://blogs.gnome.org/markmc/2014/02/20/naked-pings/">Naked
  523. Pings</a>,
  524. courtesy of Adam Jackson and Mark McLoughlin.</p>
  525. <h2>Video calls</h2>
  526. <p>(Zoom, Hangouts, BlueJeans etc.)</p>
  527. <p>Next, I’d like to talk about video calls. Doesn’t matter what
  528. technology you’re using. Could be Zoom, Google Hangouts, BlueJeans,
  529. Jitsi, whatever.</p>
  530. <p>And I’d like to address this specifically, given the fact that in the
  531. current pandemic the use of video calls appears to have skyrocketed.</p>
  532. <p>There’s a very good reason to use video calls: they give you the
  533. ability to pick up on nontextual and nonverbal cues from the call
  534. participants. But that’s really the only good reason to use them.</p>
  535. <p>Video calls have a significant drawback: until we get reliable
  536. automatic speech recognition and transcription, they are only
  537. half-on-the-record. Hardly anyone goes to the trouble of preparing a
  538. full transcript of a meeting, and if anything, we get perhaps a
  539. summary of points discussed and action items agreed to. So even if we
  540. keep recordings of every video call we attend, it’s practically
  541. impossible to discern, after the fact, what was discussed in a meeting
  542. <em>before</em> decisions were made.</p>
  543. <p>It is also practically impossible to <em>find</em> a discussion point that
  544. you only have a vague recollection of when it was discussed in a video
  545. call, whereas doing so has a much greater probability of success if
  546. a discussion took place on any archived text-based medium.</p>
  547. <blockquote>
  548. <p>Every video call needs an agenda.</p>
  549. </blockquote>
  550. <p>This is, of course, true for any meeting, not just those conducted by
  551. video call.</p>
  552. <p>A conversation without an agenda is useless. You want people to know
  553. what to expect of the call. You also want to give people the option to
  554. prepare for the call, such as doing some research or pulling together
  555. some documentation. If you fail to circulate those <em>ahead of time,</em> I
  556. can guarantee that the call will be ineffective, and will likely
  557. result in a repeat performance.</p>
  558. <blockquote>
  559. <p>Until machines get intelligent enough to automatically transcribe
  560. and summarise words spoken in a meeting, <strong>write notes and a summary
  561. of every meeting you attend,</strong> and <strong>circulate them.</strong></p>
  562. </blockquote>
  563. <p>Just as important as an agenda to set the <em>purpose</em> of the meeting, is
  564. a set of notes that describes its <em>outcome</em>. </p>
  565. <p>Effective distributed teams understand that the <em>record</em> of a call is
  566. what counts, not the call itself. It is not the spoken word that
  567. matters, but the written one.</p>
  568. <p>From that follows this consequence:</p>
  569. <blockquote>
  570. <p>To be useful, the write-up of a call <strong>takes more time and effort</strong>
  571. than the call itself.</p>
  572. </blockquote>
  573. <p>If you think that video calls are any less work than chat meetings or
  574. a shared document that’s being edited together or dicussed in
  575. comments, think again. The only way a video call is less work, is when
  576. everyone’s lazy and the call is, therefore, useless. Every meeting
  577. needs notes and a summary, and you need to circulate these notes not
  578. only with everyone who attended the meeting, but with everyone who has
  579. a need-to-know.</p>
  580. <p>Here’s the standard outline I use for meeting notes:</p>
  581. <ol>
  582. <li>Meeting title</li>
  583. <li>Date, time, attendees</li>
  584. <li>Summary</li>
  585. <li>Discussion points (tabular)</li>
  586. <li>Action items</li>
  587. </ol>
  588. <p>Putting an executive summary at the very top is extraordinarily
  589. helpful so people can decide if they</p>
  590. <ul>
  591. <li>should familiarise themselves with what was discussed, immediately,
  592. and possibly respond if they have objections, or</li>
  593. <li>only want to be aware of what was decided, or</li>
  594. <li>just keep in the back of their head that a meeting happened, that
  595. notes exist, and where they can find them when they need to refer
  596. back to them.</li>
  597. </ul>
  598. <blockquote>
  599. <p>Once you do meetings right, you no longer need most of them.</p>
  600. </blockquote>
  601. <p>The funny thing is that once you adhere to this standard — and I
  602. repeat, having a full and detailed record is <em>the only acceptable
  603. standard</em> for video meetings – you’ll note that you can actually skip
  604. the meeting altogether, use <em>just</em> a collaboratively edited document
  605. <em>instead</em> of your meeting notes, and remove your unnecessary
  606. synchronization point.</p>
  607. <h3>Video calls for recurring team meetings</h3>
  608. <p>There is one thing that I do believe video calls are good for, and
  609. that is to use them for <em>recurring</em> meetings as as an
  610. opportunity to feel the pulse of your team.</p>
  611. <p>Obviously, a distributed team has <em>few</em> recurring meetings, because
  612. they are synchronization points, and we’ve already discussed that we
  613. strive to minimize those. So the idea of having daily standups, sprint
  614. planning meetings, and sprint retrospectives is fundamentally
  615. incompatible with distributed teams. <em>Aside: in my humble opinion,
  616. this is also why using Scrum is a terrible idea in distributed teams —
  617. not to mention <a href="https://youtu.be/f-ULT_Ic4qk">that it’s a terrible idea,
  618. period.</a></em></p>
  619. <p>However, having perhaps one meeting per week (or maybe even one every
  620. two weeks) in a video call is useful <em>precisely for the aforementioned
  621. reasons</em> of being able to pick up on nonverbal clues like body
  622. language, posture, facial expressions, and tone. If people are
  623. stressed out or unhappy, it’ll show. If they are relaxed and
  624. productive, that will show too.</p>
  625. <p>Note that these meetings, which of course do follow the same rules
  626. about agenda and notes, are not strictly <em>necessary</em> to get the work
  627. done. The team I run has one one-hour meeting a week, but whenever
  628. that meeting conflicts with anything we skip it and divide up our
  629. work via just the circulated coordination notes, and that works
  630. too. The meeting really serves the purpose of syncing emotionally, and
  631. picking up on nonverbal communications.</p>
  632. <h2>Briefing people</h2>
  633. <p>Whenever you need to thoroughly <strong>brief a group of people on an
  634. important matter,</strong> consider using a <strong>5-paragraph format.</strong></p>
  635. <ol>
  636. <li>Situation</li>
  637. <li>Mission</li>
  638. <li>Execution</li>
  639. <li>Logistics</li>
  640. <li>Command and Signal</li>
  641. </ol>
  642. <p>This is a format as it is being used by many armed forces; in NATO
  643. parlance it’s called the 5-paragraph field order. Now I’m generally
  644. not a fan of applying military thinking to civilian life — after all
  645. we shouldn’t forget that the military is an institution that kills
  646. people and breaks things, and I say that as a commissioned officer in
  647. my own country’s army —, but in this case it’s actually something that
  648. can very much be applied to professional communications, with some
  649. rather minor modifications:</p>
  650. <ol>
  651. <li>Situation</li>
  652. <li>Objective</li>
  653. <li>Plan</li>
  654. <li>Logistics</li>
  655. <li>Communications</li>
  656. </ol>
  657. <p>Let’s break these down in a little detail:</p>
  658. <ol>
  659. <li>Situation is about what position we’re in, and <strong>why</strong> we set out
  660. to do what we want to do. You can break this down into three
  661. sub-points, like the customer’s situation, the situation of your
  662. own company, any extra help that is available, and the current
  663. market.</li>
  664. <li>Objective is <strong>what</strong> we want to achieve.</li>
  665. <li>Plan is <strong>how</strong> we want to achieve it.</li>
  666. <li>Logistics is about what budget and resources are available, and how
  667. they are used.</li>
  668. <li>Communications is about how you’ll be coordinating among yourselves
  669. and with others in order to achieve your goal.</li>
  670. </ol>
  671. <p>Note that people <em>always</em> have questions on what they’ve just been
  672. briefed about. They just might not think of them straight away. Give
  673. people time to think through what you’ve just briefed them on, and
  674. they will think of good questions. So always have a follow-up round at
  675. a later time (2 hours later, the following day, whatever), for which
  676. you <em>encourage</em> your group to come back with questions.</p>
  677. <p>Also, use that same follow-up for checking how your briefing came
  678. across, by gently quizzing people with questions like</p>
  679. <ul>
  680. <li>“by what date do we want to implement X?”, or</li>
  681. <li>“Joe, what things will you need to coordinate with Jane on?”</li>
  682. </ul>
  683. <p>This gives you valuable feedback on the quality of your briefing: if
  684. your team can’t answer these questions, chances are that you weren’t
  685. as clear as you should have been.</p>
  686. <h2>Pinching the firehose</h2>
  687. <p>Finally, I want to say a few words about what I like to call pinching
  688. the figurative firehose you might otherwise be forced to drink from:</p>
  689. <blockquote>
  690. <p>The amount of incoming information in a distributed team can be
  691. daunting.</p>
  692. </blockquote>
  693. <p>When you work in a distributed team, since everyone is on their own
  694. schedule and everything is asynchronous, you may be dealing with a
  695. constant incoming stream of information — from your colleagues, your
  696. reports, your manager, your customers. </p>
  697. <p>There is no way to change this, so what you need to do is apply your
  698. own structure to that stream. What follows is not <strong>the</strong> way to do
  699. that, but <em>one</em> way, and you may find another works better for
  700. you. But you will need to define and apply <em>some</em> structure, otherwise
  701. you’ll feel constantly overwhelmed and run the risk of burning out.</p>
  702. <blockquote>
  703. <p>Consider using the <strong>“4-D” approach</strong> when dealing with incoming
  704. information.</p>
  705. </blockquote>
  706. <p>(Hat tip to David Allen)</p>
  707. <p>There’s a defined approach for doing this, which I learned about from
  708. reading <a href="https://en.wikipedia.org/wiki/David_Allen_(author)">David
  709. Allen</a>’s <a href="https://www.goodreads.com/book/show/1633.Getting_Things_Done">Getting
  710. Things
  711. Done</a>. I
  712. don’t know if Allen invented the 4-D approach or whether someone came
  713. up with it before him, but that’s how I know about it.</p>
  714. <p>In his book, David Allen suggests to apply one of the following four
  715. actions to any incoming bit of information:</p>
  716. <ul>
  717. <li><strong>Drop</strong> means read, understand, and then archive. It’s what you use
  718. for anything that doesn’t require any action on your part.</li>
  719. <li><strong>Delegate</strong> is for things that do require action, but not from
  720. you. Make sure that it gets to the right person and is understood by
  721. <em>them</em>, and make a note for follow-up.</li>
  722. <li><strong>Defer</strong> means it needs doing, and it’s you who needs to do it, but
  723. it doesn’t need doing <em>immediately</em>. Enter it into your task list
  724. (to use a very generic term, more on this in a bit), and clear it
  725. from your inbox.</li>
  726. <li><strong>Do</strong> are the (typically very few) things that remain that need to
  727. be done <em>by you, and immediately.</em></li>
  728. </ul>
  729. <p>Following this approach does not mean that you’ll never be overwhelmed
  730. by the amount of information that you need to process. But it’ll
  731. greatly reduce that risk.</p>
  732. <h3>“Drop” rules</h3>
  733. <p>“Dropping” things doesn’t mean ignoring them. You still have to read
  734. and understand what’s in them, and be able to find them later. So:</p>
  735. <ul>
  736. <li>
  737. <p>Never delete things (except spam).</p>
  738. </li>
  739. <li>
  740. <p>Only archive them in a way that that keeps them retrievable in the
  741. future.</p>
  742. </li>
  743. <li>
  744. <p>If there something isn’t understandable to you, think it through and
  745. look for clarification.</p>
  746. </li>
  747. </ul>
  748. <h3>“Delegate” rules</h3>
  749. <p>Delegation obviously requires that there is a person you can delegate
  750. to. This is <em>not necessarily</em> someone who reports to you; indeed, it
  751. might be someone <strong>you</strong> report to. (You might be asked to deal with
  752. something that you have no control over, but your manager does.) So:</p>
  753. <ul>
  754. <li>
  755. <p>Find the right person that can get the task done.</p>
  756. </li>
  757. <li>
  758. <p>Preemptively send them <strong>all</strong> the information that you think they
  759. might need (and that you have access to), rather than relying on
  760. them to ask.</p>
  761. </li>
  762. <li>
  763. <p>Ask them to acknowledge that they have received what they need.</p>
  764. </li>
  765. <li>
  766. <p>Make a note to follow up to see if they need anything else, and
  767. follow through by seeing the task to completion.</p>
  768. </li>
  769. </ul>
  770. <p>Within your own team, <strong>you only ever delegate tasks, not
  771. responsibility.</strong></p>
  772. <blockquote>
  773. <p>Tasks without follow-up and follow-through are a waste of people’s
  774. time.</p>
  775. </blockquote>
  776. <p>Do not delegate, or even define, tasks that you are not prepared to
  777. follow through on. If you handwave “everyone use encrypted email from
  778. now on,” and you’re not even prepared to make that work for your own
  779. email account, you might as well just leave it.</p>
  780. <p>And if you do proclaim an objective or rule and <em>then</em> you find yourself
  781. unable to see it through — <em>this happens,</em> and is no sign of
  782. ineptitude or failure — then loudly and clearly rescind it. It’s far
  783. better for you to visibly backtrack, than to be perceived as someone
  784. whose pronouncements are safe to ignore.</p>
  785. <h3>“Defer” rules</h3>
  786. <p>Deferring simply means that because something you need to do doesn’t
  787. need doing <em>immediately,</em> you can do it at a time that suits your
  788. schedule.</p>
  789. <p>This means that you’ll need to</p>
  790. <ul>
  791. <li>
  792. <p>add the task immediately to some sort of queue (for email, this can
  793. be a folder named “Needs Reply”),</p>
  794. </li>
  795. <li>
  796. <p>make sure to go through that queue at a later time to prioritize
  797. (ideally, right after you’re done with your “Do” tasks, which we’ll
  798. get to in a second),</p>
  799. </li>
  800. <li>
  801. <p>absolutely ensure that you make time to go back and actually do your
  802. prioritized tasks, at a time you consider convenient.</p>
  803. </li>
  804. </ul>
  805. <h3>“Do” rules</h3>
  806. <p>And finally, there’ll be your “Do” tasks — stuff that <em>you</em> need to
  807. do, and do immediately.</p>
  808. <ul>
  809. <li>
  810. <p>Tell people that you’re doing them, because you’ll want to be
  811. uninterrupted. Update your chat status, put some blocked time in
  812. your calendar.</p>
  813. </li>
  814. <li>
  815. <p>Make sure you’ll be uninterrupted. For email, turn off all your
  816. notifications.</p>
  817. </li>
  818. <li>
  819. <p>Plow through all the undropped, undelegated,
  820. undeferred items in your inbox until it’s empty.</p>
  821. </li>
  822. </ul>
  823. <h2>But what about the watercooler?</h2>
  824. <p>The entirety of this talk, up to this point, has focused on
  825. professional communications. And among people unfamiliar or
  826. unexperienced with work in a distributed team, it is often accepted
  827. that teams can communicate well “professionally.” </p>
  828. <p>However, they frequently ask, “what about watercooler chats? What about
  829. the many informal discussions that happen at work while people are
  830. getting some water or coffee, or sit together over lunch? There’s
  831. always so much communication happening at work that’s informal, but is
  832. extremely beneficial to everyone.”</p>
  833. <blockquote>
  834. <p>Office workers often don’t habitually externalise information. A
  835. distributed team that tries that won’t last a week.</p>
  836. </blockquote>
  837. <p>Firstly, many companies where information exchange hinges on coffee or
  838. cafeteria talk simply don’t give a damn about externalising
  839. information. Sure, if 90% of your company’s knowledge is only in
  840. people’s heads, you’re dead without the lunchroom. </p>
  841. <p>But if the same thing happens in a distributed team, it never gets off
  842. the ground. So, if you have a team that’s functional and productive,
  843. <em>because it habitually externalises information,</em> the absence of
  844. chit-chat over coffee has zero negative impact on information flow.</p>
  845. <p>However, you may also be interested in the completely non-work-related
  846. talk that happens over coffee, that simply contributes to people’s
  847. relaxation and well-being.</p>
  848. <blockquote>
  849. <p>People working in distributed teams are often introverts. Or they
  850. simply choose to have their social relationships outside of work.</p>
  851. </blockquote>
  852. <p>I know this might shock some people, but there are plenty of people
  853. who can make a terrific contribution to your company, but who dislike
  854. the “social” aspect of work. They might thrive when being left
  855. alone, with as little small-talk as possible, and ample opportunity to
  856. socialize with their friends and family, away from work.</p>
  857. <p>But if you do have people on your team that enjoy having an entirely
  858. informal conversation every once in a while, there totally is room for
  859. that even in a distributed team. All you need to do is agree on a
  860. signal that means “I’m taking a break and I’d be happy to chat with
  861. anyone who’s inclined, preferably about non work related things” (or
  862. whatever meaning your group agrees on). </p>
  863. <p>This could be</p>
  864. <ul>
  865. <li>a keyword on IRC,</li>
  866. <li>a message to a specific channel, or</li>
  867. <li>(if you want to get fancy) a bot that updates your group calendar
  868. when it receives a message with a particular format.</li>
  869. </ul>
  870. <p>However, as a word of caution, I’ve actually done this with my team
  871. before, and it didn’t catch on — for the simple reason that we almost
  872. never took breaks that happened to overlap. But that doesn’t rule out
  873. that it works on <em>your</em> team, and also there’s always the remote
  874. possibility that two or more people on your team might like to
  875. schedule their breaks concurrently.</p>
  876. <p>What you can <em>also</em> do, of course, is have a channel in which you can
  877. discuss completely random things that are not work related. And if the
  878. rule is that confidential or company-proprietary discussion topics are
  879. off-limits there, the channel might as well be public. It might even
  880. be Twitter.</p>
  881. <h2>The antithesis: ChatOps</h2>
  882. <p>I do want to mention one other thing for balance. There is a complete
  883. alternative framework for distributed teams working together, and it’s
  884. what people refer to as ChatOps.</p>
  885. <p>To the best of my knowledge, the first company to run ChatOps on a
  886. large scale <em>and talk about it publicly</em> was GitHub, <a href="https://youtu.be/NST3u-GjjFw">back in
  887. 2013</a> in a
  888. <a href="https://www.rubyfuza.org/">RubyFuza</a> talk by <a href="https://twitter.com/jnewland">Jesse
  889. Newland</a>.</p>
  890. <p>If a distributed team operates on a ChatOps basis, the interactive
  891. text chat is where absolutely everything happens. </p>
  892. <ul>
  893. <li>
  894. <p>Everyone lives in chat all the time, and all issues, alerts and events are
  895. piped into the chat.<br>
  896. Everything is discussed in the chat, and everything is also
  897. <em>resolved</em> in the chat.</p>
  898. </li>
  899. <li>
  900. <p>Such a system relies on heavy use of chat bots. For example, if an
  901. alert lands in the channel, and the discussion then yields that the
  902. proper fix to the problem is to run a specific Ansible playbook,
  903. you send an in-chat bot command that kicks off that playbook, and
  904. then reports its result.</p>
  905. </li>
  906. </ul>
  907. <p>And this is of course very laudable, because it resolves a major issue
  908. with using chat, which is the classic scenario of something being
  909. discussed in a chat, someone else then going away for a bit and then
  910. coming back saying “I fixed it!”, and nobody else actually
  911. understanding what the problem was. </p>
  912. <p>If you make everything explicit and in-band, in becomes easy, in
  913. principle, to go back to a previously-solved problem that reappears,
  914. and replay the resolution.</p>
  915. <blockquote>
  916. <p>When does ChatOps make sense? Here’s a hint: It’s called Chat<strong>Ops</strong>.</p>
  917. </blockquote>
  918. <p>So can this make sense? Yes, absolutely. Under what circumstances
  919. though? I maintain that this is best suited for when your work tends
  920. to be inherently linear with respect to some dimension. For example,
  921. if your primary job is to keep a system operational versus the linear
  922. passage of <em>time,</em> ChatOps is an excellent approach.</p>
  923. <p>And keeping complex systems operational over time is the definition
  924. of, you guessed it, ops. So ChatOps may be a very suitable
  925. communication mode for operations, but it’s highly unlikely to be
  926. efficient as a generic mode of communication across distributed teams.</p>
  927. <p>And even then I posit it’s difficult to get right, since you’ll have
  928. to curb channel sprawl and threading and other things, but’s that’s a
  929. whole ‘nother talk and indeed a talk for another <em>speaker,</em> because I
  930. don’t lead an ops team.</p>
  931. <h2>To summarize...</h2>
  932. <p>So to summarize, here are my key points from this talk, in a nutshell
  933. — please make these your key takeaways.</p>
  934. <ul>
  935. <li>Distributed teams are better than localized teams — not because
  936. they’re distributed, but because they’re asynchronous.</li>
  937. <li>Avoid anything that makes a distributed team run synchronously.</li>
  938. <li>Use less chat.</li>
  939. <li>Have fewer meetings.</li>
  940. <li><strong>Write. Things. Down.</strong></li>
  941. </ul>
  942. </article>
  943. <hr>
  944. <footer>
  945. <p>
  946. <a href="/david/" title="Aller à l’accueil"><svg class="icon icon-home">
  947. <use xlink:href="/static/david/icons2/symbol-defs.svg#icon-home"></use>
  948. </svg> Accueil</a> •
  949. <a href="/david/log/" title="Accès au flux RSS"><svg class="icon icon-rss2">
  950. <use xlink:href="/static/david/icons2/symbol-defs.svg#icon-rss2"></use>
  951. </svg> Suivre</a> •
  952. <a href="http://larlet.com" title="Go to my English profile" data-instant><svg class="icon icon-user-tie">
  953. <use xlink:href="/static/david/icons2/symbol-defs.svg#icon-user-tie"></use>
  954. </svg> Pro</a> •
  955. <a href="mailto:david%40larlet.fr" title="Envoyer un courriel"><svg class="icon icon-mail">
  956. <use xlink:href="/static/david/icons2/symbol-defs.svg#icon-mail"></use>
  957. </svg> Email</a> •
  958. <abbr class="nowrap" title="Hébergeur : Alwaysdata, 62 rue Tiquetonne 75002 Paris, +33184162340"><svg class="icon icon-hammer2">
  959. <use xlink:href="/static/david/icons2/symbol-defs.svg#icon-hammer2"></use>
  960. </svg> Légal</abbr>
  961. </p>
  962. <template id="theme-selector">
  963. <form>
  964. <fieldset>
  965. <legend><svg class="icon icon-brightness-contrast">
  966. <use xlink:href="/static/david/icons2/symbol-defs.svg#icon-brightness-contrast"></use>
  967. </svg> Thème</legend>
  968. <label>
  969. <input type="radio" value="auto" name="chosen-color-scheme" checked> Auto
  970. </label>
  971. <label>
  972. <input type="radio" value="dark" name="chosen-color-scheme"> Foncé
  973. </label>
  974. <label>
  975. <input type="radio" value="light" name="chosen-color-scheme"> Clair
  976. </label>
  977. </fieldset>
  978. </form>
  979. </template>
  980. </footer>
  981. <script src="/static/david/js/instantpage-5.1.0.min.js" type="module"></script>
  982. <script>
  983. function loadThemeForm(templateName) {
  984. const themeSelectorTemplate = document.querySelector(templateName)
  985. const form = themeSelectorTemplate.content.firstElementChild
  986. themeSelectorTemplate.replaceWith(form)
  987. form.addEventListener('change', (e) => {
  988. const chosenColorScheme = e.target.value
  989. localStorage.setItem('theme', chosenColorScheme)
  990. toggleTheme(chosenColorScheme)
  991. })
  992. const selectedTheme = localStorage.getItem('theme')
  993. if (selectedTheme && selectedTheme !== 'undefined') {
  994. form.querySelector(`[value="${selectedTheme}"]`).checked = true
  995. }
  996. }
  997. const prefersColorSchemeDark = '(prefers-color-scheme: dark)'
  998. window.addEventListener('load', () => {
  999. let hasDarkRules = false
  1000. for (const styleSheet of Array.from(document.styleSheets)) {
  1001. let mediaRules = []
  1002. for (const cssRule of styleSheet.cssRules) {
  1003. if (cssRule.type !== CSSRule.MEDIA_RULE) {
  1004. continue
  1005. }
  1006. // WARNING: Safari does not have/supports `conditionText`.
  1007. if (cssRule.conditionText) {
  1008. if (cssRule.conditionText !== prefersColorSchemeDark) {
  1009. continue
  1010. }
  1011. } else {
  1012. if (cssRule.cssText.startsWith(prefersColorSchemeDark)) {
  1013. continue
  1014. }
  1015. }
  1016. mediaRules = mediaRules.concat(Array.from(cssRule.cssRules))
  1017. }
  1018. // WARNING: do not try to insert a Rule to a styleSheet you are
  1019. // currently iterating on, otherwise the browser will be stuck
  1020. // in a infinite loop…
  1021. for (const mediaRule of mediaRules) {
  1022. styleSheet.insertRule(mediaRule.cssText)
  1023. hasDarkRules = true
  1024. }
  1025. }
  1026. if (hasDarkRules) {
  1027. loadThemeForm('#theme-selector')
  1028. }
  1029. })
  1030. </script>
  1031. </body>
  1032. </html>