SlideShare a Scribd company logo
TIM PETTERSEN • SENIOR DEVELOPER • ATLASSIAN • @KANNONBOY
Code review
vs
Pull requests
@kannonboy
Code review at Atlassian
2006
2007
Atlassian acquires
Cenqua, starts using
Crucible @kannonboy
@kannonboy
2006
2007
Atlassian acquires
Cenqua, starts using
Crucible
Atlassian acquires @kannonboy
@kannonboy
2007 Cenqua, starts using
Crucible
2010 Atlassian acquires
Bitbucket
2011 Work starts on “Caviar”
! @kannonboy
@kannonboy
2010 Atlassian acquires
Bitbucket
2011 Work starts on “Caviar”
2012 Stash 1.0 ships
!
@kannonboy
@kannonboy
2011 Work starts on “Caviar”
2012 Stash 1.0 ships
!
Stash 2.0 ships with
pull requests
Unread status
@kannonboy
@kannonboy
2012 Stash 1.0 ships
Stash 2.0 ships with
pull requests
Merge checks
Comment drift
Unread status
Conflict markers
Build status integration @kannonboy
@kannonboy
Stash renamed to
Bitbucket Server2015
Merge checks
Conflict markers
Build status integration
Reviewer suggestions
Branch permissions
Comment likes
Enhanced branch permissions
Iterative review
Merge strategies
Reviewer statuses @kannonboy
@kannonboy
Bitbucket Server2015
Comment likes
Enhanced branch permissions
Iterative review
Merge strategies
Reviewer statuses
Today
@kannonboy
@kannonboy
TYPES OF REVIEW
YOU NEED CODE REVIEW
CODE REVIEW @ ATLASSIAN
TIPS FOR TEAMS
Agenda
Automated tests
@kannonboy
Automated tests
@kannonboy
human judgement needed
?
“what-evs”
bad API decision
O(n!) algorithm
technical debt
Automated tests
@kannonboy
Code
Review
Photo: Yogi (Flickr)
@kannonboy
Better
Code
Shared
Knowledge
Team
Ownership
@kannonboy
G =
1
R+1
Developer guilt
@kannonboy
Team
Ownership
@kannonboy
Team
Ownership
@kannonboy
Better
Code
Shared
Knowledge
Team
Ownership
@kannonboy
Code reviews take
negative time
@kannonboy
Reviews and releases
10
20
30
40
Daily Weekly Monthly Quarterly Yearly
Code Review No Code Review
Source: Atlassian Git Survey 2013
@kannonboy
Types of code review
@kannonboy
Pull requests
Code review
Post-commit review
Pre-commit review
master
for/master
Staging area @kannonboy
Pre-commit review
master
@kannonboy
Pre-commit review
dev $project-dev@example.com
master
maintainer @kannonboy
// flat fees and taxes
final float customsFee = 5.5f;
final float immigrationFee = 7f;
final float federalTransportTax = .025f;
public float calculateAirfare(float baseFare) {
float fare = baseFare;
fare += immigrationFee + customsFee;
fare *=
return fare;
}
AirfareCalculator.java
federalTransportTax;
@kannonboy
// flat fees and taxes
final float customsFee = 5.5f;
final float immigrationFee = 7f;
final float federalTransportTax = .025f;
public float calculateAirfare(float baseFare) {
float fare = baseFare;
fare += immigrationFee + customsFee;
fare *=
return fare;
}
(1 + )
AirfareCalculator.java
federalTransportTax ;
@kannonboy
Pre-commit review
From: Tim Pettersen <tim@atlassian.com>
Date: Mon, 12 Sep 2016 10:24:10 +1000
Subject: [PATCH] Calculate federal transport tax correctly
--- a/com/atlassian/airfare/AirfareCalculator.java
+++ b/com/atlassian/airfare/AirfareCalculator.java
@@ -10,7 +10,7 @@
public float calculateAirfare(float baseFare) {
float fare = baseFare;
fare += immigrationFee + customsFee;
- fare *= federalTransportTax;
+ fare *= (1 + federalTransportTax);
return fare;
}
$ git format-patch HEAD~1 --stdout
@kannonboy
Pre-commit review
dev
maintainer
public float calculateAirfare(float baseFare) {
float fare = baseFare;
fare += immigrationFee + customsFee;
- fare *= federalTransportTax;
+ fare *= (1 + federalTransportTax);
return fare;
}
Subject: [PATCH] Calculate federal transport tax correctly
@kannonboy
>
>
>
>
>
The braces are unnecessary.
Pre-commit review
dev
maintainer
public float calculateAirfare(float baseFare) {
float fare = baseFare;
fare += immigrationFee + customsFee;
- fare *= federalTransportTax;
+ fare *= (1 + federalTransportTax);
return fare;
}
Subject: Re: [PATCH] Calculate federal transport tax correctly
>
>
@kannonboy
>
>
>
>
>
>
>
> >
>
Technically true, but I think they add clarity.
>
>
>
>
>
>
>
The braces are unnecessary.
Pre-commit review
dev
maintainer
public float calculateAirfare(float baseFare) {
float fare = baseFare;
fare += immigrationFee + customsFee;
- fare *= federalTransportTax;
+ fare *= (1 + federalTransportTax);
return fare;
}
Subject: Re: Re: [PATCH] Calculate federal transport tax correctly
@kannonboy
> > > > > > > > > > > > > > > > > > > > > > > > > > > > >
> > > > > > > > > > > > > > > > > > > > > > > > > > > > >
> > > > > > > > > > > > > > > > > > > > > > > > > > > > >
> > > > > > > > > > > > > > > > > > > > > > > > > > > > >
> > > > > > > > > > > > > > > > > > > > > > > > > > > > >
> > > > > > > > > > > > > > > > > > > > > > > > > > > > >
> > > > > > > > > > > > > > > > > > > > > > > > > > > > >
> > > > > > > > > > > > > > > > > > > > > > > > > > > > >
> > > > > > > > > > > > > > > > > > > > > > > > > > > > >
> > > > > > > > > > > > > > > > > > > > > > > > > > > > >
> > > > > > > > > > > > > > > > > > > > > > > > > > > > >
> > > > > > > > > > > > > > > > > > > > > > > > > > > > >
Pre-commit review
dev
maintainer
Subject: Re: Re: Re: Re: Re: Re: Re: Re: Re: Re: Re: Re:
@kannonboy
Iteration
m
aster
@kannonboy
Pre-commit review
Linus Torvalds*
Module
maintainers
File / driver
maintainers
Contributors
linux-kernel@vger.kernel.org
* Gross oversimplification,
check out: bit.ly/linux-dev
@kannonboy
Pre-commit review
Junio C Hamano*
Contributors
git@vger.kernel.org
* Also an oversimplification
@kannonboy
Pull requests
Post-commit review
Pre-commit review
master
for/master
Staging area
Pre-commit review
Version control agnostic
Difficult to read
High barrier to submit patches
Simple and decentralized
Difficult to iterate
Easy to keep ‘000s of people in the loop
Have to manually merge work
@kannonboy
Post-commit review
@kannonboy
Flexible structure
master
master
patches & untracked files
commits
branches
specific filesmultiple repos
@kannonboy
Iterative review
Branch
diff
Merge
diff
Pull request diffs
@kannonboy
Iterative review
Branch
diff
Post-commit review diffs
Arbitrary commit diffs
@kannonboy
Iterative review in
@kannonboy
Iterative review in
@kannonboy
Not an SCM
SCM host
(e.g. Bitbucket)
Review host
(e.g. Crucible)
Dev team
push & pull
code review
slurp
slurp
slurp
slurp
@kannonboy
Post-commit review
Post-commit review
Supports popular CVCS and DVCS
Have to manually merge work
Flexible review content
Need a separate VCS host
Easy to iterate
Hard to enforce process
@kannonboy
Pull requests
master
for/master
Staging area @kannonboy
Gerrit
and DIFFY
The Kung Foo
Review Cuckoo
@kannonboy
Gerrit is very “Git-y”
$ git config -f ~/gerrit/etc/gerrit.config gerrit.canonicalWebUrl
http://localhost:8080/
@kannonboy
Staging area review
for/master
master
reviewers approved?
verified (build passing)?
Dev team
fetch
push
@kannonboy
From: Gerrit Code Review - A Quick Introduction
@kannonboy
From: Gerrit Code Review - A Quick Introduction
+2
+1
0
-1
-2
@kannonboy
“squash commits first”
$ git push origin HEAD:refs/for/master
# typey type type
$ git commit -am “Review feedback”
Counting objects: 2108776, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (59/59), done.
Writing objects: 100% (86/86), 893.21 KiB, done.
Total 86 (delta 0), reused 0 (delta 0)
! [remote rejected] HEAD -> refs/for/master (squash commits first)
error: failed to push some refs to ‘ssh://...'
@kannonboy
“squash commits first”
for/master
@kannonboy
“squash commits first”
for/master
push
@kannonboy
“squash commits first”
for/master
push
push --force
@kannonboy
“squash commits first”
for/master
push
push --force
push --force
@kannonboy
From: Gerrit Code Review - A Quick Introduction
@kannonboy
Pull requests
Post-commit review
Pre-commit review
master
for/master
Staging area
Staging area review
Sophisticated policy enforcement
Steep learning curve to use & administer
Iteration is a little awkward
FOSS project built in Java, on JGit
Git only
Clean commit history
@kannonboy
Pull requests
it review
@kannonboy
Branches only
master
master
patches & untracked files
commits
branches
specific filesmultiple repos
@kannonboy
Pull requests
review before merging
> Code review
@kannonboy
Pull requests > Code review
Passing build
Reviewer sign-off
Ready for deployment
@kannonboy
Pull requests > Code review
Passing build
Reviewer sign-off
Ready for deployment
@kannonboy
Two developers about to
press the “Merge” button
@kannonboy
Merge Strategies
@kannonboy
@kannonboy
--no-ff
--ff-only
--squash --ff-only
--squash
--ff
@kannonboy
git merge --no-ff
@kannonboy
m
aster
feature/JIRA-123
“Always create a merge commit.”
git merge --no-ff
@kannonboy
m
asterfeature/JIRA-123
“Always create a merge commit.”
git merge --ff
@kannonboy
m
aster
feature/JIRA-123
“Fast forward if you can, otherwise
create a merge commit.”
git merge --ff
@kannonboy
m
aster
feature/JIRA-123
“Fast forward if you can, otherwise
create a merge commit.”
git merge --ff
@kannonboy
m
aster
“Fast forward if you can, otherwise
create a merge commit.”
git merge --ff
@kannonboy
m
aster
“Fast forward if you can, otherwise
create a merge commit.”
git merge --ff-only
@kannonboy
m
aster
feature/JIRA-123
“Only allow fast forwards.”
git merge --ff-only
@kannonboy
m
aster
feature/JIRA-123
“Only allow fast forwards.”
git merge --ff-only
@kannonboy
m
aster
“Only allow fast forwards.”
git merge --ff-only
@kannonboy
m
aster
“Only allow fast forwards.”
git merge --ff-only
@kannonboy
m
aster
“Only allow fast forwards.”
git merge --ff-only
@kannonboy
m
aster
“Only allow fast forwards.”
git merge --squash
@kannonboy
“Combine commits on branch into a new commit
on master.”
m
aster
feature/JIRA-123
git merge --squash
@kannonboy
“Combine commits on branch into a new commit
on master.”
m
aster
git merge --squash 
@kannonboy
“Combine commits on branch into a new commit on master.
Fail if master has any commits that branch doesn’t.”
m
aster
--ff-only
git merge --squash 
@kannonboy
“Combine commits on branch into a new commit on master.
Fail if master has any commits that branch doesn’t.”
m
aster
--ff-only
git merge --squash 
@kannonboy
“Combine commits on branch into a new commit on master.
Fail if master has any commits that branch doesn’t.”
m
aster
--ff-only
Merge Commit Fast forward Squash
Concise history
Lose context of how
features evolved
Which should I use?
“Ugly” history
Full traceability
Hard to screw up
mostly some
--no-ff --ff-only --squash
@kannonboy
No merge commits
Verbose history
Requires rebasing
Pull requests
bit.ly/git-lfs
Sophisticated policy enforcement
Less flexible review content
DVCS had some limitations around file size
Choice of merge strategies
Multiple team members can author code under review
Git & Mercurial
@kannonboy
pull requests
@kannonboy
Tim’s
tips for
top ten
1. One issue, one pull request
= 
@kannonboy
1. One issue, one pull request
# what’s shipping?
$ git branch --merged
# what’s left to ship?
$ git branch --no-merged
@kannonboy
master
IN REVIEW DONEIN PROGRESSOPEN
@kannonboy
Automatic Transitions
feature/JIRA-30
master
IN REVIEW DONEIN PROGRESSOPEN
Branch created!
@kannonboy
Automatic Transitions
feature/JIRA-30
master
IN REVIEW DONEIN PROGRESSOPEN
Pull Request Created!
@kannonboy
Automatic Transitions
feature/JIRA-30
master
IN REVIEW DONEIN PROGRESSOPEN
Pull Request Merged!
@kannonboy
Automatic Transitions
2. Minimum TWO approvals before merge
@kannonboy
2. Minimum TWO approvals before merge
3. Have 1.5x - 2.5x that number reviewers
@kannonboy
Fewer reviewers find more defects
0
7.5
15
22.5
30
1 2 3 4 5 6 7 8 9
Defects/kLoC
Number of Reviewers
@kannonboy
source: bit.ly/review-stats
More reviewers spend less time
0
7
14
21
28
1 2 3 4 5 6
Minutesspent/reviewer
Number of Reviewers
@kannonboy
source: bit.ly/review-stats
4. Use blame to pick reviewers
@kannonboy
4. Use blame to pick reviewers
$ npm install -g git-guilt
# find blame delta for current branch
$ git guilt `git merge-base master HEAD` HEAD
Alice Foo ++++++++++++++++++++++++(239)
Bob Bar ++++++++
Eve Baz -------
Mira Ted ----------------
Bec Opal ------------------------(-159)
@kannonboy
4. Use blame to pick reviewers
bit.ly/suggest-reviewers @kannonboy
4. Use blame to pick reviewers
bit.ly/suggest-reviewers @kannonboy
4. Use blame to pick reviewers
bit.ly/suggest-reviewers @kannonboy
5. @mention specialists
@kannonboy
6. Stuck in review?
Make Tuesday & Thursday inbox zero days
@kannonboy
betterCode;
7. Move comments into code
review
comments
// comments
// in code
@kannonboy
8. Build a team policy, as a team…
…and enforce it! @kannonboy
9. Add screenshots for UI/UX changes
(gifs / videos are even better) @kannonboy
9. Add screenshots for UI/UX changes
(gifs / videos are even better) @kannonboy
Monosnap GIPHY ScreenFlow
@kannonboy
Ask a programmer to review 10
lines of code, they'll find 10 issues.
Ask them to do 500 lines and
they'll say it looks good.
@GIRAYOZIL
“
”
10. Keep it concise
10. Keep it conciseSecondsperline
Lines of Code
1 line per second
100 lines per second
@kannonboy
source: bit.ly/review-stats
Code Review vs. Pull requests
Need to review multiple
repos at once
Not on Git
Heavily iterative workflow
Literally everyone else
Dendrophobia
+
@kannonboy
(Traditional)
@kannonboy
bitbucket.org
Bitbucket
atlassian.com/crucible
Crucible
gerritcodereview.com
Gerrit
Looking
for
more?
Follow me for occasional Git &
Bitbucket trivia

