SlideShare a Scribd company logo
Mondrian:
Code Review on the Web
Nov 30, 2006
Open Source Speakers Series
Guido van Rossum
guido@google.com
11/30/06 2
What is Code Review?
• When one developer writes code, another
developer is asked to review that code
• A careful line-by-line critique
• Happens in a non-threatening context
• Goal is cooperation, not fault-finding
• Often an integral part of coding process
• Involuntary code review happens when
debugging someone else's broken code
– Not so good; emotions may flare
11/30/06 3
Benefits of Code Review
• Two pairs of eyes catch more bugs (duh)
– Catch 'em early to save hours of debugging
• Enforce coding standards, style guides
– Keep overall readability & code quality high
• Mentoring of new developers
– Learn from mistakes without breaking stuff
• Establish trust relationships
– Prepare for more delegation
• A good alternative to pair programming
11/30/06 4
Code Review in Open Source
• Author & reviewer on separate computers
• Author invokes "diff -u" to create patch file
• Author mails patch file to reviewer
– or uploads to e.g. SourceForge patch manager
• Reviewer uses "patch" to recreate the files
• They email back-and-forth a few times
• Finally, reviewer submits into svn/cvs/etc
– patch author often has no privileges (yet)
• process helps "vetting" new developers
11/30/06 5
Google's Development Process
• (In theory :-)
• Single company-wide Perforce (p4) depot
– No developer branches
• Company-wide NFS
– Developers workspaces accessibly by others
• All code reviewed before submission
– All code-review email logged for auditors
• Wrapper "g4" implements superset of "p4"
– Originally a shell script; now a Python program
11/30/06 6
Google's Code Review Process
• All command-line and email based:
1. Author edits changes in workspace, tests etc.
2. Author send email to reviewer (a tool helps)
3. Reviewer views the diff (another tool helps)
4. Reviewer sends mail back (regular mail reply)
5. Rinse and repeat (using regular mail replies)
6. When reviewer replies "lgtm", author submits
• lgtm = looks good to me
11/30/06 7
Original, Minimal Tools
• "g4 change" invoked by author defines set
of files involved, adding comments
• "g4 mail" sends form email to reviewer
– (also integrated with g4 change call)
• "g4 diff" invoked by reviewer diffs files
straight out of author's workspace
– "tkdiff" X11-based side-by-side differ
• "g4 reply" synthesizes reply mail
– optional; not used very much
11/30/06 8
Problems With Old Process
• VPN usage (reviewers working from home)
– can’t use tkdiff, or it is too slow
• Line numbers change as code evolves
– line-oriented comments get out of sync
• Can't diff between pre-submit revisions
– reviewer must keep manual track of evolution
• Email can get lost in inbox; no work flow
– reviewer: what do I still need to review?
– author: is my code reviewed?
11/30/06 9
Enter Mondrian
• Web-server based
– Addresses VPN issues
– Snapshots all previously reviewed versions
• Shows side-by-side diff (like tkdiff)
• Lets you add in-line comments
– Collect comments into a single message
• Also receives and organizes email
– Not all parties need to use Mondrian
11/30/06 10
Live Demo
• Show dashboard
– explain categories; hover over CL, flags, users, description
• Show someone else’s dashboard
• Show a group’s TO DO list (build-grouplet)
• Show a CL view
– browse some comments (expand/collapse)
– follow links to Sourcerer, p4web
– show Request code review form; Upload snapshot form; Approve form
• Show a file view
– use n/p to navigate diff chunks
– navigate between files
– show intra-region diffs
– add, edit, discard, reply to in-line comments
• Show Review and publish form
11/30/06 11
How It Started
• As a Noogler, I needed a starter project
• Someone proposed a code review web app
• Decided to freshen up my web knowledge
• Learned some Django on the way
• Adopted WSGI (PEP 333) while I was at it
• Learned about Google's Bigtable and p4lib
• Early prototype was immediately hot!
11/30/06 12
How It Works (Overview)
• Bigtable (a Googly db) used to store:
– Change metadata (description, list of files, …)
– Comments (entered on web or received email)
– File snapshots taken from user workspaces
– Per-user data (active changes, last view dates)
• Web server talks to user, Bigtable, p4
– Also to NFS, SSH when fetching snapshots
• Mail server processes incoming email
– Storing them as comments
11/30/06 13
Snapshots
• Copies of files taken from user's directory
– Updated whenever change view visited
– Solve two problems with the old process/tools
• What if the files aren't on NFS?
– Linux: use SSH/SCP to user's workstation
– Others: author uploads plain old patch
• Snapshots and comments are kept forever
– To satisfy auditors
– To track extended history of changes
11/30/06 14
Web User Interface
• Mostly pretty traditional HTML with CSS
– Django templates, wsgiref server (all Python)
• Some JavaScript for UI niceties
– Expand, collapse comments
– Show unified diffs in-line in CL view (AJAX)
• Full file view uses more AJAX:
– Keyboard navigation
– Inline draft comment editing
• Avoids full-page refresh
11/30/06 15
Editing Inline Draft Comments
• Each line in the diff is two table rows:
– <tr><td> 123 textA</td><td> 127 textB</td></tr>
– <tr><td>…</td> <td>…</td> </tr>
– First row displays left & right diff text
– Next row (hidden) used for inline comments
– Each <td> has a unique id {old,new}+lineno
• Double click on first row calls JavaScript
– Inserts form into next row
– “Submit” sends form data to server
– Server sends back HTML to replace form
11/30/06 16
Mail Server
• Receives every email sent to review logs
• Ignores messages sent by Mondrian itself
• Parses subject looking for revision #
• Inserts message as comment into Bigtable
• Also updates reviewers’ TO DO queues
• Implemented using standard smtpd.py
11/30/06 17
Performance
• Mostly fast enough, on just one server
• Most of the work is done elsewhere:
– Bigtable+GFS server infrastructure
– Perforce server
– In the browser (rendering reams of HTML)
• What's slow:
– Contention for Perforce
– Generating HTML for loaded dashboard
– Diffing huge files (uses Python's difflib)

More Related Content

ODP
Introduction to Version Control
PPT
Version Control System
PPTX
How to write test in node.js
PPT
ASP.NET Session 3
PPT
ASP.NET Session 2
PPTX
Csharp introduction
KEY
Overview of Testing Talks at Pycon
Introduction to Version Control
Version Control System
How to write test in node.js
ASP.NET Session 3
ASP.NET Session 2
Csharp introduction
Overview of Testing Talks at Pycon

Viewers also liked (20)

PPTX
Mauritius mandla
PPTX
Doing science!
PDF
Introduction r-programming
PDF
Sponsor pay manifesto
PPT
η ελλαδα μια βολτα μέρος 1ο
PPT
Kdqt eng chap012
PPS
10 11 ignacio aldekoa laburpena
PPTX
Ερευνητική Εργασία Τάξης Α'
PPTX
Recursos oa
PPT
dene/Sunumlar/cab_abst.ppt
PPTX
Zoolander
PPTX
Why Should You Exhibit at eTailing India Expo M17?
PDF
Atom Payment Solution Presentation by at Mr Shaival Shah
PPTX
What's New in NAV 2013
PDF
Why Logistics Company Should Partner With eTailing India?
PPTX
Funding Trends In Indian eCommerce 2014
DOCX
Flipkart and Paytm to Play out Last eCommerce Festive Sales
PPTX
Boost Checkout Conversions at eTailing India Expo'17
PPT
dene/ders1.ppt
DOCX
Finally, Amazon Prime Video Launched in India
Mauritius mandla
Doing science!
Introduction r-programming
Sponsor pay manifesto
η ελλαδα μια βολτα μέρος 1ο
Kdqt eng chap012
10 11 ignacio aldekoa laburpena
Ερευνητική Εργασία Τάξης Α'
Recursos oa
dene/Sunumlar/cab_abst.ppt
Zoolander
Why Should You Exhibit at eTailing India Expo M17?
Atom Payment Solution Presentation by at Mr Shaival Shah
What's New in NAV 2013
Why Logistics Company Should Partner With eTailing India?
Funding Trends In Indian eCommerce 2014
Flipkart and Paytm to Play out Last eCommerce Festive Sales
Boost Checkout Conversions at eTailing India Expo'17
dene/ders1.ppt
Finally, Amazon Prime Video Launched in India
Ad

Similar to Code review on the Web - Google (20)

PDF
Code the docs-yu liu
PPTX
NDC London 2020 - Challenges of Managing CoreFx Repo -- Karel Zikmund
PDF
Engage 2020 - Best Practices for analyzing Domino Applications
PDF
Agileand saas davepatterson_armandofox_050813webinar
PDF
Contributing to open source using Git
PDF
Code for Startup MVP (Ruby on Rails) Session 1
PDF
Spring Roo Add-On Development & Distribution
PPTX
Stencil JS for Framework Free Web Components | Steven Zelek
PPTX
Guidelines for Working with Contract Developers in Evergreen
PPTX
Mixing d ps building architecture on the cross cutting example
PPTX
Migrating To GitHub
PPTX
Introducing Systems Analysis Design Development
ODP
B-Translator as a Software Engineering Project
PPTX
Socialite, the Open Source Status Feed Part 1: Design Overview and Scaling fo...
PDF
L06 a versioning_system_overview
PPTX
Github
PDF
Web Tools for GemStone/S
PPTX
Presentation for git jira and linux
PPSX
Hackaton for health 2015 - Sharing the Code we Make
PPTX
Introducing systems analysis, design & development Concepts
Code the docs-yu liu
NDC London 2020 - Challenges of Managing CoreFx Repo -- Karel Zikmund
Engage 2020 - Best Practices for analyzing Domino Applications
Agileand saas davepatterson_armandofox_050813webinar
Contributing to open source using Git
Code for Startup MVP (Ruby on Rails) Session 1
Spring Roo Add-On Development & Distribution
Stencil JS for Framework Free Web Components | Steven Zelek
Guidelines for Working with Contract Developers in Evergreen
Mixing d ps building architecture on the cross cutting example
Migrating To GitHub
Introducing Systems Analysis Design Development
B-Translator as a Software Engineering Project
Socialite, the Open Source Status Feed Part 1: Design Overview and Scaling fo...
L06 a versioning_system_overview
Github
Web Tools for GemStone/S
Presentation for git jira and linux
Hackaton for health 2015 - Sharing the Code we Make
Introducing systems analysis, design & development Concepts
Ad

Recently uploaded (20)

PDF
Encapsulation theory and applications.pdf
PPT
Teaching material agriculture food technology
PDF
TokAI - TikTok AI Agent : The First AI Application That Analyzes 10,000+ Vira...
PPTX
KOM of Painting work and Equipment Insulation REV00 update 25-dec.pptx
PDF
Blue Purple Modern Animated Computer Science Presentation.pdf.pdf
PDF
Per capita expenditure prediction using model stacking based on satellite ima...
DOCX
The AUB Centre for AI in Media Proposal.docx
PDF
Chapter 3 Spatial Domain Image Processing.pdf
PPTX
Spectroscopy.pptx food analysis technology
PDF
Build a system with the filesystem maintained by OSTree @ COSCUP 2025
PPTX
Effective Security Operations Center (SOC) A Modern, Strategic, and Threat-In...
PDF
Spectral efficient network and resource selection model in 5G networks
PDF
Encapsulation_ Review paper, used for researhc scholars
PDF
Dropbox Q2 2025 Financial Results & Investor Presentation
PPTX
MYSQL Presentation for SQL database connectivity
PDF
How UI/UX Design Impacts User Retention in Mobile Apps.pdf
PDF
NewMind AI Weekly Chronicles - August'25 Week I
PDF
MIND Revenue Release Quarter 2 2025 Press Release
PPTX
Programs and apps: productivity, graphics, security and other tools
PDF
Empathic Computing: Creating Shared Understanding
Encapsulation theory and applications.pdf
Teaching material agriculture food technology
TokAI - TikTok AI Agent : The First AI Application That Analyzes 10,000+ Vira...
KOM of Painting work and Equipment Insulation REV00 update 25-dec.pptx
Blue Purple Modern Animated Computer Science Presentation.pdf.pdf
Per capita expenditure prediction using model stacking based on satellite ima...
The AUB Centre for AI in Media Proposal.docx
Chapter 3 Spatial Domain Image Processing.pdf
Spectroscopy.pptx food analysis technology
Build a system with the filesystem maintained by OSTree @ COSCUP 2025
Effective Security Operations Center (SOC) A Modern, Strategic, and Threat-In...
Spectral efficient network and resource selection model in 5G networks
Encapsulation_ Review paper, used for researhc scholars
Dropbox Q2 2025 Financial Results & Investor Presentation
MYSQL Presentation for SQL database connectivity
How UI/UX Design Impacts User Retention in Mobile Apps.pdf
NewMind AI Weekly Chronicles - August'25 Week I
MIND Revenue Release Quarter 2 2025 Press Release
Programs and apps: productivity, graphics, security and other tools
Empathic Computing: Creating Shared Understanding

Code review on the Web - Google

  • 1. Mondrian: Code Review on the Web Nov 30, 2006 Open Source Speakers Series Guido van Rossum guido@google.com
  • 2. 11/30/06 2 What is Code Review? • When one developer writes code, another developer is asked to review that code • A careful line-by-line critique • Happens in a non-threatening context • Goal is cooperation, not fault-finding • Often an integral part of coding process • Involuntary code review happens when debugging someone else's broken code – Not so good; emotions may flare
  • 3. 11/30/06 3 Benefits of Code Review • Two pairs of eyes catch more bugs (duh) – Catch 'em early to save hours of debugging • Enforce coding standards, style guides – Keep overall readability & code quality high • Mentoring of new developers – Learn from mistakes without breaking stuff • Establish trust relationships – Prepare for more delegation • A good alternative to pair programming
  • 4. 11/30/06 4 Code Review in Open Source • Author & reviewer on separate computers • Author invokes "diff -u" to create patch file • Author mails patch file to reviewer – or uploads to e.g. SourceForge patch manager • Reviewer uses "patch" to recreate the files • They email back-and-forth a few times • Finally, reviewer submits into svn/cvs/etc – patch author often has no privileges (yet) • process helps "vetting" new developers
  • 5. 11/30/06 5 Google's Development Process • (In theory :-) • Single company-wide Perforce (p4) depot – No developer branches • Company-wide NFS – Developers workspaces accessibly by others • All code reviewed before submission – All code-review email logged for auditors • Wrapper "g4" implements superset of "p4" – Originally a shell script; now a Python program
  • 6. 11/30/06 6 Google's Code Review Process • All command-line and email based: 1. Author edits changes in workspace, tests etc. 2. Author send email to reviewer (a tool helps) 3. Reviewer views the diff (another tool helps) 4. Reviewer sends mail back (regular mail reply) 5. Rinse and repeat (using regular mail replies) 6. When reviewer replies "lgtm", author submits • lgtm = looks good to me
  • 7. 11/30/06 7 Original, Minimal Tools • "g4 change" invoked by author defines set of files involved, adding comments • "g4 mail" sends form email to reviewer – (also integrated with g4 change call) • "g4 diff" invoked by reviewer diffs files straight out of author's workspace – "tkdiff" X11-based side-by-side differ • "g4 reply" synthesizes reply mail – optional; not used very much
  • 8. 11/30/06 8 Problems With Old Process • VPN usage (reviewers working from home) – can’t use tkdiff, or it is too slow • Line numbers change as code evolves – line-oriented comments get out of sync • Can't diff between pre-submit revisions – reviewer must keep manual track of evolution • Email can get lost in inbox; no work flow – reviewer: what do I still need to review? – author: is my code reviewed?
  • 9. 11/30/06 9 Enter Mondrian • Web-server based – Addresses VPN issues – Snapshots all previously reviewed versions • Shows side-by-side diff (like tkdiff) • Lets you add in-line comments – Collect comments into a single message • Also receives and organizes email – Not all parties need to use Mondrian
  • 10. 11/30/06 10 Live Demo • Show dashboard – explain categories; hover over CL, flags, users, description • Show someone else’s dashboard • Show a group’s TO DO list (build-grouplet) • Show a CL view – browse some comments (expand/collapse) – follow links to Sourcerer, p4web – show Request code review form; Upload snapshot form; Approve form • Show a file view – use n/p to navigate diff chunks – navigate between files – show intra-region diffs – add, edit, discard, reply to in-line comments • Show Review and publish form
  • 11. 11/30/06 11 How It Started • As a Noogler, I needed a starter project • Someone proposed a code review web app • Decided to freshen up my web knowledge • Learned some Django on the way • Adopted WSGI (PEP 333) while I was at it • Learned about Google's Bigtable and p4lib • Early prototype was immediately hot!
  • 12. 11/30/06 12 How It Works (Overview) • Bigtable (a Googly db) used to store: – Change metadata (description, list of files, …) – Comments (entered on web or received email) – File snapshots taken from user workspaces – Per-user data (active changes, last view dates) • Web server talks to user, Bigtable, p4 – Also to NFS, SSH when fetching snapshots • Mail server processes incoming email – Storing them as comments
  • 13. 11/30/06 13 Snapshots • Copies of files taken from user's directory – Updated whenever change view visited – Solve two problems with the old process/tools • What if the files aren't on NFS? – Linux: use SSH/SCP to user's workstation – Others: author uploads plain old patch • Snapshots and comments are kept forever – To satisfy auditors – To track extended history of changes
  • 14. 11/30/06 14 Web User Interface • Mostly pretty traditional HTML with CSS – Django templates, wsgiref server (all Python) • Some JavaScript for UI niceties – Expand, collapse comments – Show unified diffs in-line in CL view (AJAX) • Full file view uses more AJAX: – Keyboard navigation – Inline draft comment editing • Avoids full-page refresh
  • 15. 11/30/06 15 Editing Inline Draft Comments • Each line in the diff is two table rows: – <tr><td> 123 textA</td><td> 127 textB</td></tr> – <tr><td>…</td> <td>…</td> </tr> – First row displays left & right diff text – Next row (hidden) used for inline comments – Each <td> has a unique id {old,new}+lineno • Double click on first row calls JavaScript – Inserts form into next row – “Submit” sends form data to server – Server sends back HTML to replace form
  • 16. 11/30/06 16 Mail Server • Receives every email sent to review logs • Ignores messages sent by Mondrian itself • Parses subject looking for revision # • Inserts message as comment into Bigtable • Also updates reviewers’ TO DO queues • Implemented using standard smtpd.py
  • 17. 11/30/06 17 Performance • Mostly fast enough, on just one server • Most of the work is done elsewhere: – Bigtable+GFS server infrastructure – Perforce server – In the browser (rendering reams of HTML) • What's slow: – Contention for Perforce – Generating HTML for loaded dashboard – Diffing huge files (uses Python's difflib)