SlideShare a Scribd company logo
1 of 108
Download to read offline
NINA ZAKHARENKO
CODE REVIEW
SKILLS FOR
PYTHONISTAS
@NNJA
bit.ly/
pycodereviews
LIVETWEET
USE #EUROPYTHON
@NNJA
WHAT WE'LL LEARN TODAY [1/2]
> What are the proven benefits of
review?
> Setting standards
> Time saving tools and automation
options for Python
@nnja
WHAT WE'LL LEARN TODAY [2/2]
> How to review code helpfully
> How to submit PRs for maximum
impact
> Use code review to build a
stronger team
@nnja
WHAT WILL YOU TAKE AWAY FROM THIS TALK?
> Novice - Comprehensive overview of
code review best practices
> Intermediate - Tooling &
automation
> Advanced - Hardest part – the
people factor
@nnja
NOT ONE SIZE FITS ALL!
> team size
> 2 vs 10
> product type
> agency vs in-house vs open source
@nnja
NOT ONE SIZE FITS ALL!
> defect tolerance
> jet engines vs mobile games
@nnja
WHY CODE REVIEW?
@nnja
CODE REVIEWS CAN
BE FRUSTRATING
@nnja
APPARENT CODE REVIEW FRUSTRATIONS
> Adds time demand
> Adds process
> Can bring up team tensions
> “smart” devs think they don’t need
it
!
@nnja
CODE REVIEW BENEFITS
@nnja
FIND BUGS & DESIGN FLAWS
> Design flaws & bugs can be identified
and remedied before the code is
complete
> Case Studies on Review5
:
> ➡ bug rate by 80%
> productivity by 15%
5 
blog.codinghorror.com/code-reviews-just-do-it/
@nnja
THE GOAL IS TO FIND
BUGS BEFORE YOUR
CUSTOMERS DO
@nnja
SHARED OWNERSHIP & KNOWLEDGE
> We’re in this together
> No developer is the only expert
@nnja
LOTTERY FACTOR
New Yorker: Can Andy Byford Save the Subways?
CODE REVIEW BENEFITS?
> Find Bugs
> Shared Ownership
> Shared Knowledge
> Reduce "Lottery Factor"
@nnja
HOW?@nnja
CONSISTENT CODE
> Your code isn’t yours, it belongs
to your company
> Code should fit your company’s
expectations and style (not your
own)
> Reviews should encourage
consistency for code longevity
@nnja
CODE REVIEWS NEED TO BE UNIVERSAL &
FOLLOW GUIDELINES
> Doesn’t matter how senior / junior
you are
> Only senior devs reviewing ==
bottleneck
> Inequality breeds dissatisfaction
@nnja
STYLE GUIDE
> Distinguishes personal taste from
opinion
> Should be agreed upon beforehand
> Go beyond PEP8
> See: Google's pyguide.md or plone
styleguide
@nnja
FORMATTERS
- autopep8
- Black
- YAPF
!
BLACK
DEMO @: black.now.sh
github.com/jpadilla/black-online
VS Code> settings:
> "editor.formatOnSave": true
> "python.formatting.provider": "black"
> "python.formatting.blackArgs": ["--line-
length", "100"]
> VS Code Black support docs
@nnja
CONSISTENT CODE IS EASIER TO MAINTAIN
BY A TEAM
@nnja
CODE REVIEW IS DONE BY
YOUR PEERS & NOT MANAGEMENT
@nnja
DON’T POINT FINGERS!
@nnja
WHEN CODE REVIEWS ARE POSITIVE,
DEVELOPERS
DON’T EXPECT THEIR
CHANGES TO BE REVIEWED,
THEY WANT THEIR
CHANGES TO BE REVIEWED.
@nnja
LET'S REVIEW: CODE REVIEW
FUNDAMENTALS
> Universal code review
> Performed by Peers
> Style guides & formatters for
consistency
> No blame culture
@nnja
HOW SHOULD
WE CODE
REVIEW? @nnja
BE A GREAT
SUBMITTER
@nnja
DON’T GET RUBBER-STAMPED.
@nnja
DON’T BE CLEVER.
READABILITY COUNTS!
@nnja
GOOD CODE IS LIKE A GOOD JOKE.
IT NEEDS NO EXPLANATION.
- RUSS OLSEN
@nnja
STAGES OF REVIEW
> 0: before PR submission
> 1: PR submitted
> 2: (optional) work in progress PR
(30-50%)
> 3: review almost done (90-100%)
> 4: review completed
@nnja
STAGE 0:BEFORE SUBMISSION
@nnja
PROVIDE CONTEXT (THE WHY)
> What was the motivation for
submitting this code?
> Link to the underlying ticket/issue
> Document why the change was needed
> For larger PRs, provide a changelog
> Point out any side-effects
@nnja
YOU ARE THE
PRIMARY REVIEWER
> Review your code with the same level of
detail you would give giving reviews.
> Anticipate problem areas.
@nnja
THE PRIMARY REVIEWER
> Make sure your code works, and is
thoroughly tested.
> Don’t rely on others to catch your
mistakes.
@nnja
BEFORE SUBMITTING, TRY A CHECKLIST
@nnja
☑ SMALL STUFF> Did you check for reusable code or
utility
methods?
> Did I remove debugger statements?
> Are there clear commit messages?
@nnja
☑ BIG STUFF> Is my code secure?
> Will it scale?
> Is it maintainable?
> Is it resilient against outages?
Tip: Read The Checklist Manifesto
@nnja
STAGE 1:
SUBMITTED@nnja
YOU’RE STARTING A CONVERSATION
> Don’t get too attached to your
code before the review process
> Anticipate comments and feedback
> Acknowledge you will make mistakes
@nnja
STAGE 2:
(OPTIONAL)
WORK IN PROGRESS@nnja
SUBMIT WORK IN PROGRESS PULL REQUESTS
> Open them your code is 30-50% done
> Good idea for bigger features
> Don’t be afraid of showing
incomplete, incremental work
@nnja
WHEN CODE IS WORK IN PROGRESS
> Feedback to expect:
> Architectural issues
> Problems with overall design
> Design pattern suggestions
@nnja
STAGE 3:ALMOST DONE@nnja
WHEN CODE IS ALMOST DONE
> Feedback to expect:
> Nit Picks
> Variable Names
> Documentation & Comments
> Small Optimizations
@nnja
ONE REVIEW PER PR
> Solving multiple problems? Break
them up into multiple PRs for ease
of review.
> Solved an unrelated problem? Make
a new PR with a separate diff
@nnja
PREVENT REVIEWER BURNOUT
> Reviews lose value when they’re
more than 500 lines of code1
> Keep them small & relevant
> If a big PR is unavoidable, give
the reviewer extra time
1 
https://www.microsoft.com/en-us/research/wp-content/uploads/2016/02/
bosu2015useful.pdf
@nnja
✔ CHECK CODE
WITH AUTOMATED TOOLS
@nnja
✔ LINTER
@nnja
> Coding standard
> Error detection
> Refactoring help
> IDE & editor integration
@nnja
!
PYLINT RULE: trailing-comma-tuple
foo = (1,
3,
4,
)
bar = 2,
@nnja
USE VULTURE.PY
TO FIND DEAD OR UNREACHABLE CODE
$ pip install vulture
$ vulture script.py package/
or
$ python -m vulture script.py package/
github.com/jendrikseipp/vulture
Sample code
def foo():
print("foo")
def bar():
print("bar")
def baz():
print("baz")
foo()
bar()
Run vulture.py
› python -m vulture foo.py
foo.py:7: unused function 'baz' (60% confidence)
@nnja
GIT PRE-COMMIT HOOKS
> run linter
> check syntax
> check for TODOs, debugger statements,
unused imports
> enforce styling (autopep8, black formatter,
sort imports, etc)
> option to reject commit if conditions don't
pass
@nnja
pre-commit.com
@nnja
pre-commit.com
> autopep8-wrapper - Runs autopep8 over source
> flake8 and pyflakes - Run flake8 or pyflakes
on source
> check-ast - Check whether files contain
valid python
> debug-statements - Check for debugger
imports and breakpoint() calls
@nnja
✔ TESTS> Write them!
> Don’t know code health if tests
are failing
> Tests identify problems
immediately
@nnja
@nnja
✔ CONTINUOUS INTEGRATION
CPYTHON USES VSTS
@nnja
✔ coverage.py
% OF CODE EXECUTED WHEN RUNNING A TEST SUITE
@nnja
✔ COVERAGE
> Coverage tools integrate into GitHub
> coverage.py
> coveralls.io
@nnja
STAGE 4:REVIEW COMPLETE
@nnja
BE RESPONSIVE> Reply to every comment
> Common Responses:
> Resolved
> Won’t Fix
> If you won’t fix, make sure you’ve come to
a mutual understanding with the reviewer
@nnja
IT’S STILL A CONVERSATION
If there were comments, let your
reviewer know when you’ve pushed
changes and are ready to be re-
reviewed.
@nnja
DON’T BIKE-SHED> bikeshed.com
> back & forth > 3 times? step away
from the keyboard
> talk instead!
> record the results of the
conversation in the PR
@nnja
VS CODE LIVE SHARE
Download Extension
FIGHT FOR WHAT YOU BELIEVE, BUT
GRACEFULLY ACCEPT DEFEAT.
@nnja
DON’T TAKE FEEDBACK PERSONALLY.
IT’S AN OPPORTUNITY FOR GROWTH.
@nnja
HOW TO BE A GREAT SUBMITTER?
> Provide the why (context!)
> Review your own code
> Expect conversation
> Submit in progress work
@nnja
HOW TO BE A GREAT SUBMITTER?
> Use automated tools
> Be responsive
> Accept defeat
@nnja
#1: BE A GREAT
REVIEWER
@nnja
@nnja
BE OBJECTIVE
“THIS METHOD IS MISSING A DOCSTRING”
INSTEAD OF
“YOU FORGOT TO WRITE A DOCSTRING”
@nnja
ASK QUESTIONS DON’T GIVE ANSWERS
> “Would it make more sense if... ?”
> “Did you think about... ? ”
@nnja
OFFER SUGGESTIONS
> “It might be easier to...”
> “We tend to do it this way...”
@nnja
AVOID THESE TERMS
> Simply
> Easily
> Just
> Obviously
> Well, actually...
@nnja
... NOW, SIMPLY
@nnja
HAVE CLEAR FEEDBACK
> Strongly support your opinions
> Share How & Why
> Link to supporting documentation,
blog post, or stackoverflow
examples
@nnja
THIS IS NOT CLEAR FEEDBACK
@nnja
COMPLIMENT GOOD WORK AND
GREAT IDEAS
@nnja
DON'T BE A PERFECTIONIST
@nnja
DON’T BE A PERFECTIONIST
> For big issues, don’t let perfect
get in the way of perfectly
acceptable.
> Prioritize what’s important to
you.
> Usually 90% there is good enough.
@nnja
IT’S OK TO NIT-PICK
> Syntax Issues
> Spelling Errors
> Poor Variable Names
> Missing corner-cases
> Specify: Are your nitpicks blocking merge?
Save the nit-picks for last, after any pressing
architecture, design, or other large scale issues
have been addressed.
@nnja
Don't burn out. Studies show reviewer should look at
200-400 lines of code at a time for maximum impact2
.
2 
https://smartbear.com/learn/code-review/best-practices-for-peer-code-review/
Limit reviews to 400 lines in 60 mins
to maximize effectiveness3
.
3 
https://smartbear.com/learn/code-review/best-practices-for-peer-code-review/
TRY TO DO REVIEWS IN 24-48 HOURS
HOW CAN WE BE A GREAT REVIEWER?
> Have Empathy
> Watch your Language
> Have Clear Feedback
> Give Compliments
@nnja
HOW CAN WE BE A GREAT REVIEWER?
> Don’t be a perfectionist
> Avoid Burn Out
> Complete in 24-48 hours
@nnja
CODE
REVIEWS
BUILD A
STRONGER
TEAM
@nnja
FIRST DAY VIBES...
@nnja
NEWBIES> Not everyone has experience being
reviewed.
> Remember what it felt like when
you introduced the process.
> Ease into it!
@nnja
ONBOARDING> The first submitted PR is the hardest
> The first review done is challenging too
> Start by reading recently completed reviews
> First code review should be small
> Share the style guide
@nnja
EVERYONE’S A REVIEWER
> Junior devs start by doing pair-
reviews with a more experienced
teammate.
> Use it as a mentorship
opportunity.
@nnja
HIRING SENIOR ENGINEERS IS HARD.
YOU CAN HIRE JUNIOR ENGINEERS,
AND GROW THEM
INTO FUNCTIONAL PRODUCTIVE PARTS OF
YOUR TEAM.
- SASHA LAUNDY
@nnja
IF YOU’RE NOT DOING CODE REVIEWS,
YOU’RE MISSING A BIG OPPORTUNITY.
@nnja
REMEMBER...> Allocate the time
> Develop, don’t force the process
> Not one size fits all
> Or a one stop fix
> Use in addition to tests, QA, etc for
maximum impact
@nnja
I'VE BECOME A MUCH BETTER PROGRAMMER
BY PARTICIPATING IN CODE REVIEWS
@nnja
WHAT DID WE
LEARN?
@nnja
@nnja
REVIEWS DECREASE WTFS/M
BY INCREASING CODE QUALITY LONG TERM
@nnja
LESS WTFS ➡
HAPPIER DEVS!
@nnja
THANKS!
SLIDES: bit.ly/
pycodereviews
aka.ms/python
@nnja
(Additional resources on
next slides)
RESOURCES & ADDITIONAL READING
> 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
EXAMPLE STYLE GUIDES
> Python
> Plone
Google has many good, but strict style guides
at: https://github.com/google/styleguide
Doesn't matter which one you use.
Pick one and stick with it.
@nnja

More Related Content

What's hot

Risk Mitigation Using Exploratory and Technical Testing | QASymphony Webinar
Risk Mitigation Using Exploratory and Technical Testing | QASymphony WebinarRisk Mitigation Using Exploratory and Technical Testing | QASymphony Webinar
Risk Mitigation Using Exploratory and Technical Testing | QASymphony WebinarQASymphony
 
Why you should integrate peer code reviews in your software company
Why you should integrate peer code reviews in your software companyWhy you should integrate peer code reviews in your software company
Why you should integrate peer code reviews in your software companyMatts Devriendt
 
Test driven development vs Behavior driven development
Test driven development vs Behavior driven developmentTest driven development vs Behavior driven development
Test driven development vs Behavior driven developmentGallop Solutions
 
Agile and test driven development
Agile and test driven developmentAgile and test driven development
Agile and test driven developmentAhmed El-Deeb
 
Global Day of Coderetreat'14 - Istanbul Event
Global Day of Coderetreat'14 - Istanbul EventGlobal Day of Coderetreat'14 - Istanbul Event
Global Day of Coderetreat'14 - Istanbul EventLemi Orhan Ergin
 
TDD - Test Driven Development
TDD - Test Driven DevelopmentTDD - Test Driven Development
TDD - Test Driven DevelopmentLim Chanmann
 
Ilari henrik
Ilari henrikIlari henrik
Ilari henrikCodeFest
 
From Gatekeeper to Partner by Kelsey Shannahan
From Gatekeeper to Partner by Kelsey ShannahanFrom Gatekeeper to Partner by Kelsey Shannahan
From Gatekeeper to Partner by Kelsey ShannahanQA or the Highway
 
The Essentials Of Test Driven Development
The Essentials Of Test Driven Development The Essentials Of Test Driven Development
The Essentials Of Test Driven Development Rock Interview
 
Become Software Tester or Developer
Become Software Tester or DeveloperBecome Software Tester or Developer
Become Software Tester or DeveloperKMS Technology
 
Tester career path
Tester career pathTester career path
Tester career pathgaoliang641
 
Testing As A Bottleneck - How Testing Slows Down Modern Development Processes...
Testing As A Bottleneck - How Testing Slows Down Modern Development Processes...Testing As A Bottleneck - How Testing Slows Down Modern Development Processes...
Testing As A Bottleneck - How Testing Slows Down Modern Development Processes...TEST Huddle
 
Introduction to Test Driven Development
Introduction to Test Driven DevelopmentIntroduction to Test Driven Development
Introduction to Test Driven DevelopmentMichael Denomy
 
Test driven development - Zombie proof your code
Test driven development - Zombie proof your codeTest driven development - Zombie proof your code
Test driven development - Zombie proof your codePascal Larocque
 
Agile Test Driven Development
Agile Test Driven DevelopmentAgile Test Driven Development
Agile Test Driven DevelopmentViraf Karai
 

What's hot (20)

Risk Mitigation Using Exploratory and Technical Testing | QASymphony Webinar
Risk Mitigation Using Exploratory and Technical Testing | QASymphony WebinarRisk Mitigation Using Exploratory and Technical Testing | QASymphony Webinar
Risk Mitigation Using Exploratory and Technical Testing | QASymphony Webinar
 
Tdd
TddTdd
Tdd
 
Why you should integrate peer code reviews in your software company
Why you should integrate peer code reviews in your software companyWhy you should integrate peer code reviews in your software company
Why you should integrate peer code reviews in your software company
 
Test driven development vs Behavior driven development
Test driven development vs Behavior driven developmentTest driven development vs Behavior driven development
Test driven development vs Behavior driven development
 
Agile and test driven development
Agile and test driven developmentAgile and test driven development
Agile and test driven development
 
Global Day of Coderetreat'14 - Istanbul Event
Global Day of Coderetreat'14 - Istanbul EventGlobal Day of Coderetreat'14 - Istanbul Event
Global Day of Coderetreat'14 - Istanbul Event
 
TDD - Test Driven Development
TDD - Test Driven DevelopmentTDD - Test Driven Development
TDD - Test Driven Development
 
Ilari henrik
Ilari henrikIlari henrik
Ilari henrik
 
From Gatekeeper to Partner by Kelsey Shannahan
From Gatekeeper to Partner by Kelsey ShannahanFrom Gatekeeper to Partner by Kelsey Shannahan
From Gatekeeper to Partner by Kelsey Shannahan
 
TDD with RSpec
TDD with RSpecTDD with RSpec
TDD with RSpec
 
The Essentials Of Test Driven Development
The Essentials Of Test Driven Development The Essentials Of Test Driven Development
The Essentials Of Test Driven Development
 
Test drive on driven development process
Test drive on driven development processTest drive on driven development process
Test drive on driven development process
 
Become Software Tester or Developer
Become Software Tester or DeveloperBecome Software Tester or Developer
Become Software Tester or Developer
 
Tester career path
Tester career pathTester career path
Tester career path
 
Test driven development(tdd)
Test driven development(tdd)Test driven development(tdd)
Test driven development(tdd)
 
Testing As A Bottleneck - How Testing Slows Down Modern Development Processes...
Testing As A Bottleneck - How Testing Slows Down Modern Development Processes...Testing As A Bottleneck - How Testing Slows Down Modern Development Processes...
Testing As A Bottleneck - How Testing Slows Down Modern Development Processes...
 
Introduction to Test Driven Development
Introduction to Test Driven DevelopmentIntroduction to Test Driven Development
Introduction to Test Driven Development
 
Test driven development - Zombie proof your code
Test driven development - Zombie proof your codeTest driven development - Zombie proof your code
Test driven development - Zombie proof your code
 
Agile Test Driven Development
Agile Test Driven DevelopmentAgile Test Driven Development
Agile Test Driven Development
 
Tdd com Java
Tdd com JavaTdd com Java
Tdd com Java
 

Similar to Code Review Skills for Pythonistas - Nina Zakharenko - EuroPython

Code Review
Code ReviewCode Review
Code ReviewRavi Raj
 
Code review best practice
Code review best practiceCode review best practice
Code review best practiceOren Digmi
 
Exploratory Testing As Code Eurostar23
Exploratory Testing As Code Eurostar23Exploratory Testing As Code Eurostar23
Exploratory Testing As Code Eurostar23Brendan Connolly
 
Exploratory Testing As Code
Exploratory Testing As CodeExploratory Testing As Code
Exploratory Testing As CodeBrendan Connolly
 
Agile Austin - Peer Code Review An Agile Process
Agile Austin -  Peer Code Review An Agile ProcessAgile Austin -  Peer Code Review An Agile Process
Agile Austin - Peer Code Review An Agile Processgsporar
 
Building Scalable Development Environments
Building Scalable Development EnvironmentsBuilding Scalable Development Environments
Building Scalable Development EnvironmentsShahar Evron
 
Bug best practice
Bug best practiceBug best practice
Bug best practicegaoliang641
 
Documenting Code - Patterns and Anti-patterns - NLPW 2016
Documenting Code - Patterns and Anti-patterns - NLPW 2016Documenting Code - Patterns and Anti-patterns - NLPW 2016
Documenting Code - Patterns and Anti-patterns - NLPW 2016Søren Lund
 
End-end tests as first class citizens - SeleniumConf 2020
End-end tests as first class citizens - SeleniumConf 2020End-end tests as first class citizens - SeleniumConf 2020
End-end tests as first class citizens - SeleniumConf 2020Abhijeet Vaikar
 
Testaus 2014 -seminaari: Arto Kiiskinen, Mirasys Oy. Case Mirasys: Toiminnoil...
Testaus 2014 -seminaari: Arto Kiiskinen, Mirasys Oy. Case Mirasys: Toiminnoil...Testaus 2014 -seminaari: Arto Kiiskinen, Mirasys Oy. Case Mirasys: Toiminnoil...
Testaus 2014 -seminaari: Arto Kiiskinen, Mirasys Oy. Case Mirasys: Toiminnoil...Tieturi Oy
 
Software presentation
Software presentationSoftware presentation
Software presentationJennaPrengle
 
Solving the 3 Biggest Questions in Continuous Testing
Solving the 3 Biggest Questions in Continuous TestingSolving the 3 Biggest Questions in Continuous Testing
Solving the 3 Biggest Questions in Continuous TestingPerfecto by Perforce
 
How to successfully grow a code review culture
How to successfullygrow a code review cultureHow to successfullygrow a code review culture
How to successfully grow a code review cultureDanylenko Max
 
Introducing theSmart Reviewer by theSmart.io
Introducing theSmart Reviewer by theSmart.ioIntroducing theSmart Reviewer by theSmart.io
Introducing theSmart Reviewer by theSmart.ioMark Evans
 
Mastering Agile Practices to Build High Performing Teams
Mastering Agile Practices to Build High Performing TeamsMastering Agile Practices to Build High Performing Teams
Mastering Agile Practices to Build High Performing TeamsAgileThought
 
Test driven development : software process
Test driven development : software process Test driven development : software process
Test driven development : software process Amin Taheri
 
Code Review Looking for a vulnerable code. Vlad Savitsky.
Code Review Looking for a vulnerable code. Vlad Savitsky.Code Review Looking for a vulnerable code. Vlad Savitsky.
Code Review Looking for a vulnerable code. Vlad Savitsky.DrupalCampDN
 
STAQ Development Manual (Redacted)
STAQ Development Manual (Redacted)STAQ Development Manual (Redacted)
STAQ Development Manual (Redacted)Mike Subelsky
 

Similar to Code Review Skills for Pythonistas - Nina Zakharenko - EuroPython (20)

Code Review
Code ReviewCode Review
Code Review
 
Code review best practice
Code review best practiceCode review best practice
Code review best practice
 
Exploratory Testing As Code Eurostar23
Exploratory Testing As Code Eurostar23Exploratory Testing As Code Eurostar23
Exploratory Testing As Code Eurostar23
 
Exploratory Testing As Code
Exploratory Testing As CodeExploratory Testing As Code
Exploratory Testing As Code
 
Presentation_TDD
Presentation_TDDPresentation_TDD
Presentation_TDD
 
Agile Austin - Peer Code Review An Agile Process
Agile Austin -  Peer Code Review An Agile ProcessAgile Austin -  Peer Code Review An Agile Process
Agile Austin - Peer Code Review An Agile Process
 
Building Scalable Development Environments
Building Scalable Development EnvironmentsBuilding Scalable Development Environments
Building Scalable Development Environments
 
Bug best practice
Bug best practiceBug best practice
Bug best practice
 
Documenting Code - Patterns and Anti-patterns - NLPW 2016
Documenting Code - Patterns and Anti-patterns - NLPW 2016Documenting Code - Patterns and Anti-patterns - NLPW 2016
Documenting Code - Patterns and Anti-patterns - NLPW 2016
 
Patch Review
Patch ReviewPatch Review
Patch Review
 
End-end tests as first class citizens - SeleniumConf 2020
End-end tests as first class citizens - SeleniumConf 2020End-end tests as first class citizens - SeleniumConf 2020
End-end tests as first class citizens - SeleniumConf 2020
 
Testaus 2014 -seminaari: Arto Kiiskinen, Mirasys Oy. Case Mirasys: Toiminnoil...
Testaus 2014 -seminaari: Arto Kiiskinen, Mirasys Oy. Case Mirasys: Toiminnoil...Testaus 2014 -seminaari: Arto Kiiskinen, Mirasys Oy. Case Mirasys: Toiminnoil...
Testaus 2014 -seminaari: Arto Kiiskinen, Mirasys Oy. Case Mirasys: Toiminnoil...
 
Software presentation
Software presentationSoftware presentation
Software presentation
 
Solving the 3 Biggest Questions in Continuous Testing
Solving the 3 Biggest Questions in Continuous TestingSolving the 3 Biggest Questions in Continuous Testing
Solving the 3 Biggest Questions in Continuous Testing
 
How to successfully grow a code review culture
How to successfullygrow a code review cultureHow to successfullygrow a code review culture
How to successfully grow a code review culture
 
Introducing theSmart Reviewer by theSmart.io
Introducing theSmart Reviewer by theSmart.ioIntroducing theSmart Reviewer by theSmart.io
Introducing theSmart Reviewer by theSmart.io
 
Mastering Agile Practices to Build High Performing Teams
Mastering Agile Practices to Build High Performing TeamsMastering Agile Practices to Build High Performing Teams
Mastering Agile Practices to Build High Performing Teams
 
Test driven development : software process
Test driven development : software process Test driven development : software process
Test driven development : software process
 
Code Review Looking for a vulnerable code. Vlad Savitsky.
Code Review Looking for a vulnerable code. Vlad Savitsky.Code Review Looking for a vulnerable code. Vlad Savitsky.
Code Review Looking for a vulnerable code. Vlad Savitsky.
 
STAQ Development Manual (Redacted)
STAQ Development Manual (Redacted)STAQ Development Manual (Redacted)
STAQ Development Manual (Redacted)
 

More from Nina Zakharenko

Recovering From Git Mistakes - Nina Zakharenko
Recovering From Git Mistakes - Nina ZakharenkoRecovering From Git Mistakes - Nina Zakharenko
Recovering From Git Mistakes - Nina ZakharenkoNina Zakharenko
 
Elegant Solutions for Everyday Python Problems Pycon 2018 - Nina Zakharenko
Elegant Solutions for Everyday Python Problems Pycon 2018 - Nina ZakharenkoElegant Solutions for Everyday Python Problems Pycon 2018 - Nina Zakharenko
Elegant Solutions for Everyday Python Problems Pycon 2018 - Nina ZakharenkoNina Zakharenko
 
Elegant Solutions For Everyday Python Problems - PyCon Canada 2017
Elegant Solutions For Everyday Python Problems - PyCon Canada 2017Elegant Solutions For Everyday Python Problems - PyCon Canada 2017
Elegant Solutions For Everyday Python Problems - PyCon Canada 2017Nina Zakharenko
 
Elegant Solutions For Everyday Python Problems - Nina Zakharenko
Elegant Solutions For Everyday Python Problems - Nina ZakharenkoElegant Solutions For Everyday Python Problems - Nina Zakharenko
Elegant Solutions For Everyday Python Problems - Nina ZakharenkoNina Zakharenko
 
Memory Management In Python The Basics
Memory Management In Python The BasicsMemory Management In Python The Basics
Memory Management In Python The BasicsNina Zakharenko
 
Djangocon 2014 - Django REST Framework - So Easy You Can Learn it in 25 Minutes
Djangocon 2014 - Django REST Framework - So Easy You Can Learn it in 25 MinutesDjangocon 2014 - Django REST Framework - So Easy You Can Learn it in 25 Minutes
Djangocon 2014 - Django REST Framework - So Easy You Can Learn it in 25 MinutesNina Zakharenko
 
Nina Zakharenko - Introduction to Git - Start SLC 2015
Nina Zakharenko - Introduction to Git - Start SLC 2015Nina Zakharenko - Introduction to Git - Start SLC 2015
Nina Zakharenko - Introduction to Git - Start SLC 2015Nina Zakharenko
 
Djangocon 2014 angular + django
Djangocon 2014 angular + djangoDjangocon 2014 angular + django
Djangocon 2014 angular + djangoNina Zakharenko
 

More from Nina Zakharenko (8)

Recovering From Git Mistakes - Nina Zakharenko
Recovering From Git Mistakes - Nina ZakharenkoRecovering From Git Mistakes - Nina Zakharenko
Recovering From Git Mistakes - Nina Zakharenko
 
Elegant Solutions for Everyday Python Problems Pycon 2018 - Nina Zakharenko
Elegant Solutions for Everyday Python Problems Pycon 2018 - Nina ZakharenkoElegant Solutions for Everyday Python Problems Pycon 2018 - Nina Zakharenko
Elegant Solutions for Everyday Python Problems Pycon 2018 - Nina Zakharenko
 
Elegant Solutions For Everyday Python Problems - PyCon Canada 2017
Elegant Solutions For Everyday Python Problems - PyCon Canada 2017Elegant Solutions For Everyday Python Problems - PyCon Canada 2017
Elegant Solutions For Everyday Python Problems - PyCon Canada 2017
 
Elegant Solutions For Everyday Python Problems - Nina Zakharenko
Elegant Solutions For Everyday Python Problems - Nina ZakharenkoElegant Solutions For Everyday Python Problems - Nina Zakharenko
Elegant Solutions For Everyday Python Problems - Nina Zakharenko
 
Memory Management In Python The Basics
Memory Management In Python The BasicsMemory Management In Python The Basics
Memory Management In Python The Basics
 
Djangocon 2014 - Django REST Framework - So Easy You Can Learn it in 25 Minutes
Djangocon 2014 - Django REST Framework - So Easy You Can Learn it in 25 MinutesDjangocon 2014 - Django REST Framework - So Easy You Can Learn it in 25 Minutes
Djangocon 2014 - Django REST Framework - So Easy You Can Learn it in 25 Minutes
 
Nina Zakharenko - Introduction to Git - Start SLC 2015
Nina Zakharenko - Introduction to Git - Start SLC 2015Nina Zakharenko - Introduction to Git - Start SLC 2015
Nina Zakharenko - Introduction to Git - Start SLC 2015
 
Djangocon 2014 angular + django
Djangocon 2014 angular + djangoDjangocon 2014 angular + django
Djangocon 2014 angular + django
 

Recently uploaded

unit 4 immunoblotting technique complete.pptx
unit 4 immunoblotting technique complete.pptxunit 4 immunoblotting technique complete.pptx
unit 4 immunoblotting technique complete.pptxBkGupta21
 
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024BookNet Canada
 
Moving Beyond Passwords: FIDO Paris Seminar.pdf
Moving Beyond Passwords: FIDO Paris Seminar.pdfMoving Beyond Passwords: FIDO Paris Seminar.pdf
Moving Beyond Passwords: FIDO Paris Seminar.pdfLoriGlavin3
 
Digital Identity is Under Attack: FIDO Paris Seminar.pptx
Digital Identity is Under Attack: FIDO Paris Seminar.pptxDigital Identity is Under Attack: FIDO Paris Seminar.pptx
Digital Identity is Under Attack: FIDO Paris Seminar.pptxLoriGlavin3
 
DSPy a system for AI to Write Prompts and Do Fine Tuning
DSPy a system for AI to Write Prompts and Do Fine TuningDSPy a system for AI to Write Prompts and Do Fine Tuning
DSPy a system for AI to Write Prompts and Do Fine TuningLars Bell
 
"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii SoldatenkoFwdays
 
How to write a Business Continuity Plan
How to write a Business Continuity PlanHow to write a Business Continuity Plan
How to write a Business Continuity PlanDatabarracks
 
Rise of the Machines: Known As Drones...
Rise of the Machines: Known As Drones...Rise of the Machines: Known As Drones...
Rise of the Machines: Known As Drones...Rick Flair
 
(How to Program) Paul Deitel, Harvey Deitel-Java How to Program, Early Object...
(How to Program) Paul Deitel, Harvey Deitel-Java How to Program, Early Object...(How to Program) Paul Deitel, Harvey Deitel-Java How to Program, Early Object...
(How to Program) Paul Deitel, Harvey Deitel-Java How to Program, Early Object...AliaaTarek5
 
A Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptxA Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptxLoriGlavin3
 
WordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your BrandWordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your Brandgvaughan
 
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptx
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptxPasskey Providers and Enabling Portability: FIDO Paris Seminar.pptx
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptxLoriGlavin3
 
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024BookNet Canada
 
SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024Lorenzo Miniero
 
SALESFORCE EDUCATION CLOUD | FEXLE SERVICES
SALESFORCE EDUCATION CLOUD | FEXLE SERVICESSALESFORCE EDUCATION CLOUD | FEXLE SERVICES
SALESFORCE EDUCATION CLOUD | FEXLE SERVICESmohitsingh558521
 
Time Series Foundation Models - current state and future directions
Time Series Foundation Models - current state and future directionsTime Series Foundation Models - current state and future directions
Time Series Foundation Models - current state and future directionsNathaniel Shimoni
 
Ryan Mahoney - Will Artificial Intelligence Replace Real Estate Agents
Ryan Mahoney - Will Artificial Intelligence Replace Real Estate AgentsRyan Mahoney - Will Artificial Intelligence Replace Real Estate Agents
Ryan Mahoney - Will Artificial Intelligence Replace Real Estate AgentsRyan Mahoney
 
Sample pptx for embedding into website for demo
Sample pptx for embedding into website for demoSample pptx for embedding into website for demo
Sample pptx for embedding into website for demoHarshalMandlekar2
 
How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.Curtis Poe
 
A Journey Into the Emotions of Software Developers
A Journey Into the Emotions of Software DevelopersA Journey Into the Emotions of Software Developers
A Journey Into the Emotions of Software DevelopersNicole Novielli
 

Recently uploaded (20)

unit 4 immunoblotting technique complete.pptx
unit 4 immunoblotting technique complete.pptxunit 4 immunoblotting technique complete.pptx
unit 4 immunoblotting technique complete.pptx
 
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
 
Moving Beyond Passwords: FIDO Paris Seminar.pdf
Moving Beyond Passwords: FIDO Paris Seminar.pdfMoving Beyond Passwords: FIDO Paris Seminar.pdf
Moving Beyond Passwords: FIDO Paris Seminar.pdf
 
Digital Identity is Under Attack: FIDO Paris Seminar.pptx
Digital Identity is Under Attack: FIDO Paris Seminar.pptxDigital Identity is Under Attack: FIDO Paris Seminar.pptx
Digital Identity is Under Attack: FIDO Paris Seminar.pptx
 
DSPy a system for AI to Write Prompts and Do Fine Tuning
DSPy a system for AI to Write Prompts and Do Fine TuningDSPy a system for AI to Write Prompts and Do Fine Tuning
DSPy a system for AI to Write Prompts and Do Fine Tuning
 
"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko
 
How to write a Business Continuity Plan
How to write a Business Continuity PlanHow to write a Business Continuity Plan
How to write a Business Continuity Plan
 
Rise of the Machines: Known As Drones...
Rise of the Machines: Known As Drones...Rise of the Machines: Known As Drones...
Rise of the Machines: Known As Drones...
 
(How to Program) Paul Deitel, Harvey Deitel-Java How to Program, Early Object...
(How to Program) Paul Deitel, Harvey Deitel-Java How to Program, Early Object...(How to Program) Paul Deitel, Harvey Deitel-Java How to Program, Early Object...
(How to Program) Paul Deitel, Harvey Deitel-Java How to Program, Early Object...
 
A Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptxA Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptx
 
WordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your BrandWordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your Brand
 
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptx
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptxPasskey Providers and Enabling Portability: FIDO Paris Seminar.pptx
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptx
 
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
 
SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024
 
SALESFORCE EDUCATION CLOUD | FEXLE SERVICES
SALESFORCE EDUCATION CLOUD | FEXLE SERVICESSALESFORCE EDUCATION CLOUD | FEXLE SERVICES
SALESFORCE EDUCATION CLOUD | FEXLE SERVICES
 
Time Series Foundation Models - current state and future directions
Time Series Foundation Models - current state and future directionsTime Series Foundation Models - current state and future directions
Time Series Foundation Models - current state and future directions
 
Ryan Mahoney - Will Artificial Intelligence Replace Real Estate Agents
Ryan Mahoney - Will Artificial Intelligence Replace Real Estate AgentsRyan Mahoney - Will Artificial Intelligence Replace Real Estate Agents
Ryan Mahoney - Will Artificial Intelligence Replace Real Estate Agents
 
Sample pptx for embedding into website for demo
Sample pptx for embedding into website for demoSample pptx for embedding into website for demo
Sample pptx for embedding into website for demo
 
How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.
 
A Journey Into the Emotions of Software Developers
A Journey Into the Emotions of Software DevelopersA Journey Into the Emotions of Software Developers
A Journey Into the Emotions of Software Developers
 

Code Review Skills for Pythonistas - Nina Zakharenko - EuroPython