More Related Content

What's hot

Matt Gauger - Git & Github web414 December 2010
Matt Gauger - Git & Github web414 December 2010Matt Gauger - Git & Github web414 December 2010
Matt Gauger - Git & Github web414 December 2010
Matt Gauger
 
SymfonyCon Madrid 2014 - Rock Solid Deployment of Symfony Apps
SymfonyCon Madrid 2014 - Rock Solid Deployment of Symfony AppsSymfonyCon Madrid 2014 - Rock Solid Deployment of Symfony Apps
SymfonyCon Madrid 2014 - Rock Solid Deployment of Symfony Apps
Pablo Godel
 
Michelin Starred Cooking with Chef
Michelin Starred Cooking with ChefMichelin Starred Cooking with Chef
Michelin Starred Cooking with Chef
Jon Cowie
 
Cutting the Kubernetes Monorepo in pieces – never learnt more about git
Cutting the Kubernetes Monorepo in pieces – never learnt more about gitCutting the Kubernetes Monorepo in pieces – never learnt more about git
Cutting the Kubernetes Monorepo in pieces – never learnt more about git
Stefan Schimanski
 
Deployment Patterns in the Ruby on Rails World
Deployment Patterns in the Ruby on Rails WorldDeployment Patterns in the Ruby on Rails World
Deployment Patterns in the Ruby on Rails World
Nikhil Mungel
 
