Practical

Code Reviews

Ilko Kacharov

PHP UG
Edition

Experience

Lead Dev @Proxiad / @Mailjet

 

11+ years in PHP

Zend Framework Certified Architect

Engineer in communications

Why

should we bother

  • Loosing developer's time
  • No short term ROI
  • Inefficient for small teams
  • Arguing over formatting and code style
  • Introduce unstated bussiness requirements
  • Tension and problems in the team
  • Highly subjective and might get personal
  • Missing milestones if done late

Why

do we need the process

  • Reading code gets you in the mood for coding
  • Keeps you up to date with the codebase
  • Helps others in the right moment
  • Reduces back and forth with QA team
  • Provides early feedback on the code
  • Better overall performance of the team
  • Coding becomes social activity
  • Starts discussions and generates ideas

What

  • Code repetition
  • Functionality duplication
  • Introducing or reducing technical debt
  • Bugs and inconsistencies
  • Dependencies to libraries and repos
  • Security and sensitive data protection
  • Performance bottlenecks
  • Maintainability

to look for in the code

When

You know the code

  • Suggest architecture improvements
  • Add code snippets (grabs attention, legitimacy, facts)         
     

You don't know the code

  • Ask for details or explanation (you might learn something)
  • Too obvious things to ignore
     

Gut feelings & raised eyebrows

  • Check your sources first (links & references to source code)
  • Uncontroversial approach

 

to comment the code

How

to be formally polite 

Proposals

We can use … instead

We better do … before we try to …

You can check if … is available

How

to be formally polite 

Questions

We've changed this recently. Have you seen it?

Have you checked the … at … ?

Is this ... gonna be able to do ... if … ?

How

to be formally polite 

Appeals

Please do … so it includes …

Please use … when …

Can you please add … when doing …

How

to be formally polite 

Positivity

Good catch!

Clever approach!

Never knew we can use that here

How

to be formally polite 

Opinions are last

I think this already exists at …

I think we can do … instead

The one who gives only opinion takes no responsibility

To improve is to change

To perfect is to change often

 

Winston Churchill   

«

 »

First feedback

30% done feedback

  • Early feedback on the approach
  • Focus on architecture decisions
  • Skip minor details, code style

Second feedback

90% done feedback

  • Final touches
  • Code style and trivial things
  • Configurations and environment

Iterations and passes

  • Code review checklist for consistency
  • Monitor and track security patterns
  • Review individual commits on meaningful changes
  • Early feedback on general issues
  • Daily code review routine

~ 40 lines

~ 200 lines

> 500 lines

Lines changed vs Number of interactions

https://github.com/ansible/ansible

35k pull requests

graph based on 2.2k

Releases

Tools

to gather the data

zendframework/zend-expressive

guzzlehttp/guzzle

tracy/tracy

 

Github REST / GraphQL

GraphQL

or just a REST

REST

  • Good documentation
  • Easy to use
  • Api requests in a loop
  • Too much unused data
  • Data aggregation in app

GraphQL

  • Query debugger tool
  • Get what you need, even aggregated
  • Cursor pagination behavior (before/after)
  • Variables sent with query
  • Still in development (bugs)

Links

Tools

GitHub | BitBucket | GitLab

  • Diff

  • History

  • Blame

  • Ignore whitespace

  • Ticket references #

  • Pre-commit hooks

  • Pull Requests

  • Labels (ask me later)

  • Discussions

  • Inline resolving of conflicts

  • Automatic code quality tools

  • Slack / Email notifications

to improve the process

Thank you!

@kachar136
https://github.com/kachar/practical-code-reviews/
https://slides.com/kachar/practical-code-reviews/

Questions?

@kachar136

Practical Code Reviews [PHPUG]

By Ilko Kacharov

Practical Code Reviews [PHPUG]

  • 815