|
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667 |
- title: The Minimally-nice Open Source Software Maintainer
- url: https://brson.github.io/2017/04/05/minimally-nice-maintainer
- hash_url: f86b54bf25411c04eb538befd6ebc856
-
- <p>Being involved in open source software is rewarding, yeah? You start
- off contributing to your favorite project, and it feels so
- heartwarming when that project’s maintainers recognize your
- effort. Then a few years later you somehow end up responsible for that
- project, and maybe some satellite projects, and people are clamoring
- for your attention, and your inbox is never empty, and it’s exhausting
- and terrifying, and the skills necessary to cope with all the
- personalities involved are entirely different from the skills you used
- to get your foot in the door in the first place.</p>
-
- <p>I love creating cool things, and releasing cool things, and receiving
- praise for cool things. To create ever cooler things though one needs
- to multiply their manpower, get help from others - to <em>collaborate</em>.
- Ugh. For me communicating with others is frightening, stressful,
- unpleasant, demoralizing, depressing. As the maintainer of a number of
- projects related to the <a href="https://www.rust-lang.org">Rust programming language</a>, I want to see
- my software grow and thrive, so must continually redouble my efforts
- to productively engage with their users and contributors.</p>
-
- <p>Any day where I am actively maintaining my software I might respond to
- dozens of messages online. It’s so much effort. But amidst all that
- work, it actually only takes a small amount of consistent effort to
- nurture a cooperative environment, one that makes participants feel
- appreciated, builds support from your userbase, encourages
- contributions, and reinforces a positive culture. Still, even though
- it’s quite simple to treat others right, it’s not simple to do it
- consistently: it requires discipline to build good habits. For me it’s
- a struggle.</p>
-
- <p>Here I’m going to describe a few guidelines on how to respond to
- people on bug reports, pull requests, and other forums. I don’t
- consider myself to be good at this; I definitely don’t follow my own
- advice consistently. But what I’ve scribbled down here reflects my
- basic gameplan for dealing with people, and having a clear gameplan
- makes it easier to rip through your responses to both the pleasant and
- the horrifying, quickly and correctly. My understanding of this
- subject is always evolving, but this is what’s near the top of my
- mind as of mid-2017.</p>
-
- <p>This simple advice might sound patronizing. And you might have
- different opinions about what it means to be nice to people. That’s
- fine. Perhaps consider whether you are following your own gameplan
- consistently, and how you might improve it.</p>
-
- <p>This is divided into two sections:</p>
-
- <ul>
- <li><a href="#a-case-study">A case study</a>. My lamentations at being a heartless
- jerkwad.</li>
- <li><a href="#the-techniques">The techniques</a>. Common techniques for dealing
- with people, as applied to open source software.</li>
- </ul>
-
- <p>If you just want a TL;DR for seven techniques of the minimally-nice
- open source software maintainer, then <a href="#summary">jump straight to the
- summary</a>.</p>
-
- <p><a name="a-case-study"/></p>
- <h1 id="a-case-study">A case study</h1>
-
- <p>The impetus for writing this was <a href="https://github.com/rust-lang/rfcs/pull/1644#issuecomment-224752975">a comment I made</a> on a recent
- Rust RFC. As usual, this was one of many threads I responded to that
- day. And as happens with some alarming frequency, I spent a large
- portion of the night regretting some of the things I said, and
- thinking about what I should have said differently. I’ll reproduce it
- here so you don’t need to click the link:</p>
-
- <blockquote>
- <p>I like the direction of this RFC generally.</p>
- </blockquote>
-
- <blockquote>
- <p><code class="highlighter-rouge">--explain</code> is a stable compiler interface. How can we change it? I
- agree that <code class="highlighter-rouge">--explain</code> is a sweet name for this functionality, but I
- think we need to use a different one.</p>
- </blockquote>
-
- <blockquote>
- <p>It’s not clear to me what the fate of error codes is here. My
- impression is that you are proposing to remove them, but your images
- contain the current –explain E0002. Can you make this more clear,
- and if you are removing error codes can you remove them from the
- graphics?</p>
- </blockquote>
-
- <blockquote>
- <blockquote>
- <p>“Famous programmers like John Carmack have praised the Elm error
- format.”</p>
- </blockquote>
- </blockquote>
-
- <blockquote>
- <p>John Carmack’s fame doesn’t really have any bearing on the validity
- of the proposal.</p>
- </blockquote>
-
- <blockquote>
- <p><em>Also, I don’t think RFCs should be giving props to other
- contributors in the summary. When creating the RFC process we made
- an explicit decision not to include author information, to avoid
- making RFC authorship itself an incentive (I think). If authorship
- is something that should be included in RFCs then the process itself
- should be modified to include that metadata, including crediting the
- actual author, not just their collaborators. If giving credit in the
- RFC text is something we want to encourage, then I don’t know that
- the summary is the place for it. The summary is for summarizing the
- content of the RFC.</em></p>
- </blockquote>
-
- <p>I’ve emphasized the part that haunted me most.</p>
-
- <p>I wrote this at the end of the day, in a hurry, between meetings. This
- was a proposal that I had opinions about, and I wanted to make sure
- they were heard. But it has to be done in the right way.</p>
-
- <p>Really, this comment wasn’t horrible. You’ve seen much worse I
- hope. But it bothered me. A lot. I didn’t follow my gameplan. I knew I
- had made a mistake when the author of the RFC messaged me privately,
- saying, more-or-less:</p>
-
- <blockquote>
- <p>jonathandturner: :( why don’t you want to credit people for their
- work?</p>
- </blockquote>
-
- <p>My comment on the thread sounded like I wanted to deny the
- contributors credit for the RFC. Is that really what I wanted? Well,
- honestly I am an overflowing flagon of resentment and spite, so
- perhaps this comment in the moment was a true reflection of my
- blackened heart, but after some back and forth with @jonathandturner,
- and some further reflection, I understood this was a dumb position to
- hold - being extremely generous with credit is one of the easiest and
- most powerful techniques for building community. Outright suggesting
- we deny credit looks petty and hostile.</p>
-
- <p>Let me go through my comment line by line and excoriate it.</p>
-
- <blockquote>
- <p>I like the direction of this RFC generally.</p>
- </blockquote>
-
- <p>I’m relieved that I started the comment this way, considering how
- negative the comment ended. This isn’t a fantastic opener, but at
- least it’s positive. Showing others appreciation is one of the simplest
- techniques for dealing with people. What I wrote here is just about
- the minimum appreciation I can express. It’s saying I like what they
- are thinking. It’s obviously setting the stage for less positive
- feedback later, but we don’t need to worry too much about that - even
- the slightest effort at showing appreciation tends to help soften
- interactions, though there is a risk of being seen as patronizing,
- particularly if all your praise is as curt as this.</p>
-
- <p>So this could have been better in an obvious way, just by expanding on
- what I liked about it. There were a lot of great facets to this RFC:
- the beauty and clarity of the proposed error messages; showing images
- of the proposed errors, etc. It’s a good RFC - I could dig out lots of
- little things to say positively about it. But doing so takes time and
- effort. I was in a hurry here to say the things I wanted to say, and
- didn’t take the time, but perhaps I should have. The more negative
- your main points are, the more worthwhile it is to soften them with
- positivity. And it’s prudent to show that positivity sometimes to
- avoid being a complete jerk.</p>
-
- <p>Another simple thing I could have done is thanked him for his
- work. When you work hard on something and then finally unveil it, it’s
- super satisfying when somebody thanks you, recognizing that work. We
- all long to feel appreciated. I might instead have opened with</p>
-
- <blockquote>
- <p>Thanks @jonathandturner! I’m glad to see some movement in this
- area. This is a super important proposal, the design looks well
- thought out, and I love how well composed it is. It’s obvious you’ve
- put a lot of effort into it.</p>
- </blockquote>
-
- <blockquote>
- <p>I like the direction of this RFC generally. The error messages are a
- huge improvement over what we have today. The way you are using
- colors to emphasize the different focal points of the errors makes
- things a lot more readable. And good idea including the images of
- your proposed messages in the RFC - that makes it simple to
- evaluate.</p>
- </blockquote>
-
- <p>OK, that’s really loading up the praise. And it’s all true. The above
- took me a few minutes to come up with, which is a fair bit of work
- just to grease the wheels. One might do more or less depending on the
- situation. Now that we’ve pumped him up we’re ready to crush his hopes -
- er, offer gentle, constructive criticism.</p>
-
- <p>So back in reality, I didn’t actually write all that - I wrote the
- impulsive thing, then tossed and turned all night regretting it. To
- make up for it the next day I posted <a href="https://github.com/rust-lang/rfcs/pull/1644#issuecomment-224968147">this followup</a>, reproduced
- here:</p>
-
- <blockquote>
- <p>@jonathandturner my comments could have been more constructive. Let
- me respond to myself.</p>
- </blockquote>
-
- <blockquote>
- <blockquote>
- <blockquote>
- <p>“Famous programmers like John Carmack have praised the Elm error
- format.”</p>
- </blockquote>
- </blockquote>
- </blockquote>
-
- <blockquote>
- <blockquote>
- <p>John Carmack’s fame doesn’t really have any bearing on the
- validity of the proposal.</p>
- </blockquote>
- </blockquote>
-
- <blockquote>
- <p>Maybe just change ‘fame’ to something more relevant, like
- ‘well-respected’, something that better indicates why his opinion is
- important.</p>
- </blockquote>
-
- <blockquote>
- <blockquote>
- <p>Also, I don’t think RFCs should be giving props to other
- contributors in the summary. When creating the RFC process we made
- an explicit decision not to include author information, to avoid
- making RFC authorship itself an incentive (I think). If authorship
- is something that should be included in RFCs then the process
- itself should be modified to include that metadata, including
- crediting the actual author, not just their collaborators. If
- giving credit in the RFC text is something we want to encourage,
- then I don’t know that the summary is the place for it. The
- summary is for summarizing the content of the RFC.</p>
- </blockquote>
- </blockquote>
-
- <blockquote>
- <p>I phrased this too strongly. I just had a sudden observation that
- we’ve developed ad-hoc ways to credit people that doesn’t fit into
- the process as implemented. I should have phrased this more like
- ‘maybe we should reconsider how to give credit in RFCs’. RFC process
- is organic so it may be perfectly fine to do it like this (author
- credit in the commit log, additional credits in the summary), but it
- is awkward. And I do believe we made an intentional decision not to
- credit people, and if that is changing it is important to
- acknowledge it.</p>
- </blockquote>
-
- <p>That was … ok, I’m still not particularly happy with it. It still
- appears a bit defensive of my dumb position. I wish I could do it
- again. I’ll never be happy. I’ll never, ever be happy.</p>
-
- <p>But the point is that it’s best to admit your mistakes, to yourself
- and others: Dale Carnegie recommends that “if you’re wrong, admit it
- quickly and emphatically”. People love to be right, so if you can
- admit that you are wrong and they are right, that can inspire great
- cooperation. And it usually doesn’t require any sacrifice at all to
- admit you are wrong besides getting over your own pride.</p>
-
- <p><a name="the-techniques"/></p>
- <h1 id="the-techniques">The techniques</h1>
-
- <p>So this relatively minor episode caused me to reevaluate how I
- communicate online. It’s not like I don’t know how to be nice. I
- believe that I do, but sometimes I forget momentarily. So here, to
- reinforce my own good behavior, and hopefully for your benefit, I’ve
- traced through my basic gameplan for responding to people online.
- When I stick to this plan things mostly go well, the people I
- encounter feel good about Rust and their association with it, and I
- feel relatively ok-ish about myself.</p>
-
- <p>The techniques here apply to any open source venues, like pull
- requests, issue trackers, mailing lists and forums.</p>
-
- <p><a name="respond-quickly"/></p>
- <h2 id="respond-quickly">Respond quickly</h2>
-
- <p>Immediately after users and contributors reach out to you is when they
- are most motivated to help you. Simply getting a quick response can
- make a frustrated user’s day. As a maintainer I’ve frequently seen
- expectant users express their appreciation: ‘thanks for the quick
- response!’. We know that other people’s time is valuable because our
- own time is valuable. By responding to an inquiry quickly we
- demonstrate that we respect the time they put into e.g. filing a bug
- report, and that we are sacrificing our time to help them. Even if I
- can’t think about a particular issue right now, and particularly if I
- <em>know</em> I’m not going to get to it any time soon, I will sometimes post
- a quick acknowledgement and validation of their concerns, like “thanks
- for the report. This does look troubling. I’m afraid I won’t be able
- to look into this soon, but help is appreciated”, etc.</p>
-
- <p>The longer you wait to respond to a contributor the less likely they
- are to stay engaged: only the most hearty contributors will return to
- the table after being ignored for a year. Sadly, it’s all too common
- that I come across an issue where the most recent comment is from
- someone seeking advice, long, long ago. Those contributors are lost
- forever, and their potential contributions with them.</p>
-
- <p>For me this is one of the hardest habits to maintain. The neverending
- crush of issues and threads in Rust is entirely overwhelming. I’d much
- rather I didn’t have to face other people’s problems constantly - I
- have so many of my own. It’s impossible to follow everything going on
- in Rust, so in practice I tend to restrict the threads I follow to
- specific areas, and to those people who are pinging me directly. There
- are long stretches where I just can’t face the endless tide of other
- people needing assistance, where I will just willfully ignore my
- inbox. I don’t recommend that. Better to be responsive.</p>
-
- <p>How quick is quick enough? 3 days. How scientific is this number? It’s
- not. You should respond as quick as you can, but reasonable people
- will give you a weekend without getting bent about it.</p>
-
- <p><a name="give-thanks"/></p>
- <h2 id="give-thanks">Give thanks</h2>
-
- <p>People like to feel appreciated. It’s a universal desire. And
- appreciation is something it costs us little to give, to spread about
- like parade candy. If you put just a moment’s thought to it, I know
- you can see something good in every person and every situation.</p>
-
- <p>The mere act of submitting a patch is awe-inspiring: another person
- cares enough about our project that they took the time to understand
- how it works, fix our problem, package it up, and submit their work
- for public criticism. That’s amazing. Do you remember the first patch
- you ever submitted upstream? I bet you were apprehensive. It’s a
- crucial moment that can determine the future relationship between the
- contributor and the project.</p>
-
- <p>So the first thing to do before mounting a response is to dig deep
- into your reserves of universal love, kindness, and compassion, and
- seek something to be thankful for. The more specific you can be the
- more it shows you care. Did they provide a reproducible test case in
- the issue report? Damn, that took some effort! Did they write tests
- for their patch? Noway! Usually I have to ask for those! If you keep
- thinking about it you’ll discover there’s a great deal to say thanks
- for: “Thanks @AHumanWithFeelings! I’ve been wanting to fix this
- issue for so long. I’m glad somebody finally stepped up to write a
- patch. This looks lovely!”</p>
-
- <p>Of course, not every encounter demands laying it on thick, but do say
- “thanks”. Even trivial patches that can merge without any feedback
- deserve some comment: just hit the merge button and write, “thanks!”,
- and they’ll feel good about the small part they played in your
- project’s ongoing success.</p>
-
- <p><a name="pay-a-compliment"/></p>
- <h2 id="pay-a-compliment">Pay a compliment</h2>
-
- <p>One of the primary duties of a software maintainer is to review
- others’ work. Every day, burning down the endless patch queue. And the
- bigger the project the more gruelling the work. Review is where
- everything comes together; it is the make-or-break point for
- contributors, their work, and their motivation to keep coming back.</p>
-
- <p>Under the exhausting crush of review responsibilities it’s easy to get
- tunnel vision; to bee-line for the shortest route to the end, zeroing
- in on the problems to be fixed, and moving on to the next patch.</p>
-
- <p>When you do this though you risk discouraging your contributor. The
- more work a patch needs the more the critiques pile up, and it can
- easily, and unintentionally, result in an avalanche of
- negativity. This is particularly likely to affect new contributors,
- who are least likely to understand project norms, and most likely to
- need guidance.</p>
-
- <p>A well-known technique to soften the weight of criticism is to pair it
- with praise. You’ve probably heard of the “compliment sandwich”:
- surrounding the criticism - the meat of your response - with a soft
- and squishy bun of praise. The compliment sandwich is considered so
- delectable because it is simple and effective. Before you launch into
- <em>what you really want to say</em>, try to look for something positive to
- point out first.</p>
-
- <p>When I review a patch I usually do it in two passes: first I skim
- through it with an open mind, with no preconceptions of what I expect
- to see. I’m trying to get in their head and see the solution from
- their point of view; and in particular trying to find things to like
- about their solution. Does the patch display good intuition even while
- getting the details wrong? That’s a good starting point. Did they do
- something clever that you hadn’t considered? Does their work
- demonstrate they’ve read the project’s contribution guidelines in a
- way most contributors don’t? You probably have a host of things you
- look for to indicate quality, as specific to your project. Make note
- of them as you read the patch, <em>and say them first thing in your
- response</em>. Myself, I always appreciate when a contributor writes <em>any
- tests at all</em>, and I adore contributors who write excellent tests. And
- I say so. To take this technique to the next level, be on the lookout
- for indicators of the contributor’s own values, and compliment them on
- things they are likely to take special pride in.</p>
-
- <p>By reading the whole text once I additionally reduce the chance of
- coming to mistaken conclusions, or leaving comments based on
- incomplete information. Often I’ve not considered a work as a whole
- and left a comment, then moments later realized that comment was
- mistaken and had to correct myself. Likewise, I find it frustrating
- when reading inline comments about my own work based on incorrect
- assumptions, and which I felt I had made clear if the respondent had
- only read further.</p>
-
- <p>So after I’ve done the first pass in a spirit of expansive generosity,
- and begun composing my review with praise, then I go back for the
- second pass and do the detailed review. Even here though I try to note
- positive things as well as things that need to be changed, etc.</p>
-
- <p>I’ve focused on reviews here, but the same applies to all
- correspondence. Bug report includes a reduced test case?
- Awesome. Forum post is well thought out and polite? Halleluja. Always
- be looking out for nice things to say about your peers and their work.</p>
-
- <p><a name="say-yes"/></p>
- <h2 id="say-yes">Say “yes”</h2>
-
- <p>In the midst of an internet argument it’s easy to lose sight of the
- humanity of the individual on the other side of the computer
- monitor. Your pulse quickens, your temperature rises, mind races. You
- know you are right, technically, morally. Whatever, you are right;
- they are wrong. Wrong, wrong, wrong, and you are going to prove it
- right now.</p>
-
- <p>But before you fly off the chain, prove your undeniable superiority,
- and prove that <em>they are wrong</em>, let me suggest instead that you do
- something better, that you do the opposite: that you <em>prove they are
- right</em>.</p>
-
- <p>Imagine the most exciting brainstorming session you ever had: you spit
- out a brilliant idea - your partner loves it! They respond
- enthusiastically by building on your idea. The conversation spirals
- ever upward in joyous rapture. It’s an amazing feeling, being on the
- same wavelength. By the end up the night you feel thrilled and
- intoxicated. That’s the power of positivity.</p>
-
- <p>It’s so rare. When it happens we want to capture that moment and save
- its precious essence forever. That’s the kind of magic you want your
- contributors to feel every time they file an issue.</p>
-
- <p>The opposite though is far more common, and it’s the death of useful
- discourse: “you’re wrong”, “that’s a bad idea”, “I call bs”, “meh”,
- “false”, etc. They all amount to a big fat “no”, and they all make the
- recipient feel disrespected and generate ill will. Bad vibes. This is
- the worst way to open a productive conversation, and people do it all
- the time. It’s shocking how tactless smart people can be. Such direct
- negativity erects a brick wall fortified with turrets and kettles of
- boiling oil in the middle of a conversation.</p>
-
- <p>“No” is a cardinal sin of persuasive argumentation. Don’t do
- it. Don’t do it. Don’t do it. No, no, no!</p>
-
- <p>Instead, say “yes” as fast as you can, and in every way you
- can. Literally just say “yes” first thing, then figure out what useful
- affirmation you can follow with to support that “yes”. If “yes” is too
- on-the-nose for your taste then there are a billion ways to
- paraphrase. “Yeah” is a great casual option, and my favorite. Follow
- that with a comma, “yeah, it’s true that …”, but there are so many
- other more subtle ways to drop a huge positivity bomb at the outset of
- your response: “totally”, “you’re right about …”, “indeed!”. If you
- put your mind to it you can spend a whole paragraph just saying “yes”.</p>
-
- <p>In the end, even if the solution is much different than their original
- proposal, by chaining your good ideas to their good ideas, they will
- feel successful. Per master thinker Blaise Pascal, “people are
- generally better persuaded by the reasons which they have themselves
- discovered than by those which have come into the mind of others.”</p>
-
- <p>Affirmation: it’s the secret weapon against belligerent jerkwads.</p>
-
- <p><a name="be-clear-about-what-you-expect"/></p>
- <h2 id="be-clear-about-what-you-expect">Be clear about what you expect</h2>
-
- <p>For contributors to stay engaged they need to know what’s next, what
- is expected of them. This applies to every level of the project, from
- bug reports to pull requests. If you want something, say so directly!
- And if you don’t want something, suggest concrete and viable
- alternatives. For the most part, if you are in a position of
- authority, contributors are <em>desperate</em> for you to give them
- direction. Leaving your desires ambiguous is one of the easiest ways
- to destroy contributors’ motivation and lose their manpower.</p>
-
- <p>This applies especially in two places: on the bug tracker, and during
- reviews. In both cases there is frequently a critical moment when you
- have the opportunity to provide clear direction, and though it
- requires some effort, failing to do so leaves a vacuum, and thus
- leaves potential precious manpower on the table.</p>
-
- <p>Your issue tracker, if it’s like Rust’s, is filled with bugs and
- feature requests that you would love to fulfill; but you will never,
- ever get to them yourself, not even if you live forever. These
- bugs frequently persist in a state of unknowing, where the solution
- is unclear, for weeks, months, years, accumulating debate and
- discussion about how to move forward. But eventually something clicks
- into place, and an acceptable solution becomes known to you. For
- simple bugs this moment can be immediately when it is filed; for more
- nuanced bugs it can take a long time. But when it happens, you have
- the opportunity to clear the way for contributors.</p>
-
- <p>On any bug where there is an acceptable solution, make it crystal
- clear what that solution is, and that <em>help is wanted</em>. Contributors
- are sometimes just waiting for a signal indicating how they can
- help. The more detail you can provide the better. Bugs with clear
- direction have 100% better chance of drawing contributions than those
- without. The larger your project, and the larger your contributor
- base, the more important it is that you consistently provide
- direction, and that contributors have a way to find the bugs that have
- reached this inflection point.</p>
-
- <p><a name="admit-your-mistakes"/></p>
- <h2 id="admit-your-mistakes">Admit your mistakes</h2>
-
- <p>Like variable bindings in a great many programming languages, our
- reality is supremely mutable. Conditions change, facts change, and so
- does our perception and understanding. Being wedded to past
- understanding and past resolutions is dogma. On the other hand,
- confronting change honestly and efficiently is a common trait of
- successful individuals and organizations. The agility to let old
- opinions go and steer a new course helps organizations stay relevant
- in the face of shifting fortunes, and helps us navigate difficult
- social situations in our daily lives.</p>
-
- <p>Differences of opinion are the root of many arguments. People make up
- their minds, assert themselves, refuse to listen to counterpoints,
- become angry, develop personal animosity toward those that don’t
- agree, and the conversation either reaches an ugly standstill, or
- devolves into a passionate feud. It’s a common failure mode, and we
- want to prevent it from happening as early as we can.</p>
-
- <p>Just like we want to say “yes”, and acknowledge others’ great ideas,
- it’s beneficial to look for situations where we can let go of our own
- ideas, our own dogma. It’s a hard thing to do: it’s so tempting to
- stick to what is comfortable; to force those difficult decisions that
- have already been decided to stay in the past; to never let go of our
- pride and admit we were wrong, or made mistakes.</p>
-
- <p>But it gets easier with practice, and you might even come to find that
- admitting your mistakes brings relief - it feels liberating to let
- things go, to get that weight off your mind.</p>
-
- <p>I find that there are very few designs and opinions that, when I look
- closely, I am deeply wedded to, and most often when somebody is angry
- at something I have done or some decision I have made, it is trivially
- true that I’ve made a mistake. Sometimes these are technical mistakes,
- and I can let them go by saying “yes, I see what you mean now. That
- was the wrong call. Are you interested in submitting a patch to fix
- it?”. Sometimes it’s more of a social or political mistake, that I
- haven’t expressed my motivations or intentions clearly and the other
- person is surprised and disappointed that some outcome is not what
- they expected. In these situations I try to acknowledge that the
- result has the downsides they’ve identified, and apologize that it
- doesn’t suit them, and move on. Note though that it’s best to avoid
- the sorts of backhanded non-apologies we often see from politicians
- (e.g. “I’m sorry you are angry”). Everybody sees through bullshit, and
- it’s more useful to focus on your own thoughts and feelings instead of
- mindreading others’.</p>
-
- <p><a name="be-effusive"/></p>
- <h2 id="be-effusive">Be effusive</h2>
-
- <p>This is another trick that is super-effective! A unique technique of
- the internet age, I’ve only begun to acknowledge its power recently.</p>
-
- <p>Don’t hesitate to go overboard with superlatives and punctuation:
- exclamation marks where they shouldn’t be, over-the-top adjectives,
- cute emoticon and emoji. I know that it took me a long time to come
- around to this point of view. It’s just bad writing to throw in
- exclamation marks and superfluous words, right? And emoji aren’t even
- words…</p>
-
- <p>“Oh, wow, thank you so much! 💖”</p>
-
- <p>Truth is that on the internet this is not bad writing, at least for
- one-on-one communication. It is effective writing. It’s well
- understood that conveying tone on the internet is <em>hard</em>:</p>
-
- <p>“Thanks.”</p>
-
- <p>What does that period mean? It looks so gruff. Are they pissed at me?!
- Are they having a bad day? On the internet the simple period can
- appear sarcastic, or angry. It’s so neutral that people will project
- whatever emotions they want on it. One must go out of their way to not
- only get their meaning across but also the tone - and for our purposes
- the tone we want is almost always one of abundant positivity and
- enthusiasm.</p>
-
- <p>To help you kickstart this habit, here’s a list of some of my
- favorite superlatives, emoticon, and emoji, when applied to
- technical communication in open source software communities:</p>
-
- <ul>
- <li>”!” (exclamation mark)</li>
- <li>“super-“</li>
- <li>“totally”</li>
- <li>“amazing”</li>
- <li>“awesome”</li>
- <li>“really”</li>
- <li><3 (heart)</li>
- <li><3 <3 <3 (triple-heart!)</li>
- <li>:-D (big-ol’ grin)</li>
- <li>😁 (grinning face with smiling eyes)</li>
- <li>😍 (smiling face with heart-shaped eyes)</li>
- <li>💖 (sparkling heart)</li>
- </ul>
-
- <p>These are just the ones in my own toolbag. There are so many others,
- and there’s lots of room for creative expression here. The younger you
- are the more of these weapons you probably have in your arsenal, what
- with all the texting and instagramming and tweeting. Deploy them
- without hesitation.</p>
-
- <p>There are limits to good taste here, but you probably have to decide
- them for yourself. Personally, I never use more than one exclamation
- point; two exclamation points is the epitome of tackiness 😜. And as a
- child of the 90’s I’m consistently tempted to sneak in a few
- “radical”s and “bodacious”es, to embody my life-long wish to become a
- Ninja Turtle, but sadly those adjectives seem to be out of style for
- the present moment. The time will come though.</p>
-
- <p>Just as a big smile can brighten someone’s day in the physical world,
- a little bit of 😍 goes a long way in the virtual world.</p>
-
- <p><a name="summary"/></p>
- <h1 id="summary">Summary</h1>
-
- <p>So that’s all you need to make everybody happy, and make everybody
- love you! Now you know the secret and you will never fail again.</p>
-
- <p>Ha, ha, no. No, not really. Not everything goes smoothly just by being
- nice. Some people are deeply broken. So many messed up people (maybe
- I’m one of them - maybe you are too). Typical social wheel-greasing
- doesn’t always work with them; they are hell-bent on sowing chaos,
- even if they don’t know it. The guidelines here are still applicable
- to these cases, because at least other, more reasonable, people will
- see that you are doing your best, but truly dealing with them
- effectively is a complex and uncertain matter. For another day.</p>
-
- <p>Some of what I’ve said here may have sounded sarcastic, I know. That’s
- me. I’m a deeply cynical individual, but I’m working on it. Effective
- communication though needs to be genuine, empathetic, and respectful.
- Everybody sees right through bullshit. Work on your empathy, work on
- being genuinely nice, but until then, fake it ‘till you make it. If I
- practice good communication habits consistently, presumably at some
- point I will become a good person. That’s how it works, right? I so
- want to be a good person.</p>
-
- <p>In summary, do these things if you want to <em>appear to be</em> nice, and
- also if you want to <em>actually be</em> an effective open source software
- maintainer:</p>
-
- <ul>
- <li><a href="#respond-quickly">Respond quickly</a></li>
- <li><a href="#give-thanks">Give thanks</a></li>
- <li><a href="#pay-a-compliment">Pay a compliment</a></li>
- <li><a href="#say-yes">Say “yes”</a></li>
- <li><a href="#be-clear-about-what-you-expect">Be clear about what you expect</a></li>
- <li><a href="#admit-your-mistakes">Admit your mistakes</a></li>
- <li><a href="#be-effusive">Be effusive</a></li>
- </ul>
-
- <p>By consistently exhibiting a few simple behaviors, one can at least
- look like a kind and decent person. Maybe someday we all actually will
- be.</p>
-
- <p><em>With respects to Dale Carnegie’s <a href="https://en.wikipedia.org/wiki/How_to_Win_Friends_and_Influence_People">How to Win Friends and Influence
- People</a>. Read that.</em></p>
|