Extending Kubernetes – Admission webhooks
Extending Kubernetes – Admission webhooksExtending Kubernetes – Admission webhooks
Extending Kubernetes – Admission webhooks
Stefan Schimanski
 
Jenkins Docker
Jenkins DockerJenkins Docker
Jenkins Docker
Alex Soto
 
Automated Deployments with Ansible
Automated Deployments with AnsibleAutomated Deployments with Ansible
Automated Deployments with Ansible
Martin Etmajer
 
Becoming a Git Master
Becoming a Git MasterBecoming a Git Master
Becoming a Git Master
Nicola Paolucci
 
Migrating to a bazel based CI system: 6 learnings
Migrating to a bazel based CI system: 6 learnings Migrating to a bazel based CI system: 6 learnings
Migrating to a bazel based CI system: 6 learnings
Or Shachar
 
Github - Git Training Slides: Foundations
Github - Git Training Slides: FoundationsGithub - Git Training Slides: Foundations
Github - Git Training Slides: Foundations
Lee Hanxue
 
Tracking huge files with Git LFS - LinuxCon 2016
Tracking huge files with Git LFS - LinuxCon 2016Tracking huge files with Git LFS - LinuxCon 2016
Tracking huge files with Git LFS - LinuxCon 2016
Tim Pettersen
 
手把手教你如何串接 Log 到各種網路服務
手把手教你如何串接 Log 到各種網路服務手把手教你如何串接 Log 到各種網路服務
手把手教你如何串接 Log 到各種網路服務
Mu Chun Wang
 
