Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Code Review @ Tinderbox

Code Review @ Tinderbox

Photo attributions:

http://www.flickr.com/photos/mikebaird/9259370894/
http://www.flickr.com/photos/vauvau/3428879662/
http://www.flickr.com/photos/msvg/5008022120/sizes/o/
https://www.flickr.com/photos/36375340@N04/3506624983
http://www.flickr.com/photos/45034206@N06/6563902327/in/photolist-b12HtM-91MLMH-dK3MmS-hLkMfK-hLn3YL-9aepz9-edc78o-7KGDXE-cfbDys-a1V773-hsZD7a-ehLCcr-8nPQgJ-jRZ5iv-8SsgcY-8Qr4Su-9gcMES-8tPS4y-byWrqE-e4C8TE-dMvrsF-9ekUY1-aFNxbz-e7npo8-bvtLLT-aXP24T-aBvZeX-djdVZR-bvtJiK-89XKjr-d4RDZQ-e8UjHm-9D6KyY-aCExgT-8p6khB-8XDYc9-bWtPRn-8qCCLW-8TbPLh-7En8gH-aAgeLT-b4uAFk-9dUQLv
http://www.flickr.com/photos/12567713@N00/376139480/
http://www.flickr.com/photos/bionicteaching/11594441195/
http://www.flickr.com/photos/17425845@N00/415430166/in/photolist-CHbV5-CHbVH-2AZt2Y-2AZt3L-3pQjuR-4AepNy-4EE78S-4KvaL8-4ZfBrK-5DCgec-5M8w1M-5McLis-6Pgw5u-9kJZKK-7MXESx-7MXFxK-7MXNEk-7MXQzx-f7fKX2-cG2v5G-8LrCiq
http://www.flickr.com/photos/9892584@N04/5688094899/in/photolist-9ECYrH-eg1uZ3-7LMtDy-d2anmh-d2an5N-d2amPd-d2ansd-d2amvY-d2anyy-d2ando-d2amXG-d2bMaf-d2bzdA-d2bzi7-dnD75W-dnD6Yw-dnD2un-dnD2qe-dnD73h-fw67uw-aBGo9r-8hfVrM-ca1yky-ca1rG5-ca1x2C-ca1n57-ca1vJ7-ca1sHE-ca1tvj-ca1qXs-ca1mn1-ca1v1b-ca1pvq-ca1wrU-ca1nQ3-ca1oJm-ca1kwy-ca1uhs-ca1qc7-ca1jFE-ca1xKQ-8RxbKB-bPMuXZ-f5Dieu-jdtzmq-e2FbPP-8WqufS-fZhKVe-9a3RCt-8YXuYR-8jmRza
http://www.flickr.com/photos/bike/4299152140/
http://www.flickr.com/photos/mdgovpics/11072727373/
http://www.flickr.com/photos/semarr/270168671/
http://www.flickr.com/photos/glenbledsoe/6252695484/
http://www.flickr.com/photos/59195512@N00/5024648356/in/photolist-8E1CUd-8FxC6v-8B4RKp-8d6ro3-7U5ekQ-bNoS1R-9yXMV4-cwtc2d-dUMbG3-85GG1T-d5cEoh-aU4zTt-8yp8XH-aUvq7g-dS1Ab6-94aqDp-9Bg8rZ-9zLicQ-bhvmMa-bpAQFw-fB1YmQ-8nCJvc-a4vfUN-8hsB7A-dsg8xa-bV7Fc8-d4MQ5b-aUbL8i-dgwjFw-9a8Bo5-7X2DfD-9VQPuK-9VTDsu-868A5V-ebmZs8-9VQPqK-9WPQKx-hWEjyR-8aZUSU-doBf4D-ffmJLR-ffB7cm-e4eHCr-i4ydqj-coTaVE-fypu6E
http://www.flickr.com/photos/8176740@N05/3829280573/in/photolist-6Qo4GR-8dL4oi-9KQYhu-ajXfCi-jXMacP-8kvX5v-jXMhue-jXPH87-jXPDYm-jXMfUF-jXMd4v-jXMW2M-jXM9Tx-jXMgB2-jXMg2z-jXMRJ8-jXMTN8-jXPG29-jXMecT-jXPAyL-jXMgUX-jXN2h6-jXM8Qv-jXMfpc-jXN264-jXMSKg-jXMUCz-jXM888-jXPHc5-jXMUgn-jXPBhj-jXMStp-jXMdAT-jXPJvs-fohHDZ-fJweqX-hn7r8x-8k6uW3-ajXep6-ajXfy4-f6nKvm-ajXaAt-e1V571-bHm4NR-ak14so-ajXeCR-dWyLMK-dWyLMB-bA51qH-bpUSMD-bpUSZB
http://www.flickr.com/photos/hiperactivo/68385559/
http://www.flickr.com/photos/suburbaneyecare/7269957612/
http://www.flickr.com/photos/24029425@N06/2403405698/in/photolist-4Eo5Mh-4U3CTx-4W7PK9-531uyR-56pWKz-56QKvJ-5wftej-5yaAzK-5KCGRT-5Nv3Eu-5Vmxut-5VqUuG-69RoXs-6eKkyY-6o9NLn-6oDvrg-6oHEyq-6oHFp3-6pfTZ8-6t2mJd-6x5MjZ-6Axsn4-6CQZJu-79X83X-7h9LG8-7hdJ7E-7hdJRC-7hdJSd-dbXjoG-dRNVa4-fpRAPg-7M1E4s-cuWY2Q-9xhTb9-7X5hvm-8DDHma-8DDH1a-8DGPME-7YDhNH-8WFjH2-jeFHmb-jeF3ci-8Ktjm1-88kyf7-9hoT9Q-7R2Zpd-b8yPt4-eVnfLz-bHPNEF-7T1JBf-dk8W16
http://www.flickr.com/photos/easylocum/5696582275/
http://www.flickr.com/photos/roeshad/4960655570/
http://www.flickr.com/photos/claytonfeltran/8574244144/
http://www.flickr.com/photos/29350288@N06/4447272096/in/photolist-7LZr47-7LVD9r-8XtNKp-9LLPEs-b6V1sp-btWq7G-boVMCK-99gk4a-9uE7Wj-jXKt4K-eFR2sj-kAK5tw-7SN2DR-9XQn2L-f6S73H-a7zXB4-8RZwHA-88ztXH-8RWrKV-88ztDH-88zuiF-88ztMg-88CH8y-88CGXW-99CL6t-9oFmvT-9oJqxW-99FSZ7-88CHHG-8enycA-e1YCcu-dRFCHr-8ejhPR-9Y9Hab-b6UZLn-7SRkFJ-7SRmP7-7SRmyw-7SRmkJ-7SN3c8-7SRm7y-7SN3VX-e37qAd-9nECeq-7SRjzN-fCF4Dw-7SN2Xa-7SN3s8-9nBzVp-cKtTrY
http://www.flickr.com/photos/brianhenrythompson/3652443354/
http://www.flickr.com/photos/tangysd/6303312000/
http://www.flickr.com/photos/elkilla/5831215050/
http://www.flickr.com/photos/cehsciencenews/5263356805/
http://www.flickr.com/photos/13649621@N00/2658174628/in/photolist-53TQH3-54hBbc-5b1ppE-5gkNRn-5jNPm2-5nQjWx-5nUwUf-5nUBt1-5nUE4j-5sHKWF-5t6Lbg-5wKsNn-5CC2uT-5DskPK-5EoQLA-5Q5G3S-5RGkp5-5X5yaL-6aW3ZS-6b7Fq7-6bcwoa-6dND2L-6pxYiB-6pxYoK-6pC82Y-6tC6Sv-6wtEan-6Gachj-6GWfhH-6GWgrg-6H1kyN-6JyG1c-6Kh48Z-6Kh77v-6Kh8qv-6Kh8Ye-6KmcbC-6KmcNd-6KmfaY-6Tz6HT-6TJaUX-6VwD35-6YjJMR-72iaMW-7cc7fj-7ib3Ff-7ihW94-7kmjQv-7kqdEy-7qgU7H-7rBYyg
http://www.flickr.com/photos/ifindkarma/9625206704/
http://www.flickr.com/photos/77909728@N00/3172305095/in/photolist-5QjTMr-5RNAZx-5TuSAZ-5VB2bq-5VRAAQ-5WhU5e-5WF68v-5WWZf4-5XGJJT-5XRURS-5Y4uQ5-5Ybwbg-5YbweB-5YfLjS-5Z99dw-61eq6n-63m8LE-64RHfr-663w6u-66RKpb-67vdoP-68zWey-68FytK-69L9xC-6agmPN-6aHPcc-6bXF19-6cPvyW-6djrWT-6dXPv5-6fW8wm-6ge1LH-6hqrPv-6it9kW-6kbCR3-6kz3ro-6kVEPe-6mpjmx-6mKANR-6oGRrs-6qowbH-6qsGqC-6rEdWN-6stAUy-6t3mdV-6tfGWf-6tpVpC-6tzBum-6tAEyB-6vCwqB-6vQnFn
http://www.flickr.com/photos/gingerfuhrer/3549815270/
http://www.flickr.com/photos/modomatic/3444164104/
http://www.flickr.com/photos/mearbeitgeber/5702326977/
http://www.flickr.com/photos/gabprr/8573350989/
http://www.flickr.com/photos/malczyk/5638599313/
http://www.flickr.com/photos/kgnixer/7037501057/
http://www.flickr.com/photos/95792332@N00/2820092762/in/photolist-5icHk1-8E715f-9tmmnm
https://www.flickr.com/photos/ter-burg/10543142963
https://www.flickr.com/photos/danieljuliet/7588711600/in/photolist-aKdpDk-cyA8zb-6HSdXP-dUWfrW-cz36WE-5QAF4t-7cJG2J-5Btcr7

