WHAT YOU'LL LEARN
‣ Proven benefits
‣ Standards
‣ Time saving tools & automation
‣ be the best reviewer
‣ Submit PRs for impact
@nnja
Slide 5
Slide 5 text
YOUR TAKE AWAYS
‣ Novice - Comprehensive overview
of code review best practices
‣ Intermediate - Tooling &
automation
‣ Advanced - People
@nnja
Slide 6
Slide 6 text
LIVETWEET
#OSCON
@NNJA
Slide 7
Slide 7 text
NOT ONE SIZE FITS ALL
‣ team size
‣2 vs 10
‣ closed vs open source
‣ defect tolerance
‣low vs high
@nnja
Slide 8
Slide 8 text
WHY CODE REVIEW?
@nnja
Slide 9
Slide 9 text
CODE REVIEWS CAN
BE FRUSTRATING
@nnja
Slide 10
Slide 10 text
"FRUSTRATIONS"
‣ + time demand
‣ + process
‣ team tension
‣“smart” devs think they don’t
need it
!
@nnja
Slide 11
Slide 11 text
CODE REVIEW BENEFITS
@nnja
Slide 12
Slide 12 text
SHARED OWNERSHIP & KNOWLEDGE
‣ We’re in this together
‣ No developer is the only
expert
‣ ‑ lottery factor
@nnja
Slide 13
Slide 13 text
THE LOTTERY FACTOR
New Yorker: Can Andy Byford Save the Subways?
Slide 14
Slide 14 text
FIND BUGS & DESIGN FLAWS
‣ find bugs before the code is done
‣ Case Studies on Review1:
‣bug rate ‑ by 80%
‣productivity ‐ by 15%
1 Code Reviews: Just do it
@nnja
Slide 15
Slide 15 text
THE GOAL IS TO FIND
BUGS BEFORE YOUR
CUSTOMERS DO
@nnja
ENCOURAGE CONSISTENCY
‣ Work for a company?
‣Your code isn’t yours
‣ code should fit project's
style
‣not your own
@nnja
Slide 19
Slide 19 text
STYLE GUIDE
‣ Distinguishes personal taste
from opinion
‣ Agreed on beforehand
‣ Example: Google's pyguide.md
@nnja
Slide 20
Slide 20 text
REVIEW IS UNIVERSAL
‣ Doesn’t matter how junior or
senior you are
‣ Inequality breeds
dissatisfaction
@nnja
Slide 21
Slide 21 text
CONSISTENT CODE IS
EASIER TO MAINTAIN
BY A TEAM
@nnja
Slide 22
Slide 22 text
CODE REVIEW SHOULD BE DONE
BY YOUR PEERS
@nnja
Slide 23
Slide 23 text
DON’T POINT FINGERS!
@nnja
Slide 24
Slide 24 text
WHEN CODE REVIEWS ARE POSITIVE,
DEVELOPERS
DON’T JUST EXPECT REVIEWS,
THEY LOOK FORWARD TO THEM
@nnja
Slide 25
Slide 25 text
REVIEW FUNDAMENTALS
‣ Performed by peers
‣ Style guides for consistency
‣ No blame culture
@nnja
Slide 26
Slide 26 text
HOW TO REVIEW CODE?
BE A GREAT REVIEWER
AND
A GREAT SUBMITTER
@nnja
Slide 27
Slide 27 text
BE A GREAT
REVIEWER
@nnja
Slide 28
Slide 28 text
SELF-CARE
☕"#$
@nnja
Slide 29
Slide 29 text
DON'T BURN OUT
Studies show reviewer should look at
200-400 lines of code at a time for maximum impact.2
2 https://www.microsoft.com/en-us/research/wp-content/uploads/
2016/02/bosu2015useful.pdf
@nnja
Slide 30
Slide 30 text
LIMIT REVIEWS TO 400 LINES IN 60 MINS
TO MAXIMIZE EFFECTIVENESS3
3
https://smartbear.com/learn/code-review/best-practices-for-peer-code-review/
Slide 31
Slide 31 text
@nnja
Slide 32
Slide 32 text
BE OBJECTIVE:
"THIS METHOD IS MISSING
DOCUMENTATION"
INSTEAD OF
“YOU FORGOT TO WRITE
DOCUMENTATION"
@nnja
Slide 33
Slide 33 text
ASK QUESTIONS, DON’T GIVE ANSWERS
‣ “Would it make more sense
if... ?”
‣ “Did you think about... ?”
‣ "What about trade-offs... ?"
@nnja
Slide 34
Slide 34 text
OFFER SUGGESTIONS
‣ “It might be easier to...”
‣ “We tend to do it this way...”
@nnja
Slide 35
Slide 35 text
AVOID THESE TERMS
‣ Simply
‣ Easily
‣ Just
‣ Obviously
‣ Well, actually...
Recurse Center Social Rules
Slide 36
Slide 36 text
... NOW, SIMPLY
@nnja
Slide 37
Slide 37 text
HAVE CLEAR FEEDBACK
‣ Strongly support your opinions
‣ Share How & Why
‣ Link to supporting docs,
stackoverflow, etc
‣ Enforce the style guide
@nnja
Slide 38
Slide 38 text
COMPLIMENT GOOD WORK
& GREAT IDEAS
@nnja
Slide 39
Slide 39 text
@nnja
Slide 40
Slide 40 text
DON’T BE A PERFECTIONIST
‣ Don’t let perfect get in the way
of perfectly acceptable.
‣ Prioritize what’s important to
you.
‣ Usually 90% there is good enough.
@nnja
Slide 41
Slide 41 text
IT’S OK TO NIT-PICK
‣ Syntax issues
‣ Spelling errors
‣ Poor variable names
‣ Missing corner-cases
@nnja
Slide 42
Slide 42 text
SAVE NIT-PICKS FOR LAST
@nnja
Slide 43
Slide 43 text
TRY TO DO REVIEWS IN 24-48 HOURS
@nnja
Slide 44
Slide 44 text
BE A GREAT REVIEWER
‣ Empathy
‣ Watch your language
‣ Clear feedback
‣ Give compliments
@nnja
Slide 45
Slide 45 text
BE A GREAT REVIEWER
‣ Don’t be a perfectionist
‣ Avoid burn out
‣ Finish in 24-48 hours
‣(if possible)
@nnja
Slide 46
Slide 46 text
SUBMIT GREAT
PRS
@nnja
Slide 47
Slide 47 text
DON’T GET RUBBER-STAMPED.
@nnja
Slide 48
Slide 48 text
No content
Slide 49
Slide 49 text
DON’T BE CLEVER.
READABILITY COUNTS!
@nnja
Slide 50
Slide 50 text
GOOD CODE IS LIKE A GOOD JOKE.
IT NEEDS NO EXPLANATION.
- RUSS OLSEN
@nnja
Slide 51
Slide 51 text
REVIEW LIFECYCLE
‣ 0: Before submission
‣ 1: Submitted
‣ 2: Work in progress PR (optional at
30-50%)
‣ 3: Almost done (90-100%)
‣ 4: Completed
@nnja
Slide 52
Slide 52 text
STEP 0:
BEFORE SUBMISSION
@nnja
Slide 53
Slide 53 text
DID YOU SOLVE ONE ISSUE?
‣ Solving multiple issues?
‣Break them up into multiple
PRs
‣ Also solved an unrelated issue?
‣Make a new PR
@nnja
Slide 54
Slide 54 text
SMALL PRS PREVENT REVIEWER BURNOUT
‣ Reviews lose value when they’re
more than 500 lines of code2
‣ Keep them small & relevant
‣ If a big PR is unavoidable, give
the reviewer extra time
2 https://www.microsoft.com/en-us/research/wp-content/uploads/
2016/02/bosu2015useful.pdf
@nnja
Slide 55
Slide 55 text
CONTEXT (THE WHY)
‣ What was the motivation for
submitting this code?
‣Link to issue
‣Document why the change was needed
‣large PR? provide a changelog
‣ Point out side-effects
@nnja
Slide 56
Slide 56 text
YOU ARE THE
PRIMARY REVIEWER
‣ Review your own code as if it
belonged to someone else
‣ Anticipate problem areas
@nnja
Slide 57
Slide 57 text
AS PRIMARY REVIEWER
‣ Make sure your code works, and
is thoroughly tested
‣ Don’t rely on others to catch
your mistakes
@nnja
Slide 58
Slide 58 text
✔ CHECK CODE
WITH AUTOMATED TOOLS
@nnja
Slide 59
Slide 59 text
DYNAMIC CODE? USE A LINTER✔
@nnja
Slide 60
Slide 60 text
LEARN YOUR TOOLS
foo = [
1,
2,
3,
4]
bar = 1, 2, # bar is a Tuple of (1, 2)
bar = 2, # bar is still a Tuple
bar = 2 # bar is now a number
Caught with linter rule: trailing-comma-tuple
@nnja
Slide 61
Slide 61 text
GIT PRE-COMMIT HOOKS
‣ run linter
‣ check syntax
‣ check for TODOs, debugger statements,
unused imports
‣ enforce styling
‣ reject commit if conditions aren't met
@nnja
Slide 62
Slide 62 text
pre-commit.com
@nnja
Slide 63
Slide 63 text
No content
Slide 64
Slide 64 text
✔ TESTS
‣ Write them!
‣ Don’t know code health if tests are
failing
‣ Tests identify problems immediately
@nnja
✔ COVERAGE
% OF CODE EXECUTED WHEN RUNNING A TEST SUITE
@nnja
Slide 67
Slide 67 text
BEFORE SUBMITTING, TRY A CHECKLIST
@nnja
Slide 68
Slide 68 text
☑ SMALL STUFF
‣ ☑ check for reusable code
‣ ☑ use utility methods
‣ ☑ remove debugger statements?
‣ ☑ write clear commit messages?
‣ ☑ small PR?
@nnja
Slide 69
Slide 69 text
☑ BIG STUFF
‣ ☑ Is my code secure?
‣ ☑ Will it scale?
‣ ☑ Is it easy to maintain?
‣ ☑ Is it resilient against outages?
Tip: Read The Checklist Manifesto
@nnja
Slide 70
Slide 70 text
STEP 1:
SUBMITTED
@nnja
Slide 71
Slide 71 text
YOU’RE STARTING A CONVERSATION
‣ don't get attached
‣ anticipate feedback
‣ acknowledge you'll make
mistakes
@nnja
Slide 72
Slide 72 text
(OPTIONAL)
STEP 2:
WORK IN
PROGRESS
@nnja
Slide 73
Slide 73 text
SUBMIT WORK IN PROGRESS PRS
‣ Good idea for bigger features
‣ Open when code is 30-50% done
‣ Don’t be afraid of showing
incomplete, incremental work
@nnja
Slide 74
Slide 74 text
WHEN PR IS WORK IN PROGRESS
‣ Feedback to expect:
‣Architectural issues
‣Problems with overall design
‣Design pattern suggestions
@nnja
Slide 75
Slide 75 text
STEP 3:
ALMOST DONE
@nnja
Slide 76
Slide 76 text
WHEN CODE IS ALMOST DONE
‣ Feedback to expect:
‣Nit picks
‣Variable names
‣Documentation & comments
‣Small optimizations
@nnja
Slide 77
Slide 77 text
BE RESPONSIVE
(IT’S STILL A CONVERSATION)
‣ Respond to comments!
‣(even if you don't agree with them)
‣ Don't think it's necessary?
‣come to a mutual understanding about why
@nnja
Slide 78
Slide 78 text
FIGHT FOR WHAT YOU BELIEVE, BUT
GRACEFULLY ACCEPT DEFEAT
@nnja
Slide 79
Slide 79 text
DON’T BIKE-SHED
‣ Back and forth > 3 times?
‣Step away from the keyboard
‣ Talk instead!
‣Record the results of the
conversation in the PR
@nnja
Slide 80
Slide 80 text
VS CODE LIVE SHARE
Download Extension
Slide 81
Slide 81 text
DON’T TAKE FEEDBACK PERSONALLY.
IT’S AN OPPORTUNITY FOR GROWTH
@nnja
Slide 82
Slide 82 text
HOW TO SUBMIT GREAT PRS?
‣ Provide the why (context!)
‣ Review your own code
‣ Expect conversation
‣ Submit in progress work
@nnja
Slide 83
Slide 83 text
HOW TO SUBMIT GREAT PRS?
‣ Use automated tools
‣ Be responsive
‣ Accept defeat
@nnja
Slide 84
Slide 84 text
I'VE BECOME A BETTER DEVELOPER
BY PARTICIPATING IN CODE REVIEWS
@nnja
Slide 85
Slide 85 text
CODE
REVIEWS
BUILD A
STRONGER
TEAM
@nnja
Slide 86
Slide 86 text
HIRING SENIOR ENGINEERS IS HARD.
YOU CAN HIRE JUNIOR ENGINEERS,
AND GROW THEM
INTO FUNCTIONAL PRODUCTIVE PARTS OF
YOUR TEAM.
-- Sasha Laundy
@nnja
Slide 87
Slide 87 text
CONSIDER...
‣ Develop, don’t force the culture
‣ Not one size fits all
‣ Use in addition to tests, QA, etc
for maximum impact
@nnja
Slide 88
Slide 88 text
@nnja
Slide 89
Slide 89 text
PLEASE,
BE KIND
TO EACH OTHER
@nnja
Slide 90
Slide 90 text
THANKS!
@NNJA
SLIDES: nina.to/oscon2019
PYTHON @ MICROSOFT: aka.ms/py-oscon
(ADDITIONAL READING ON NEXT SLIDE)
Slide 91
Slide 91 text
RESOURCES & ADDITIONAL READING
‣ Top 3 Django Gotchas to Catch during Code Review
‣ Microsoft Study on Effective Code Review
‣ Code Reviews: Just do it
‣ Code Project - Code Review Guidelines
‣ Great Example Checklist
‣ Best Practices for Code Review
‣ Rebecca's Rules for Constructive Code Review
‣ My Big Fat Scary Pull Request
‣ The Gentle Art of Patch Review - Sage Sharp
‣ Watch: Raymond Hettinger - Beyond PEP8
@nnja