Lessons from Etsy: Avoiding Kitchen Nightmares - #ChefConf 2012
Lessons from Etsy: Avoiding Kitchen Nightmares - #ChefConf 2012Lessons from Etsy: Avoiding Kitchen Nightmares - #ChefConf 2012
Lessons from Etsy: Avoiding Kitchen Nightmares - #ChefConf 2012
Patrick McDonnell
 
Deep dark-side of git: How git works internally
Deep dark-side of git: How git works internallyDeep dark-side of git: How git works internally
Deep dark-side of git: How git works internally
SeongJae Park
 
Git Anti-Patterns - Extended Version With 28 Common Anti-Patterns) - SCTurkey...
Git Anti-Patterns - Extended Version With 28 Common Anti-Patterns) - SCTurkey...Git Anti-Patterns - Extended Version With 28 Common Anti-Patterns) - SCTurkey...
Git Anti-Patterns - Extended Version With 28 Common Anti-Patterns) - SCTurkey...
Lemi Orhan Ergin
 
Portland PUG April 2014: Beaker 101: Acceptance Test Everything
Portland PUG April 2014: Beaker 101: Acceptance Test EverythingPortland PUG April 2014: Beaker 101: Acceptance Test Everything
Portland PUG April 2014: Beaker 101: Acceptance Test Everything
Puppet
 
aptly: Debian repository management tool
aptly: Debian repository management toolaptly: Debian repository management tool
aptly: Debian repository management tool
Andrey Smirnov
 
Migrating to a Bazel-based CI System: 6 Learnings - Or Shachar
Migrating to a Bazel-based CI System: 6 Learnings - Or ShacharMigrating to a Bazel-based CI System: 6 Learnings - Or Shachar
Migrating to a Bazel-based CI System: 6 Learnings - Or Shachar
Wix Engineering
 

What's hot (20)

Matt Gauger - Git & Github web414 December 2010
Matt Gauger - Git & Github web414 December 2010Matt Gauger - Git & Github web414 December 2010
Matt Gauger - Git & Github web414 December 2010
 
SymfonyCon Madrid 2014 - Rock Solid Deployment of Symfony Apps
SymfonyCon Madrid 2014 - Rock Solid Deployment of Symfony AppsSymfonyCon Madrid 2014 - Rock Solid Deployment of Symfony Apps
SymfonyCon Madrid 2014 - Rock Solid Deployment of Symfony Apps
 
Michelin Starred Cooking with Chef
Michelin Starred Cooking with ChefMichelin Starred Cooking with Chef
Michelin Starred Cooking with Chef
 
Cutting the Kubernetes Monorepo in pieces – never learnt more about git
Cutting the Kubernetes Monorepo in pieces – never learnt more about gitCutting the Kubernetes Monorepo in pieces – never learnt more about git
Cutting the Kubernetes Monorepo in pieces – never learnt more about git
 
Deployment Patterns in the Ruby on Rails World
Deployment Patterns in the Ruby on Rails WorldDeployment Patterns in the Ruby on Rails World
Deployment Patterns in the Ruby on Rails World
 
Extending Kubernetes – Admission webhooks
Extending Kubernetes – Admission webhooksExtending Kubernetes – Admission webhooks
Extending Kubernetes – Admission webhooks
 
Jenkins Docker
Jenkins DockerJenkins Docker
Jenkins Docker
 
Automated Deployments with Ansible
Automated Deployments with AnsibleAutomated Deployments with Ansible
Automated Deployments with Ansible
 
Becoming a Git Master
Becoming a Git MasterBecoming a Git Master
Becoming a Git Master
 
Migrating to a bazel based CI system: 6 learnings
Migrating to a bazel based CI system: 6 learnings Migrating to a bazel based CI system: 6 learnings
Migrating to a bazel based CI system: 6 learnings
 
Github - Git Training Slides: Foundations
Github - Git Training Slides: FoundationsGithub - Git Training Slides: Foundations
Github - Git Training Slides: Foundations
 
Tracking huge files with Git LFS - LinuxCon 2016
Tracking huge files with Git LFS - LinuxCon 2016Tracking huge files with Git LFS - LinuxCon 2016
Tracking huge files with Git LFS - LinuxCon 2016
 
手把手教你如何串接 Log 到各種網路服務
手把手教你如何串接 Log 到各種網路服務手把手教你如何串接 Log 到各種網路服務
手把手教你如何串接 Log 到各種網路服務
 
Lessons from Etsy: Avoiding Kitchen Nightmares - #ChefConf 2012
Lessons from Etsy: Avoiding Kitchen Nightmares - #ChefConf 2012Lessons from Etsy: Avoiding Kitchen Nightmares - #ChefConf 2012
Lessons from Etsy: Avoiding Kitchen Nightmares - #ChefConf 2012
 
Deep dark-side of git: How git works internally
Deep dark-side of git: How git works internallyDeep dark-side of git: How git works internally
Deep dark-side of git: How git works internally
 
Git Anti-Patterns - Extended Version With 28 Common Anti-Patterns) - SCTurkey...
Git Anti-Patterns - Extended Version With 28 Common Anti-Patterns) - SCTurkey...Git Anti-Patterns - Extended Version With 28 Common Anti-Patterns) - SCTurkey...
Git Anti-Patterns - Extended Version With 28 Common Anti-Patterns) - SCTurkey...
 
Dependency Management With Pinto
Dependency Management With PintoDependency Management With Pinto
Dependency Management With Pinto
 
Portland PUG April 2014: Beaker 101: Acceptance Test Everything
Portland PUG April 2014: Beaker 101: Acceptance Test EverythingPortland PUG April 2014: Beaker 101: Acceptance Test Everything
Portland PUG April 2014: Beaker 101: Acceptance Test Everything
 
aptly: Debian repository management tool
aptly: Debian repository management toolaptly: Debian repository management tool
aptly: Debian repository management tool
 
Migrating to a Bazel-based CI System: 6 Learnings - Or Shachar
Migrating to a Bazel-based CI System: 6 Learnings - Or ShacharMigrating to a Bazel-based CI System: 6 Learnings - Or Shachar
Migrating to a Bazel-based CI System: 6 Learnings - Or Shachar
 

Viewers also liked

Git 더하기 GitHub(구름IDE 환경)
Git 더하기 GitHub(구름IDE 환경)Git 더하기 GitHub(구름IDE 환경)
Git 더하기 GitHub(구름IDE 환경)
Junyoung Lee
 