Doc Ritezel

April 30, 2014
Tweet

More Decks by Doc Ritezel

Other Decks in Programming

Transcript

  1. If you’re at a company of a certain size, you

    probably do something we call peer code review, or code review for short. ! After a programmer writes some code, it doesn’t immediately go to production. ! First, another programmer comes along and provides feedback. ! “Rename these variables” “Here are some bugs”, or “Delete this unused code entirely.” ! I use pair programming to make this process faster and smoother.
  2. BETTER CODE REVIEW But the dude in this picture is

    doing code review too. This is what I used to do in the 90s at my first job. ! I’d get an email with a set of changes, print out all the code on a dot-matrix printer, write on it with a red pen, spill coffee all over it, then swear a lot. ! Eventually, I’d slop the half-digested pulpy mass onto someone else’s desk, then return to a similar pile in my own cubicle. ! Makes Github and Slack feel pretty luxurious!
  3. I’ve been a consultant for over a decade and a

    half. ! Over the last five years, depending on how we’re counting, I’ve done a few thousand code reviews. ! Every client has their own way of doing them. ! Pair programming, pull requests, yelling random questions at a presenter… ! There are almost as many styles as there are teams.
  4. of CODE REVIEW ON THE INTERNETS But it’s really hard.

    ! And not everyone has positive experiences with code review. ! In fact it’s really hard to do right and…
  5. of CODE REVIEW ON HACKER NEWS Way too easy to

    do wrong. ! In case you don’t speak Bro natively, what he’s saying is…
  6. of TRANSLATE THIS BROSPEAK Take your punishment. Put up with

    the abuse. ! By the way, never read comments on Hacker News.
  7. of BEST INTENTIONS •Synchronization •Finding bugs •Tips and tricks The

    motivations for doing code reviews fall into a few categories. ! *It can be a really great way to make sure everyone’s working on the right thing.
 ! *Bugs get identified quickly.
 ! *Tips, tricks and new tools can travel around the group faster. ! Code review can be a powerful tool for bringing a team together.
  8. of OMG QUOTES But they can also drive teams apart.

    ! In many languages, Ruby included, there’s a difference between single and double quotes. ! Some people only use double quotes when interpolation is needed. ! But other people prefer to use double quotes all the time for consistency. ! On one project I was on a couple years ago, two engineers disagreed, and all the files in a single directory changed on an almost-daily basis.
  9. On another project I was on more recently, half the

    engineering team left over the course of six months. ! The reason behind the mass departure are still a total mystery to everyone involved. ! There was a daily group code review, and engineers reported feeling helpless or not good enough to do the work afterwards.
  10. On a team I was managing in 2012, everything went

    pear-shaped. 
 Arguments broke out, feelings got hurt, people got fired, great engineers left. ! Code reviews were turned into a tool of exclusion.
  11. In order to understand more about what’s going on, I’m

    going to walk through an example code review. ! There are two roles I’m going to talk about: ! *Reviewer *Author ! In this example: ! *I’m going to be the Reviewer. *we’ll talk about the Author a little later
  12. of NOT ALL CODE CAN BE A WINNER So here’s

    a basic ActiveRecord model. If you’re familiar with Rails, great. If not, just look at the color of the highlighting.
  13. PHEW That was really intense. ! *Even though it was

    just you, me and some bad code, it feels like something’s happened.
  14. “You shouldn’t be using four spaces here.” Let’s talk about

    what the Reviewer said first: ! *“You shouldn’t be using four spaces here” ! Of all the days I’ve been on client projects in the last year, ! maybe a handful of them passed without hearing something like this.
  15. BEING RIGHT This is called “Being Right”. But it’s not

    just about editor settings or git. It’s an appeal to an outside authority. ! Instead of talking about the merits of the code on the screen, the Reviewer is using objective facts or information from outside the current discussion. ! This feels like it’s coming from a totally rational place, but the problem is that code review isn’t really about teaching moments or trivia. ! There’s a solution to this problem that we as engineers can love.
  16. We solve that bad boy with science. ! Instead of

    appealing to an outside authority during a code review, we can create one artificially to make these observations for us. ! That’s basically what Continuous Integration does with a test suite.
  17. of •Style guides
 https://github.com/bbatsov/ruby-style-guide
 https://github.com/kennethreitz/python-guide •Linters •CodeClimate •Test Coverage (SimpleCov

    for Ruby) INSTEAD OF BEING RIGHT For example: ! *Consider adopting or forking a Style Guide for your language.
 ! *If syntax issues come up, add Linters to your continuous integration build.
 ! *CodeClimate for complexity, big methods or overuse of DSLs.
 ! *Code coverage tools if tests aren’t being added. ! It’s easier to not get emotional if you’re arguing over a settings file.
  18. “Never use #map this way.” Let’s look at something else

    the Reviewer said: ! *“Never use #map this way”
  19. GENERALIZING This is “Generalizing.” ! It happens when absolute language

    is used, like “always” or “never”. ! “Never use #map” is really confusing to the Author. I mean, we use #map for tons of stuff, and even this function might have a passing test. ! This is a tricky thing for engineers to address, because we love blanket statements. ! I mean, I wouldn’t challenge someone who says “Never use MongoDB” or “Always write tests.”
  20. of INSTEAD OF GENERALIZING “I think this #map should be

    an ActiveRecord #select.” So instead of Generalizing, we should use specific language to address the problem code directly. ! *“I think this #map should be an ActiveRecord #select”
  21. “Junior programmer, you wouldn’t understand that this isn’t idiomatic” *

    “As a junior programmer, you wouldn’t understand that this isn’t idiomatic Ruby”. ! The things we’ve looked at so far are definitely about making someone feel like their practices are on the outside. ! This has a much more direct effect.
  22. LABELING When the Reviewer says “junior programmer”, that’s “Labeling”. !

    The Author will remember it for the rest of their career. ! There’s no way to unspeak those words, and the damage done can be permanent. ! While I was writing this talk, I gathered experiences from a lot of junior and senior engineers. ! One thing I noticed is that I did a lot of labeling, as did basically everyone else. It’s endemic to our industry.
  23. of “What I’ve seen in most Ruby functions is that

    returns are on their own line.” INSTEAD OF LABELING So what’s something the Reviewer can say instead? The Author may, in fact, be very new to Ruby. ! They might be new to programming in general. ! Well, just talk about the code. ! *“What I’ve seen in most Ruby functions is: returns are on their own line” ! There’s a couple things embedded in here.

  24. of INSTEAD OF LABELING “What I’ve seen in most Ruby

    functions is that returns are on their own line.” First the Reviewer uses language that focuses on themselves. ! Literally. Like use the words “I’ve seen.” ! This is one really easy thing to do that takes the focus away from the Author.
  25. of INSTEAD OF LABELING “What I’ve seen in most Ruby

    functions is that returns are on their own line.” Now that we’ve removed focus from the Author, the Reviewer needs to talk about the code directly. ! This can be really hard, especially if the Author wants to talk about their past experience. ! It takes a lot of practice to use these tools, but it’s worth it.
  26. “How can we make this better?” Alright: ! *“How can

    we make this better?” ! At first blush, that might not seem so bad! ! I used to work at a larger consulting company which prides itself on teaching client developers how to write better code. ! When I was running this by a friend who worked at the same consultancy, we came up with a clear motivation: the Reviewer wants to guide the Author using Socratic questioning.
  27. GUESSING GAME This is called the Guessing Game. ! The

    Author wrote this code, and the code review itself can imply that what’s there must be bad somehow. ! In deliberately hiding expectations, the Reviewer is creating a gulf that the Author needs to bridge. ! Pressure is put on the Author to come up with the correct answer. ! That’s combined with the Reviewer’s knowledge of the code’s inadequacy. !
  28. of INSTEAD OF ASKING LEADING QUESTIONS “I think #define_singleton_method isn’t

    appropriate here. Can we move it into the class?” The Reviewer needs to clearly state their needs to the Author. ! *“I think #define_singleton_method isn’t appropriate here. Can we move it into the class?” ! As a side-note, I’ve used Socratic questioning for years. ! I had a lot of great experiences using it as a TA, opening doors to learning. ! So it was jarring to find that this technique can be so destructive in another, related context.
  29. Is this me? What have I done? Oh no, my

    clients! In fact, I started to see my own actions through some kind of warped funhouse mirror of shame and regret. ! I know I’ve said these things before, myself. ! *What could it possibly mean?
 ! *Am I a bad person?
 ! *Have I destroyed people’s careers?
  30. Exclusion I think what I’ve learned is that an engineer

    who’s senior enough: 
 to have memorized syntax for a language, to know what good code looks like, and to have opinions that could make them a great reviewer. ! Is an engineer senior enough: ! *to make others feel excluded from the team. ! Especially new engineers. Especially ones who need positive feedback the most.
  31. Everyone I’ve talked to about this has stories about being

    excluded, usually when they’re new on a team. ! This happens to junior and senior engineers alike. ! New team members feel excluded sooner because they haven’t built enough rapport with the rest of the team.
  32. “Junior programmer, you wouldn’t understand that this isn’t idiomatic” “I’ve

    been writing Ruby for 5 years” So the Reviewer says: ! *“As a junior programmer, you wouldn’t understand that this isn’t idiomatic” ! The Author might come back with: ! *“Well, actually, I’ve been writing Ruby for 5 years.”
  33. CORRECTING MISPERCEPTIONS The Author is assuming a defensive posture here.

    ! They’re correcting a misperception. ! In reacting to negative criticism by defending themselves, the Author is inviting more of the same negativity. ! You can imagine how. ! If the Author has been writing Ruby for 5 years, what’s up with that terrible code on the screen?
  34. of INSTEAD OF CORRECTING MISPERCEPTIONS “Junior programmer, you wouldn’t understand

    that this isn’t idiomatic” “What changes should I make so that this code is more idiomatic?” As the Author, let’s give the Reviewer the benefit of the doubt. ! If they’re legitimately trying to express frustration, but failing to properly voice their needs, you can prompt them for that information. ! *“What changes should I make so that this code is more idiomatic?” ! Again, just like with the Reviewer, we’re steering the conversation away from the people and back toward the code. ! Let’s look at another example as the Author.
  35. “Never use #map this way.” “It’s a spike, so it’s

    okay for now” * “Never use #map this way” ! The Author might respond with: ! *“Well, we’re going to delete this code and it’s a spike, so it’s okay for now, right?”
  36. JUSTIFYING The Author is justifying the code, which is another

    defensive posture. ! This has the same result as before: more negativity, even though there’s some truth to it. ! I mean, just because it’s a spike doesn’t mean you can kill the database.
  37. of INSTEAD OF JUSTIFYING “Never use #map this way.” “What

    should I write instead?” Again, let’s try to give the Reviewer some space to use the wrong words. ! The Reviewer has some idea of where to go with the code, but they’re being obscure. ! The Author could say: ! *“What should I write instead?” ! Again, this moves the focus back onto the code.
  38. “How can we make this better?” Remember that really weird

    question by the Reviewer: ! * “How can we make this better?” ! The Author might actually choose this moment to check their email and respond to a thread about OpenSSL being terrible.
  39. TUNING OUT The Author is defensively tuning out. ! Instead

    of being open to feedback during the code review, it’s easier to just focus on something else. ! Recognizing that this is happening is really difficult. ! Disengagement can feel like something else has legitimately taken priority.
  40. COUNTER-CRITIQUING 10 Line Function 50 Line Function OMG Finally, counter-critiquing

    is something I’ve seen happen between two senior developers. ! The Reviewer might say something like: ! * “I don’t like that this function is 10 lines long.” ! Then, the Author responds with: ! *“well, I saw you commit a 50 line function yesterday!”
  41. of INSTEAD OF COUNTER-CRITIQUING “I don’t like that this function

    is 10 lines long.” “How could I rewrite this function to be shorter?” Once again, the Author needs to give the Reviewer the ability to give feedback. ! In this case, the Reviewer’s needs are already clearly stated and reasonable. ! The Author could ask for more feedback: ! *“How could I rewrite this function to be shorter?” !
  42. In all these cases, the Author is steering back toward

    the code and away from a discussion of personal merit. ! It’s important to call out that code review is a often a formal, structured interaction. ! The Author’s role is to listen to feedback about code, just as much as the Reviewer’s role is to give feedback about code. ! At its best, code review should feel natural.
  43. ! "? SRSLY? "! ! But as I mentioned before,

    there’s a larger interaction at play here. ! *The Author is attempting to build rapport by interacting positively with the Reviewer. ! *When the Author reacts defensively, rapport stops building. ! *And when the Reviewer critiques the Author, rapport deteriorates at a faster rate. ! *After the Author and Reviewer burn through that rapport, exclusion kicks in.
  44. FIZZBUZZ? PING PONG? BINGE DRINKING? OK OK OK CRAZY VIM

    SETUP? OK This evaluation starts long before the first code review. For a startup of today, this is almost stereotypical: ! *Take criticism under fire? *Comply with power structure? *Managed with peer pressure? *Use the same tools? ! If you fail one of these, you’re lined up for exclusion from the team. ! If looking at code was the only way we determined fit, great teams might spring up overnight. This is why pair programming interviews are so great.
  45. of PAUL GRAHAM SAYS RACISM IS COOL But that’s not

    the only problem. Our industry has issues at all levels. ! *Paul Graham, a venture capitalist formerly in charge of *YCombinator, a firm that’s funded companies like AirBnb *gave this quote in an interview last year. ! It’s pretty clear what he thinks of accents, but what is he saying afterwards? ! He’s not sure why. He just knows they don’t fit into his group. Does Paul Graham know what his group selection criteria is?
  46. Wait, hold on, I think I’ve discovered his selection criteria.

    ! *Here’s a hint: there’s only one woman in the room.
  47. Exclusion isn’t just for women and non-native English speakers, despite

    what Paul Graham thinks. ! Jerks are everywhere. Everyone can be excluded. ! So how do you know when it’s happening to you? ! Well, it turns out there’s something so common that it’s an everyday phrase.
  48. GUT CHECK Do a gut check. ! Your body will

    tell you when you’re under a large amount of stress. ! Now, your body is reasonably inconsistent, but there are some signs you can notice.
  49. Physical Discomfort The first and most obvious sign of stress

    is physical discomfort. ! I usually notice myself fidgeting. I usually don’t do it unless something’s up. ! Your body might have its own expression. ! For example, one of my friends notices that her shoulders tense up and she gets really bad back pain.
  50. Silence Silence is another sign of physical stress. ! If

    you and your coworker are just staring at the code, avoiding eye contact, not talking, then something is definitely up. ! What I notice is that I’m in this silent moment, and I’m not really sure how long I’ve been there.
  51. Exhaustion Finally, you can just feel tired. ! During my

    first job where I was doing code review on a full-time basis, I would fall asleep even before lunch. ! The constant drumbeat of physical stress wore me down.
  52. STRESS IDENTIFIED Okay, so you’re feeling one of these signs.

    Great. ! There’s only one way to really handle this: change your current physical situation. ! Mention what you’re feeling and propose a break.
  53. “Wow, my back is killing me. ! I need to

    put my feet up for 15 minutes or so.”
  54. “Hey, I need to take a break and go walk

    around. ! I’ll be back in a few.”
  55. MISMANAGING STRESS One way that some teams deal with stress

    is by encouraging at-work drinking. ! Drinking won’t make stress go away, but it may open up a bunch of other dangerous situations. ! I won’t go into those right now.
  56. Sometimes, you can’t disengage from the situation after you come

    back from a break. ! If you’re the Author and the Reviewer isn’t backing off, it’s time to call it a day. ! There’s one thing you can say here: “Can we pick this up tomorrow?” ! After that, you can go home or work on something else, but the code review is definitely over.
  57. PRACTICE I’d like to end on a high note. I’m

    leaving you with a lot of information today. ! These are really difficult things to change. ! All of them take practice.
  58. of REVIEWER SIGNS OF EXCLUSION •Being Right •Generalizing •Labeling •Guessing

    Game I’ve given you a bunch of tools for recognizing when a Reviewer is using exclusionary language. ! *Being right, an appeal to an external authority
 ! *Generalizing, the use of absolutes
 ! *Labeling, the act of excluding the Author directly
 ! *Playing the guessing game, getting the Author to exclude themselves
  59. of AUTHOR SIGNS OF BEING EXCLUDED •Correcting misperceptions •Justifying •Tuning

    out •Counter-critiquing I’ve also talked about ways the Author can catch themselves defending against exclusion. ! *Correcting misperceptions, a way of engendering missing respect
 ! *Justifying, a plea for sympathy or mitigating circumstances
 ! *Tuning out, allowing exclusion by the Reviewer
 ! *Counter-critiquing, preemptively excluding oneself from the Reviewer’s group
  60. of AUTHOR SIGNS OF PHYSICAL STRESS •Physical discomfort •Silence •Exhaustion

    There are also signs that you need to take a break: ! *Physical discomfort
 ! *Silence
 ! *Exhaustion ! There are other signs of physical stress than what’s up here, and you know your body’s language better than anyone else. ! These are just what I notice.
  61. of LANGUAGE TOOLS FOR INCLUSION •Talk about code •Self-directed commentary

    •Avoid “you” Finally, there are some ways for the Author and Reviewer to be more inclusive: ! *Talk about the code on the screen
 ! *Use self-directed commentary, sentences that begin with “I feel” and “I think”
 ! *Avoid talking about the other person, specifically be aware of the word “you”
  62. All of this is gradual. ! You’ll start being aware

    of behaviors and practicing, but you probably won’t notice changes right away. ! It’s just like with meditation or yoga. ! When you’re better at it, you’ll know because it’s easier than it was six months ago.