Verifying Microservice Integrations with Contract Testing
Verifying Microservice Integrations with Contract TestingVerifying Microservice Integrations with Contract Testing
Verifying Microservice Integrations with Contract Testing
Atlassian
 
Popular Git Workflows You Haven't Heard About
Popular Git Workflows You Haven't Heard AboutPopular Git Workflows You Haven't Heard About
Popular Git Workflows You Haven't Heard About
Atlassian
 
Mock Servers - Fake All the Things!
Mock Servers - Fake All the Things!Mock Servers - Fake All the Things!
Mock Servers - Fake All the Things!
Atlassian
 
Releasing the Monolith On a Daily Basis
Releasing the Monolith On a Daily BasisReleasing the Monolith On a Daily Basis
Releasing the Monolith On a Daily Basis
Atlassian
 
Tracking Huge Files with Git LFS
Tracking Huge Files with Git LFSTracking Huge Files with Git LFS
Tracking Huge Files with Git LFS
Atlassian
 
Scaling Without Expanding: a DevOps Story
Scaling Without Expanding: a DevOps StoryScaling Without Expanding: a DevOps Story
Scaling Without Expanding: a DevOps Story
Atlassian
 
Bitbucket Pipelines: Serverless CI/CD That Will Save Your Life
Bitbucket Pipelines: Serverless CI/CD That Will Save Your LifeBitbucket Pipelines: Serverless CI/CD That Will Save Your Life
Bitbucket Pipelines: Serverless CI/CD That Will Save Your Life
Atlassian
 
Takeaways From Migrating to Git and Bitbucket Server
Takeaways From Migrating to Git and Bitbucket ServerTakeaways From Migrating to Git and Bitbucket Server
Takeaways From Migrating to Git and Bitbucket Server
Atlassian
 
Continuous Delivery in the Cloud with Bitbucket Pipelines
Continuous Delivery in the Cloud with Bitbucket PipelinesContinuous Delivery in the Cloud with Bitbucket Pipelines
Continuous Delivery in the Cloud with Bitbucket Pipelines
Atlassian
 
Scaling Your First 1000 Containers with Docker
Scaling Your First 1000 Containers with DockerScaling Your First 1000 Containers with Docker
Scaling Your First 1000 Containers with Docker
Atlassian
 
버전관리를 들어본적 없는 사람들을 위한 DVCS - Git
버전관리를 들어본적 없는 사람들을 위한 DVCS - Git버전관리를 들어본적 없는 사람들을 위한 DVCS - Git
버전관리를 들어본적 없는 사람들을 위한 DVCS - Git
민태 김
 

Viewers also liked (12)

Git 더하기 GitHub(구름IDE 환경)
Git 더하기 GitHub(구름IDE 환경)Git 더하기 GitHub(구름IDE 환경)
Git 더하기 GitHub(구름IDE 환경)
 
Verifying Microservice Integrations with Contract Testing
Verifying Microservice Integrations with Contract TestingVerifying Microservice Integrations with Contract Testing
Verifying Microservice Integrations with Contract Testing
 
Popular Git Workflows You Haven't Heard About
Popular Git Workflows You Haven't Heard AboutPopular Git Workflows You Haven't Heard About
Popular Git Workflows You Haven't Heard About
 
Mock Servers - Fake All the Things!
Mock Servers - Fake All the Things!Mock Servers - Fake All the Things!
Mock Servers - Fake All the Things!
 
Releasing the Monolith On a Daily Basis
Releasing the Monolith On a Daily BasisReleasing the Monolith On a Daily Basis
Releasing the Monolith On a Daily Basis
 
Tracking Huge Files with Git LFS
Tracking Huge Files with Git LFSTracking Huge Files with Git LFS
Tracking Huge Files with Git LFS
 
Scaling Without Expanding: a DevOps Story
Scaling Without Expanding: a DevOps StoryScaling Without Expanding: a DevOps Story
Scaling Without Expanding: a DevOps Story
 
Bitbucket Pipelines: Serverless CI/CD That Will Save Your Life
Bitbucket Pipelines: Serverless CI/CD That Will Save Your LifeBitbucket Pipelines: Serverless CI/CD That Will Save Your Life
Bitbucket Pipelines: Serverless CI/CD That Will Save Your Life
 
Takeaways From Migrating to Git and Bitbucket Server
Takeaways From Migrating to Git and Bitbucket ServerTakeaways From Migrating to Git and Bitbucket Server
Takeaways From Migrating to Git and Bitbucket Server
 
Continuous Delivery in the Cloud with Bitbucket Pipelines
Continuous Delivery in the Cloud with Bitbucket PipelinesContinuous Delivery in the Cloud with Bitbucket Pipelines
Continuous Delivery in the Cloud with Bitbucket Pipelines
 
Scaling Your First 1000 Containers with Docker
Scaling Your First 1000 Containers with DockerScaling Your First 1000 Containers with Docker
Scaling Your First 1000 Containers with Docker
 
버전관리를 들어본적 없는 사람들을 위한 DVCS - Git
버전관리를 들어본적 없는 사람들을 위한 DVCS - Git버전관리를 들어본적 없는 사람들을 위한 DVCS - Git
버전관리를 들어본적 없는 사람들을 위한 DVCS - Git
 

Similar to Code reviews vs Pull requests

Code Reviews vs. Pull Requests
Code Reviews vs. Pull RequestsCode Reviews vs. Pull Requests
Code Reviews vs. Pull Requests
Atlassian
 
Puppet Camp Melbourne Nov 2014 - A Build Engineering Team’s Journey of Infras...
Puppet Camp Melbourne Nov 2014 - A Build Engineering Team’s Journey of Infras...Puppet Camp Melbourne Nov 2014 - A Build Engineering Team’s Journey of Infras...
Puppet Camp Melbourne Nov 2014 - A Build Engineering Team’s Journey of Infras...
Peter Leschev
 
Baremetal deployment scale
Baremetal deployment scaleBaremetal deployment scale
Baremetal deployment scalebaremetal
 
10 ways to shoot yourself in the foot with kubernetes, #9 will surprise you! ...
10 ways to shoot yourself in the foot with kubernetes, #9 will surprise you! ...10 ways to shoot yourself in the foot with kubernetes, #9 will surprise you! ...
10 ways to shoot yourself in the foot with kubernetes, #9 will surprise you! ...
Laurent Bernaille
 
Networking in Kubernetes
Networking in KubernetesNetworking in Kubernetes
Networking in Kubernetes
Minhan Xia
 
KazooCon 2014 - Kazoo Scalability
KazooCon 2014 - Kazoo ScalabilityKazooCon 2014 - Kazoo Scalability
KazooCon 2014 - Kazoo Scalability2600Hz
 
Kubernetes Networking
Kubernetes NetworkingKubernetes Networking
Kubernetes Networking
CJ Cullen
 
Deploying Next Gen Systems with Zero Downtime
Deploying Next Gen Systems with Zero DowntimeDeploying Next Gen Systems with Zero Downtime
Deploying Next Gen Systems with Zero Downtime
Twilio Inc
 
Continous Delivering a PHP application
Continous Delivering a PHP applicationContinous Delivering a PHP application
Continous Delivering a PHP application
Javier López
 
Kafka on Kubernetes: Keeping It Simple (Nikki Thean, Etsy) Kafka Summit SF 2019
Kafka on Kubernetes: Keeping It Simple (Nikki Thean, Etsy) Kafka Summit SF 2019Kafka on Kubernetes: Keeping It Simple (Nikki Thean, Etsy) Kafka Summit SF 2019
Kafka on Kubernetes: Keeping It Simple (Nikki Thean, Etsy) Kafka Summit SF 2019
confluent
 
Fisl - Deployment
Fisl - DeploymentFisl - Deployment
Fisl - Deployment
Fabio Akita
 
One commit, one release. Continuously delivering a Symfony project.
One commit, one release. Continuously delivering a Symfony project.One commit, one release. Continuously delivering a Symfony project.
One commit, one release. Continuously delivering a Symfony project.
Javier López
 
Baremetal deployment
Baremetal deploymentBaremetal deployment
Baremetal deploymentbaremetal
 
Mojolicious
MojoliciousMojolicious
Mojolicious
Marcus Ramberg
 
Deploying Symfony | symfony.cat
Deploying Symfony | symfony.catDeploying Symfony | symfony.cat
Deploying Symfony | symfony.cat
Pablo Godel
 
Enjoy privacy on Gitlab
Enjoy privacy on GitlabEnjoy privacy on Gitlab
Enjoy privacy on Gitlab
Maxis Kao
 
Pinto+Stratopan+Love
Pinto+Stratopan+LovePinto+Stratopan+Love
Pinto+Stratopan+Love
Jeffrey Ryan Thalhammer
 
Immutable infrastructure:觀念與實作 (建議)
Immutable infrastructure:觀念與實作 (建議)Immutable infrastructure:觀念與實作 (建議)
Immutable infrastructure:觀念與實作 (建議)
William Yeh
 
[2C4]Clustered computing with CoreOS, fleet and etcd
[2C4]Clustered computing with CoreOS, fleet and etcd[2C4]Clustered computing with CoreOS, fleet and etcd
[2C4]Clustered computing with CoreOS, fleet and etcd
NAVER D2
 
ApacheCon 2014 - What's New in Apache httpd 2.4
ApacheCon 2014 - What's New in Apache httpd 2.4ApacheCon 2014 - What's New in Apache httpd 2.4
ApacheCon 2014 - What's New in Apache httpd 2.4
Jim Jagielski
 

Similar to Code reviews vs Pull requests (20)

Code Reviews vs. Pull Requests
Code Reviews vs. Pull RequestsCode Reviews vs. Pull Requests
Code Reviews vs. Pull Requests
 
Puppet Camp Melbourne Nov 2014 - A Build Engineering Team’s Journey of Infras...
Puppet Camp Melbourne Nov 2014 - A Build Engineering Team’s Journey of Infras...Puppet Camp Melbourne Nov 2014 - A Build Engineering Team’s Journey of Infras...
Puppet Camp Melbourne Nov 2014 - A Build Engineering Team’s Journey of Infras...
 
Baremetal deployment scale
Baremetal deployment scaleBaremetal deployment scale
Baremetal deployment scale
 
10 ways to shoot yourself in the foot with kubernetes, #9 will surprise you! ...
10 ways to shoot yourself in the foot with kubernetes, #9 will surprise you! ...10 ways to shoot yourself in the foot with kubernetes, #9 will surprise you! ...
10 ways to shoot yourself in the foot with kubernetes, #9 will surprise you! ...
 
Networking in Kubernetes
Networking in KubernetesNetworking in Kubernetes
Networking in Kubernetes
 
KazooCon 2014 - Kazoo Scalability
KazooCon 2014 - Kazoo ScalabilityKazooCon 2014 - Kazoo Scalability
KazooCon 2014 - Kazoo Scalability
 
Kubernetes Networking
Kubernetes NetworkingKubernetes Networking
Kubernetes Networking
 
Deploying Next Gen Systems with Zero Downtime
Deploying Next Gen Systems with Zero DowntimeDeploying Next Gen Systems with Zero Downtime
Deploying Next Gen Systems with Zero Downtime
 
Continous Delivering a PHP application
Continous Delivering a PHP applicationContinous Delivering a PHP application
Continous Delivering a PHP application
 
Kafka on Kubernetes: Keeping It Simple (Nikki Thean, Etsy) Kafka Summit SF 2019
Kafka on Kubernetes: Keeping It Simple (Nikki Thean, Etsy) Kafka Summit SF 2019Kafka on Kubernetes: Keeping It Simple (Nikki Thean, Etsy) Kafka Summit SF 2019
Kafka on Kubernetes: Keeping It Simple (Nikki Thean, Etsy) Kafka Summit SF 2019
 
Fisl - Deployment
Fisl - DeploymentFisl - Deployment
Fisl - Deployment
 
One commit, one release. Continuously delivering a Symfony project.
One commit, one release. Continuously delivering a Symfony project.One commit, one release. Continuously delivering a Symfony project.
One commit, one release. Continuously delivering a Symfony project.
 
Baremetal deployment
Baremetal deploymentBaremetal deployment
Baremetal deployment
 
Mojolicious
MojoliciousMojolicious
Mojolicious
 
Deploying Symfony | symfony.cat
Deploying Symfony | symfony.catDeploying Symfony | symfony.cat
Deploying Symfony | symfony.cat
 
Enjoy privacy on Gitlab
Enjoy privacy on GitlabEnjoy privacy on Gitlab
Enjoy privacy on Gitlab
 
Pinto+Stratopan+Love
Pinto+Stratopan+LovePinto+Stratopan+Love
Pinto+Stratopan+Love
 
Immutable infrastructure:觀念與實作 (建議)
Immutable infrastructure:觀念與實作 (建議)Immutable infrastructure:觀念與實作 (建議)
Immutable infrastructure:觀念與實作 (建議)
 
[2C4]Clustered computing with CoreOS, fleet and etcd
[2C4]Clustered computing with CoreOS, fleet and etcd[2C4]Clustered computing with CoreOS, fleet and etcd
[2C4]Clustered computing with CoreOS, fleet and etcd
 
ApacheCon 2014 - What's New in Apache httpd 2.4
ApacheCon 2014 - What's New in Apache httpd 2.4ApacheCon 2014 - What's New in Apache httpd 2.4
ApacheCon 2014 - What's New in Apache httpd 2.4
 

Recently uploaded

Globus Compute wth IRI Workflows - GlobusWorld 2024
Globus Compute wth IRI Workflows - GlobusWorld 2024Globus Compute wth IRI Workflows - GlobusWorld 2024
Globus Compute wth IRI Workflows - GlobusWorld 2024
Globus
 
Globus Connect Server Deep Dive - GlobusWorld 2024
Globus Connect Server Deep Dive - GlobusWorld 2024Globus Connect Server Deep Dive - GlobusWorld 2024
Globus Connect Server Deep Dive - GlobusWorld 2024
Globus
 
Providing Globus Services to Users of JASMIN for Environmental Data Analysis
Providing Globus Services to Users of JASMIN for Environmental Data AnalysisProviding Globus Services to Users of JASMIN for Environmental Data Analysis
Providing Globus Services to Users of JASMIN for Environmental Data Analysis
Globus
 
Enterprise Resource Planning System in Telangana
Enterprise Resource Planning System in TelanganaEnterprise Resource Planning System in Telangana
Enterprise Resource Planning System in Telangana
NYGGS Automation Suite
 
Corporate Management | Session 3 of 3 | Tendenci AMS
Corporate Management | Session 3 of 3 | Tendenci AMSCorporate Management | Session 3 of 3 | Tendenci AMS
Corporate Management | Session 3 of 3 | Tendenci AMS
Tendenci - The Open Source AMS (Association Management Software)
 
TROUBLESHOOTING 9 TYPES OF OUTOFMEMORYERROR
TROUBLESHOOTING 9 TYPES OF OUTOFMEMORYERRORTROUBLESHOOTING 9 TYPES OF OUTOFMEMORYERROR
TROUBLESHOOTING 9 TYPES OF OUTOFMEMORYERROR
Tier1 app
 
SOCRadar Research Team: Latest Activities of IntelBroker
SOCRadar Research Team: Latest Activities of IntelBrokerSOCRadar Research Team: Latest Activities of IntelBroker
SOCRadar Research Team: Latest Activities of IntelBroker
SOCRadar
 
May Marketo Masterclass, London MUG May 22 2024.pdf
May Marketo Masterclass, London MUG May 22 2024.pdfMay Marketo Masterclass, London MUG May 22 2024.pdf
May Marketo Masterclass, London MUG May 22 2024.pdf
Adele Miller
 
AI Pilot Review: The World’s First Virtual Assistant Marketing Suite
AI Pilot Review: The World’s First Virtual Assistant Marketing SuiteAI Pilot Review: The World’s First Virtual Assistant Marketing Suite
AI Pilot Review: The World’s First Virtual Assistant Marketing Suite
Google
 
Innovating Inference - Remote Triggering of Large Language Models on HPC Clus...
Innovating Inference - Remote Triggering of Large Language Models on HPC Clus...Innovating Inference - Remote Triggering of Large Language Models on HPC Clus...
Innovating Inference - Remote Triggering of Large Language Models on HPC Clus...
Globus
 
Understanding Globus Data Transfers with NetSage
Understanding Globus Data Transfers with NetSageUnderstanding Globus Data Transfers with NetSage
Understanding Globus Data Transfers with NetSage
Globus
 
Cracking the code review at SpringIO 2024
Cracking the code review at SpringIO 2024Cracking the code review at SpringIO 2024
Cracking the code review at SpringIO 2024
Paco van Beckhoven
 
Navigating the Metaverse: A Journey into Virtual Evolution"
Navigating the Metaverse: A Journey into Virtual Evolution"Navigating the Metaverse: A Journey into Virtual Evolution"
Navigating the Metaverse: A Journey into Virtual Evolution"
Donna Lenk
 
Dominate Social Media with TubeTrivia AI’s Addictive Quiz Videos.pdf
Dominate Social Media with TubeTrivia AI’s Addictive Quiz Videos.pdfDominate Social Media with TubeTrivia AI’s Addictive Quiz Videos.pdf
Dominate Social Media with TubeTrivia AI’s Addictive Quiz Videos.pdf
AMB-Review
 
Using IESVE for Room Loads Analysis - Australia & New Zealand
Using IESVE for Room Loads Analysis - Australia & New ZealandUsing IESVE for Room Loads Analysis - Australia & New Zealand
Using IESVE for Room Loads Analysis - Australia & New Zealand
IES VE
 
Developing Distributed High-performance Computing Capabilities of an Open Sci...
Developing Distributed High-performance Computing Capabilities of an Open Sci...Developing Distributed High-performance Computing Capabilities of an Open Sci...
Developing Distributed High-performance Computing Capabilities of an Open Sci...
Globus
 
Quarkus Hidden and Forbidden Extensions
Quarkus Hidden and Forbidden ExtensionsQuarkus Hidden and Forbidden Extensions
Quarkus Hidden and Forbidden Extensions
Max Andersen
 
Webinar: Salesforce Document Management 2.0 - Smarter, Faster, Better
Webinar: Salesforce Document Management 2.0 - Smarter, Faster, BetterWebinar: Salesforce Document Management 2.0 - Smarter, Faster, Better
Webinar: Salesforce Document Management 2.0 - Smarter, Faster, Better
XfilesPro
 
How to Position Your Globus Data Portal for Success Ten Good Practices
How to Position Your Globus Data Portal for Success Ten Good PracticesHow to Position Your Globus Data Portal for Success Ten Good Practices
How to Position Your Globus Data Portal for Success Ten Good Practices
Globus
 
Beyond Event Sourcing - Embracing CRUD for Wix Platform - Java.IL
Beyond Event Sourcing - Embracing CRUD for Wix Platform - Java.ILBeyond Event Sourcing - Embracing CRUD for Wix Platform - Java.IL
Beyond Event Sourcing - Embracing CRUD for Wix Platform - Java.IL
Natan Silnitsky
 

Recently uploaded (20)

Globus Compute wth IRI Workflows - GlobusWorld 2024
Globus Compute wth IRI Workflows - GlobusWorld 2024Globus Compute wth IRI Workflows - GlobusWorld 2024
Globus Compute wth IRI Workflows - GlobusWorld 2024
 
Globus Connect Server Deep Dive - GlobusWorld 2024
Globus Connect Server Deep Dive - GlobusWorld 2024Globus Connect Server Deep Dive - GlobusWorld 2024
Globus Connect Server Deep Dive - GlobusWorld 2024
 
Providing Globus Services to Users of JASMIN for Environmental Data Analysis
Providing Globus Services to Users of JASMIN for Environmental Data AnalysisProviding Globus Services to Users of JASMIN for Environmental Data Analysis
Providing Globus Services to Users of JASMIN for Environmental Data Analysis
 
Enterprise Resource Planning System in Telangana
Enterprise Resource Planning System in TelanganaEnterprise Resource Planning System in Telangana
Enterprise Resource Planning System in Telangana
 
Corporate Management | Session 3 of 3 | Tendenci AMS
Corporate Management | Session 3 of 3 | Tendenci AMSCorporate Management | Session 3 of 3 | Tendenci AMS
Corporate Management | Session 3 of 3 | Tendenci AMS
 
TROUBLESHOOTING 9 TYPES OF OUTOFMEMORYERROR
TROUBLESHOOTING 9 TYPES OF OUTOFMEMORYERRORTROUBLESHOOTING 9 TYPES OF OUTOFMEMORYERROR
TROUBLESHOOTING 9 TYPES OF OUTOFMEMORYERROR
 
SOCRadar Research Team: Latest Activities of IntelBroker
SOCRadar Research Team: Latest Activities of IntelBrokerSOCRadar Research Team: Latest Activities of IntelBroker
SOCRadar Research Team: Latest Activities of IntelBroker
 
May Marketo Masterclass, London MUG May 22 2024.pdf
May Marketo Masterclass, London MUG May 22 2024.pdfMay Marketo Masterclass, London MUG May 22 2024.pdf
May Marketo Masterclass, London MUG May 22 2024.pdf
 
AI Pilot Review: The World’s First Virtual Assistant Marketing Suite
AI Pilot Review: The World’s First Virtual Assistant Marketing SuiteAI Pilot Review: The World’s First Virtual Assistant Marketing Suite
AI Pilot Review: The World’s First Virtual Assistant Marketing Suite
 
Innovating Inference - Remote Triggering of Large Language Models on HPC Clus...
Innovating Inference - Remote Triggering of Large Language Models on HPC Clus...Innovating Inference - Remote Triggering of Large Language Models on HPC Clus...
Innovating Inference - Remote Triggering of Large Language Models on HPC Clus...
 
Understanding Globus Data Transfers with NetSage
Understanding Globus Data Transfers with NetSageUnderstanding Globus Data Transfers with NetSage
Understanding Globus Data Transfers with NetSage
 
Cracking the code review at SpringIO 2024
Cracking the code review at SpringIO 2024Cracking the code review at SpringIO 2024
Cracking the code review at SpringIO 2024
 
Navigating the Metaverse: A Journey into Virtual Evolution"
Navigating the Metaverse: A Journey into Virtual Evolution"Navigating the Metaverse: A Journey into Virtual Evolution"
Navigating the Metaverse: A Journey into Virtual Evolution"
 
Dominate Social Media with TubeTrivia AI’s Addictive Quiz Videos.pdf
Dominate Social Media with TubeTrivia AI’s Addictive Quiz Videos.pdfDominate Social Media with TubeTrivia AI’s Addictive Quiz Videos.pdf
Dominate Social Media with TubeTrivia AI’s Addictive Quiz Videos.pdf
 
Using IESVE for Room Loads Analysis - Australia & New Zealand
Using IESVE for Room Loads Analysis - Australia & New ZealandUsing IESVE for Room Loads Analysis - Australia & New Zealand
Using IESVE for Room Loads Analysis - Australia & New Zealand
 
Developing Distributed High-performance Computing Capabilities of an Open Sci...
Developing Distributed High-performance Computing Capabilities of an Open Sci...Developing Distributed High-performance Computing Capabilities of an Open Sci...
Developing Distributed High-performance Computing Capabilities of an Open Sci...
 
Quarkus Hidden and Forbidden Extensions
Quarkus Hidden and Forbidden ExtensionsQuarkus Hidden and Forbidden Extensions
Quarkus Hidden and Forbidden Extensions
 
Webinar: Salesforce Document Management 2.0 - Smarter, Faster, Better
Webinar: Salesforce Document Management 2.0 - Smarter, Faster, BetterWebinar: Salesforce Document Management 2.0 - Smarter, Faster, Better
Webinar: Salesforce Document Management 2.0 - Smarter, Faster, Better
 
How to Position Your Globus Data Portal for Success Ten Good Practices
How to Position Your Globus Data Portal for Success Ten Good PracticesHow to Position Your Globus Data Portal for Success Ten Good Practices
How to Position Your Globus Data Portal for Success Ten Good Practices
 
Beyond Event Sourcing - Embracing CRUD for Wix Platform - Java.IL
Beyond Event Sourcing - Embracing CRUD for Wix Platform - Java.ILBeyond Event Sourcing - Embracing CRUD for Wix Platform - Java.IL
Beyond Event Sourcing - Embracing CRUD for Wix Platform - Java.IL
 

Code reviews vs Pull requests