SlideShare a Scribd company logo
@LinkedInEng | @mockitoguy
CI/CD at scale
Lessons from LinkedIn and Mockito
QCon, San Francisco, 11-2017
● Szczepan Faber @mockitoguy
● Born in Poland (we like our zzz’s)
In US since 2015
● Codes professionally since 2002
● Creator of mockito.org in 2007
● Core dev of gradle.org 1.x and 2.x in 2011-2015
● Tech Lead at LinkedIn Dev Tools since 2015
http://bit.do/li-tools
● Author on LinkedIn: http://bit.do/mockitoguy
● How to build great code review culture? http://bit.do/li-code-review
● Want to write great tests?
My workshop at QCon on Thursday:
http://bit.do/qcon-testing
● Want to innovate and push CD in Open Source?
Join shipkit.org
New project used by Mockito!
@LinkedInEng | @mockitoguy
Imagine
productivity
without the release overhead
@LinkedInEng | @mockitoguy
2. CD in OSS Mockito
(@MockitoJava)
● I created mocking framework
Mockito in 2007
● The team adopted CD in 2014
● We ship every pull request to
production to estimated 2M
users
Get ready to be excited about CD!
Development Tools
● Build tools, Gradle, CI
● Code review, IDEs
● and more!
● I’m an architect, tech lead, engineer working on development tools at
LinkedIn since 2015.
1. CD at LinkedIn (@LinkedInEng)
● linkedin.com adopted CD in 2015, shipping 3x day to 500M users.
LinkedIn Engineering (3000+)
Foundation team (300+)
● Kudos to great engineers working at LinkedIn, linkedin.com and the
tools. I am a part of a team.
@LinkedInEng | @mockitoguy
CD at linkedin.com by the numbers
○ 1000 commits, 300 unique committers across 4 main codebases
○ Web app, API server app, Android app, iOS app
○ The stats exclude other codebases (libraries, downstream microservices)
○ LinkedIn does not use (nor wants or needs) mono-repo. We currently have 7000+ codebases.
● Last quarter (Q3 ‘17):
○ 300 pushes to production (web app + api server)
○ 21 mobile app pushes (android + iOS, excluding Beta)
● LinkedIn engineering is more than linkedin.com
○ Other products exercise CD as well but don’t have such big codebase or number of committers
○ linkedin.com (flagship) is very progressive and paves the way for other LinkedIn software products
● Last week (5-11 Nov ‘17)
Part 1.
CD is hard
What do we do if something is hard?
@LinkedInEng | @mockitoguy
Why CD in linkedin.com?
● reduce the lead time to make positive business impact
○ ship features to production faster
● increase engineering productivity and happiness
○ avoid release overhead
■ avoid wasted time on stabilizing (bugfixing) the release branch.
Code should be always stable and ready to ship!
■ avoid wasted time on cherry-picking. Trunk based development.
○ avoid feature rush - last minute commit volume spike before the release
● improve quality
○ small incremental releases pose small risk and are easier to fix
○ avoid rollbacks and hotfixes. Instead we fix forward
The arguments apply to every software project!
In 2015 we launched 3x3 project - 3 releases per day, 3 hour max time commit-to-production.
Our goals:
@LinkedInEng | @mockitoguy
3x3 @LI
○ Because we want to iterate fast. Plus it helps with resilience because we can afford to miss a release
● Why 3 hours max time commit-to-production?
○ Because to ship 3 times a day, the commit-to-production pipeline needs speed
○ And it forces us to sort out our testing strategy (not enough time for manual or slow tests)
● In 2015 we completed mobile web and mobile apps
● In 2016 we completed desktop web
● Today we release linkedin.com several times a day
● LinkedIn Mobile apps are released every week, with 3 beta releases per week
(iOS Beta - once a week)
● Why 3 times per day?
@LinkedInEng | @mockitoguy
● Learning how to write great tests
- what to test, how to test, how to write code that is easy to test
● Flaky test is worse than no test
- detecting flaky tests automatically, overnight, using A/A testing
● Production grade tests and infrastructure
- in the past, tests and build code were not considered equally important as
production code
● Many existing tools, including OSS did not scale for CD
● Need for speed – testing in parallel and distributed
● Master branch always green
- Running all validations before code is merged to master
CD lessons @LI
@LinkedInEng | @mockitoguy
Current 3x3 stats for linkedin.com
Commits and
unique committers
in last week
Avg. time
commit-to-shippable in last
week
# of actual and target
releases in Q3 2017
(*) in actuality, it is higher because commits to libraries are not included
Web 317/115 150 min. 173/162
API 183/77 69 min. 123/162
iOS 164/69 165 min. 10/12
Android 241/72 72 min. 11/12
Combined 905*/333
@LinkedInEng | @mockitoguy
Opportunities @LI
● Increase discipline of fixing flaky tests
● Avoid redundant work in the pipeline
● For Android: simulator service, speed
● For iOS: Beta channel, Swift compiler stability and speed
● For Web app: browser cache
● For API server: avoid redundant work (Gradle Distributed Cache)
BTW. we use Play on Gradle for our API server: http://bit.do/play-on-gradle
● Minimize commit-to-shippable time
● Increase commit-to-shippable pipeline success rate (pipeline & tests stability)
● Hit the desired number of production releases
And many more! We keep improving the system!!!
@LinkedInEng | @mockitoguy
3x3 resources
LinkedIn Engineering Blog: http://bit.do/li-3x3
@LinkedInEng | @mockitoguy
Development Workflow @LI
● Multi-codebase architecture, 7000 codebases, 60% active
● Every codebase is governed by our “Multiproduct” framework
● Every Multiproduct has independent release cadence
● Every code change produces new version
● Trunk based development
● Mandatory code review (code owner must approve every change)
● Automation of commit-to-production pipeline
CD requires disciplined development workflow.
How software is developed at LinkedIn? (all our software, not only linkedin.com)
@LinkedInEng | @mockitoguy
Every codebase is a Multiproduct @LI
● One engineering culture
● Every engineer can contribute to any codebase
● Why matters? Easier to introduce CD into one culture
@LinkedInEng | @mockitoguy
Every change is a new version @LI
● And every new version can be shipped to production
● Why matters?
○ Makes it impossible to defer quality.
○ Clean code every day!
@LinkedInEng | @mockitoguy
Trunk based development @LI
● Incremental code changes, hiding incomplete features
● Feature toggles, “branch by abstraction” pattern
http://bit.do/branch-by-abstraction
● Why matters? Forces small, incremental changes. Avoids merge and
cherry-picking overhead.
● No long-lived feature branches
● All changes on main branch, which is always stable and ready to ship
@LinkedInEng | @mockitoguy
Mandatory code review @LI
● Somebody reads my code (and wants me to fix it)!
● Culture of feedback, learning and improving
http://bit.do/li-code-review
● Why matters? Clean, elegant code makes it easier to iterate
@LinkedInEng | @mockitoguy
Downstream dependency testing @LI
● Building code that depends on my code
● Strong signal in our CI pipeline
● Flaky tests are a problem to the entire ecosystem
● Why matters? avoiding regressions, catching integration problems early
@LinkedInEng | @mockitoguy
Automation of commit-to-production @LI
● The code I write or review goes to production within hours
● I am responsible for the quality
● Why it matters? Requires state of the art automated testing
○ BTW. I run a Java testing workshop on Thursday at QCon
http://bit.do/qcon-testing
@LinkedInEng | @mockitoguy
CI/CD pipeline @LI
For all our software, not only
components of linkedin.com
● Code change
● Code review (strong code ownership, owner must approve)
● Pre/post push validation (CI builds)
● Downstream dependency testing (test code that depend on me)
● New version ready!
● Staging
● Canary (deploy and test on single host)
○ Mobile uses Beta channel
● Ramp-up features (feature toggles)
○ Code push != feature push
● Remove feature toggle (dead code)
● Consumers that use wildcard versions pick up
new version in the next build.
● Consumers that use pinned version can be
updated automatically using “Push my
Upgrade” system.
● We can deprecate/end-of-life previous versions
Apps
Libraries
Dev workflow for all software at LinkedIn. Ready for part 2 (OSS)?
@mockitoguy
Part 2.
CD. in OSS
Mockito
Powered by shipkit.org
@mockitoguy
Open Source Mocking Framework for Java
● Mockito started in 2007
● 1.0 in 2008
● Hit mainstream in 2010
● Mostly manual releases...
Combined result puts Mockito on 3rd place!
@mockitoguy
2014 - Mockito adopts CD.
● Every merged pull request produces a new version and ships to public repo
● Scale: we estimate 2M users
● Prevent release procrastination (dreading to write release notes…)
@mockitoguy
Benefits of CD in OSS
● Productivity – zero release overhead
● Happy users – get features faster
● Faster debugging – quickly identify bad version (MTTR)
● Sustainability – release & stay alive
● No waste - no unreleased code
● Quality – self-enforced craftsmanship of every change
● Thriving, engaged community – contributions are released quickly
@mockitoguy
Community Feedback
● Quality anxiety
- you ship every pull request to production, are you shipping every bug, too?
- we ensure quality via immense battery of tests and rigorous code review
● What version of “mockito-core” to use?
- currently 244 versions in Maven Central
- use latest! We take compatibility VERY seriously. Sem ver!
● Dependency management cost
- worry that any version upgrade may bring incompatibilities to the dependency graph
- we get it. We strive to minimize Mockito dependencies. We understand that every
dependency is a liability to our customers
@mockitoguy
Mockito releases
By Shipkit
● Shipkit - toolkit for shipping
it for Java libraries
● Passionate about release
automation?
● http://shipkit.org
@LinkedInEng | @mockitoguy
Ready for CD?
● Imagine how fast you can ship changes that can create positive business impact
● Imagine unhindered productivity without the release overhead
● Imagine higher quality because smaller, incremental releases are a smaller risk
● Imagine that every code change is excellent, with clean code and great tests
● Imagine how reliable the commit-to-production pipeline is if it is battle tested daily
● At linkedin.com we land 1000 commits per week and ship to production several
times a day to 500M+ users.
● In the Open Source, Mockito library ships to production every pull request to
estimated 2M users
Now it is your turn! Questions?

More Related Content

What's hot (20)

PDF
Trunk based development
go_oh
 
PDF
EFL QA: Where Are We and Where Should We Go?
Samsung Open Source Group
 
PPTX
Xp conf-tbd
XP Conference India
 
PDF
Python Django Intro V0.1
Udi Bauman
 
PPTX
IFG for SAP Integration, webinar on Automated Testing
Daniel Graversen
 
PPTX
Agile .NET Development with BDD and Continuous Integration
Quan Truong Anh
 
KEY
CommonJS via PINF JavaScript Loader - Introduction
cadorn
 
PDF
GDCR15 in Las Palmas, Gran Canaria
Peter Kofler
 
PDF
TDD anche su iOS
Andrea Francia
 
PDF
php-1701-a
Adam Culp
 
PPTX
The current state of SAP Integration, SAPPHIRENOW 2018
Daniel Graversen
 
PDF
DevOpsDaysRiga 2018: Neil Crawford - Trunk based development, continuous depl...
DevOpsDays Riga
 
PDF
How to Port a 9 Million Code Line Project to 64 bits?
PVS-Studio
 
PPTX
Creating a reasonable project boilerplate
Stanislav Petrov
 
PPTX
Salesforce CI (Continuous Integration) - SFDX + Bitbucket Pipelines
Abhinav Gupta
 
PDF
Introduzione a React Native - Facebook Developer Circle Rome
Matteo Manchi
 
PDF
Gerrit Code Review
Johannes Barop
 
PDF
vodQA Pune (2019) - Jenkins pipeline As code
vodQA
 
PDF
Implementing a Continuous Delivery pipeline using OW2 infrastructure, OW2con'...
OW2
 
PPTX
Agile software architecture
Scott Hsieh
 
Trunk based development
go_oh
 
EFL QA: Where Are We and Where Should We Go?
Samsung Open Source Group
 
Xp conf-tbd
XP Conference India
 
Python Django Intro V0.1
Udi Bauman
 
IFG for SAP Integration, webinar on Automated Testing
Daniel Graversen
 
Agile .NET Development with BDD and Continuous Integration
Quan Truong Anh
 
CommonJS via PINF JavaScript Loader - Introduction
cadorn
 
GDCR15 in Las Palmas, Gran Canaria
Peter Kofler
 
TDD anche su iOS
Andrea Francia
 
php-1701-a
Adam Culp
 
The current state of SAP Integration, SAPPHIRENOW 2018
Daniel Graversen
 
DevOpsDaysRiga 2018: Neil Crawford - Trunk based development, continuous depl...
DevOpsDays Riga
 
How to Port a 9 Million Code Line Project to 64 bits?
PVS-Studio
 
Creating a reasonable project boilerplate
Stanislav Petrov
 
Salesforce CI (Continuous Integration) - SFDX + Bitbucket Pipelines
Abhinav Gupta
 
Introduzione a React Native - Facebook Developer Circle Rome
Matteo Manchi
 
Gerrit Code Review
Johannes Barop
 
vodQA Pune (2019) - Jenkins pipeline As code
vodQA
 
Implementing a Continuous Delivery pipeline using OW2 infrastructure, OW2con'...
OW2
 
Agile software architecture
Scott Hsieh
 

Similar to QCon'17 talk: CI/CD at scale - lessons from LinkedIn and Mockito (20)

PDF
3x3: Speeding Up Mobile Releases
Drew Hannay
 
PDF
3x3 Speeding Up Mobile Releases
Mobile Delivery Days
 
PDF
Introduction to Continuous Integration
Hùng Nguyễn Huy
 
PPTX
Building a scalable app factory with Appcelerator Platform
Angus Fox
 
PPTX
Max’s Birthday Adventure: #19 Kochi : Anypoint Code Builder
sandeepmenon62
 
PDF
Debugging 2013- Lars pedersen
Mediehuset Ingeniøren Live
 
PPTX
Understanding the GitOps Workflow and CICD Pipeline - What It Is, Why It Matt...
Gibran Badrulzaman
 
PDF
Implementing OpenChain ISO/IEC 5230 at endjin
HowardvanRooijen1
 
PDF
Hyd virtual meetupslides11jul
Santosh Ojha
 
PPTX
Automatise everyday work - Sara Krk
Institute of Contemporary Sciences
 
PPTX
Agentforce World Tour Toronto '25 - Supercharge MuleSoft Development with Mod...
Alexandra N. Martinez
 
PDF
[APIdays Singapore 2019] Managing the API lifecycle with Open Source Technolo...
WSO2
 
PDF
Continuous Delivery at Snyk
Anton Drukh
 
KEY
Continuous Deployment
Brian Moon
 
PDF
How to boost your workflow, or git rebase for designers
Anton Parkhomenko
 
PPTX
Develop, deploy, and operate services at reddit scale oscon 2018
Gregory Taylor
 
PDF
Philipe Riand - Building Social Applications using the Social Business Toolki...
LetsConnect
 
PDF
The magic ingredient for successful automation - Chapter 2
Bonitasoft
 
PDF
Introduction to DevOps and the Practical Use Cases at Credit OK
Kriangkrai Chaonithi
 
PPTX
Cross Platform Angular 2 and TypeScript Development
Jeremy Likness
 
3x3: Speeding Up Mobile Releases
Drew Hannay
 
3x3 Speeding Up Mobile Releases
Mobile Delivery Days
 
Introduction to Continuous Integration
Hùng Nguyễn Huy
 
Building a scalable app factory with Appcelerator Platform
Angus Fox
 
Max’s Birthday Adventure: #19 Kochi : Anypoint Code Builder
sandeepmenon62
 
Debugging 2013- Lars pedersen
Mediehuset Ingeniøren Live
 
Understanding the GitOps Workflow and CICD Pipeline - What It Is, Why It Matt...
Gibran Badrulzaman
 
Implementing OpenChain ISO/IEC 5230 at endjin
HowardvanRooijen1
 
Hyd virtual meetupslides11jul
Santosh Ojha
 
Automatise everyday work - Sara Krk
Institute of Contemporary Sciences
 
Agentforce World Tour Toronto '25 - Supercharge MuleSoft Development with Mod...
Alexandra N. Martinez
 
[APIdays Singapore 2019] Managing the API lifecycle with Open Source Technolo...
WSO2
 
Continuous Delivery at Snyk
Anton Drukh
 
Continuous Deployment
Brian Moon
 
How to boost your workflow, or git rebase for designers
Anton Parkhomenko
 
Develop, deploy, and operate services at reddit scale oscon 2018
Gregory Taylor
 
Philipe Riand - Building Social Applications using the Social Business Toolki...
LetsConnect
 
The magic ingredient for successful automation - Chapter 2
Bonitasoft
 
Introduction to DevOps and the Practical Use Cases at Credit OK
Kriangkrai Chaonithi
 
Cross Platform Angular 2 and TypeScript Development
Jeremy Likness
 
Ad

Recently uploaded (20)

PDF
Exolore The Essential AI Tools in 2025.pdf
Srinivasan M
 
PPTX
Webinar: Introduction to LF Energy EVerest
DanBrown980551
 
PDF
Why Orbit Edge Tech is a Top Next JS Development Company in 2025
mahendraalaska08
 
PDF
Log-Based Anomaly Detection: Enhancing System Reliability with Machine Learning
Mohammed BEKKOUCHE
 
PDF
Presentation - Vibe Coding The Future of Tech
yanuarsinggih1
 
PDF
Empower Inclusion Through Accessible Java Applications
Ana-Maria Mihalceanu
 
PDF
Chris Elwell Woburn, MA - Passionate About IT Innovation
Chris Elwell Woburn, MA
 
PDF
NewMind AI Journal - Weekly Chronicles - July'25 Week II
NewMind AI
 
PDF
Smart Trailers 2025 Update with History and Overview
Paul Menig
 
PDF
Achieving Consistent and Reliable AI Code Generation - Medusa AI
medusaaico
 
PDF
Smart Air Quality Monitoring with Serrax AQM190 LITE
SERRAX TECHNOLOGIES LLP
 
PDF
Building Resilience with Digital Twins : Lessons from Korea
SANGHEE SHIN
 
PPT
Interview paper part 3, It is based on Interview Prep
SoumyadeepGhosh39
 
PDF
DevBcn - Building 10x Organizations Using Modern Productivity Metrics
Justin Reock
 
PPTX
✨Unleashing Collaboration: Salesforce Channels & Community Power in Patna!✨
SanjeetMishra29
 
PDF
Human-centred design in online workplace learning and relationship to engagem...
Tracy Tang
 
PDF
LLMs.txt: Easily Control How AI Crawls Your Site
Keploy
 
PDF
Impact of IEEE Computer Society in Advancing Emerging Technologies including ...
Hironori Washizaki
 
PDF
Windsurf Meetup Ottawa 2025-07-12 - Planning Mode at Reliza.pdf
Pavel Shukhman
 
PDF
Using FME to Develop Self-Service CAD Applications for a Major UK Police Force
Safe Software
 
Exolore The Essential AI Tools in 2025.pdf
Srinivasan M
 
Webinar: Introduction to LF Energy EVerest
DanBrown980551
 
Why Orbit Edge Tech is a Top Next JS Development Company in 2025
mahendraalaska08
 
Log-Based Anomaly Detection: Enhancing System Reliability with Machine Learning
Mohammed BEKKOUCHE
 
Presentation - Vibe Coding The Future of Tech
yanuarsinggih1
 
Empower Inclusion Through Accessible Java Applications
Ana-Maria Mihalceanu
 
Chris Elwell Woburn, MA - Passionate About IT Innovation
Chris Elwell Woburn, MA
 
NewMind AI Journal - Weekly Chronicles - July'25 Week II
NewMind AI
 
Smart Trailers 2025 Update with History and Overview
Paul Menig
 
Achieving Consistent and Reliable AI Code Generation - Medusa AI
medusaaico
 
Smart Air Quality Monitoring with Serrax AQM190 LITE
SERRAX TECHNOLOGIES LLP
 
Building Resilience with Digital Twins : Lessons from Korea
SANGHEE SHIN
 
Interview paper part 3, It is based on Interview Prep
SoumyadeepGhosh39
 
DevBcn - Building 10x Organizations Using Modern Productivity Metrics
Justin Reock
 
✨Unleashing Collaboration: Salesforce Channels & Community Power in Patna!✨
SanjeetMishra29
 
Human-centred design in online workplace learning and relationship to engagem...
Tracy Tang
 
LLMs.txt: Easily Control How AI Crawls Your Site
Keploy
 
Impact of IEEE Computer Society in Advancing Emerging Technologies including ...
Hironori Washizaki
 
Windsurf Meetup Ottawa 2025-07-12 - Planning Mode at Reliza.pdf
Pavel Shukhman
 
Using FME to Develop Self-Service CAD Applications for a Major UK Police Force
Safe Software
 
Ad

QCon'17 talk: CI/CD at scale - lessons from LinkedIn and Mockito

  • 1. @LinkedInEng | @mockitoguy CI/CD at scale Lessons from LinkedIn and Mockito QCon, San Francisco, 11-2017 ● Szczepan Faber @mockitoguy ● Born in Poland (we like our zzz’s) In US since 2015 ● Codes professionally since 2002 ● Creator of mockito.org in 2007 ● Core dev of gradle.org 1.x and 2.x in 2011-2015 ● Tech Lead at LinkedIn Dev Tools since 2015 http://bit.do/li-tools ● Author on LinkedIn: http://bit.do/mockitoguy ● How to build great code review culture? http://bit.do/li-code-review ● Want to write great tests? My workshop at QCon on Thursday: http://bit.do/qcon-testing ● Want to innovate and push CD in Open Source? Join shipkit.org New project used by Mockito!
  • 3. @LinkedInEng | @mockitoguy 2. CD in OSS Mockito (@MockitoJava) ● I created mocking framework Mockito in 2007 ● The team adopted CD in 2014 ● We ship every pull request to production to estimated 2M users Get ready to be excited about CD! Development Tools ● Build tools, Gradle, CI ● Code review, IDEs ● and more! ● I’m an architect, tech lead, engineer working on development tools at LinkedIn since 2015. 1. CD at LinkedIn (@LinkedInEng) ● linkedin.com adopted CD in 2015, shipping 3x day to 500M users. LinkedIn Engineering (3000+) Foundation team (300+) ● Kudos to great engineers working at LinkedIn, linkedin.com and the tools. I am a part of a team.
  • 4. @LinkedInEng | @mockitoguy CD at linkedin.com by the numbers ○ 1000 commits, 300 unique committers across 4 main codebases ○ Web app, API server app, Android app, iOS app ○ The stats exclude other codebases (libraries, downstream microservices) ○ LinkedIn does not use (nor wants or needs) mono-repo. We currently have 7000+ codebases. ● Last quarter (Q3 ‘17): ○ 300 pushes to production (web app + api server) ○ 21 mobile app pushes (android + iOS, excluding Beta) ● LinkedIn engineering is more than linkedin.com ○ Other products exercise CD as well but don’t have such big codebase or number of committers ○ linkedin.com (flagship) is very progressive and paves the way for other LinkedIn software products ● Last week (5-11 Nov ‘17)
  • 5. Part 1. CD is hard What do we do if something is hard?
  • 6. @LinkedInEng | @mockitoguy Why CD in linkedin.com? ● reduce the lead time to make positive business impact ○ ship features to production faster ● increase engineering productivity and happiness ○ avoid release overhead ■ avoid wasted time on stabilizing (bugfixing) the release branch. Code should be always stable and ready to ship! ■ avoid wasted time on cherry-picking. Trunk based development. ○ avoid feature rush - last minute commit volume spike before the release ● improve quality ○ small incremental releases pose small risk and are easier to fix ○ avoid rollbacks and hotfixes. Instead we fix forward The arguments apply to every software project! In 2015 we launched 3x3 project - 3 releases per day, 3 hour max time commit-to-production. Our goals:
  • 7. @LinkedInEng | @mockitoguy 3x3 @LI ○ Because we want to iterate fast. Plus it helps with resilience because we can afford to miss a release ● Why 3 hours max time commit-to-production? ○ Because to ship 3 times a day, the commit-to-production pipeline needs speed ○ And it forces us to sort out our testing strategy (not enough time for manual or slow tests) ● In 2015 we completed mobile web and mobile apps ● In 2016 we completed desktop web ● Today we release linkedin.com several times a day ● LinkedIn Mobile apps are released every week, with 3 beta releases per week (iOS Beta - once a week) ● Why 3 times per day?
  • 8. @LinkedInEng | @mockitoguy ● Learning how to write great tests - what to test, how to test, how to write code that is easy to test ● Flaky test is worse than no test - detecting flaky tests automatically, overnight, using A/A testing ● Production grade tests and infrastructure - in the past, tests and build code were not considered equally important as production code ● Many existing tools, including OSS did not scale for CD ● Need for speed – testing in parallel and distributed ● Master branch always green - Running all validations before code is merged to master CD lessons @LI
  • 9. @LinkedInEng | @mockitoguy Current 3x3 stats for linkedin.com Commits and unique committers in last week Avg. time commit-to-shippable in last week # of actual and target releases in Q3 2017 (*) in actuality, it is higher because commits to libraries are not included Web 317/115 150 min. 173/162 API 183/77 69 min. 123/162 iOS 164/69 165 min. 10/12 Android 241/72 72 min. 11/12 Combined 905*/333
  • 10. @LinkedInEng | @mockitoguy Opportunities @LI ● Increase discipline of fixing flaky tests ● Avoid redundant work in the pipeline ● For Android: simulator service, speed ● For iOS: Beta channel, Swift compiler stability and speed ● For Web app: browser cache ● For API server: avoid redundant work (Gradle Distributed Cache) BTW. we use Play on Gradle for our API server: http://bit.do/play-on-gradle ● Minimize commit-to-shippable time ● Increase commit-to-shippable pipeline success rate (pipeline & tests stability) ● Hit the desired number of production releases And many more! We keep improving the system!!!
  • 11. @LinkedInEng | @mockitoguy 3x3 resources LinkedIn Engineering Blog: http://bit.do/li-3x3
  • 12. @LinkedInEng | @mockitoguy Development Workflow @LI ● Multi-codebase architecture, 7000 codebases, 60% active ● Every codebase is governed by our “Multiproduct” framework ● Every Multiproduct has independent release cadence ● Every code change produces new version ● Trunk based development ● Mandatory code review (code owner must approve every change) ● Automation of commit-to-production pipeline CD requires disciplined development workflow. How software is developed at LinkedIn? (all our software, not only linkedin.com)
  • 13. @LinkedInEng | @mockitoguy Every codebase is a Multiproduct @LI ● One engineering culture ● Every engineer can contribute to any codebase ● Why matters? Easier to introduce CD into one culture
  • 14. @LinkedInEng | @mockitoguy Every change is a new version @LI ● And every new version can be shipped to production ● Why matters? ○ Makes it impossible to defer quality. ○ Clean code every day!
  • 15. @LinkedInEng | @mockitoguy Trunk based development @LI ● Incremental code changes, hiding incomplete features ● Feature toggles, “branch by abstraction” pattern http://bit.do/branch-by-abstraction ● Why matters? Forces small, incremental changes. Avoids merge and cherry-picking overhead. ● No long-lived feature branches ● All changes on main branch, which is always stable and ready to ship
  • 16. @LinkedInEng | @mockitoguy Mandatory code review @LI ● Somebody reads my code (and wants me to fix it)! ● Culture of feedback, learning and improving http://bit.do/li-code-review ● Why matters? Clean, elegant code makes it easier to iterate
  • 17. @LinkedInEng | @mockitoguy Downstream dependency testing @LI ● Building code that depends on my code ● Strong signal in our CI pipeline ● Flaky tests are a problem to the entire ecosystem ● Why matters? avoiding regressions, catching integration problems early
  • 18. @LinkedInEng | @mockitoguy Automation of commit-to-production @LI ● The code I write or review goes to production within hours ● I am responsible for the quality ● Why it matters? Requires state of the art automated testing ○ BTW. I run a Java testing workshop on Thursday at QCon http://bit.do/qcon-testing
  • 19. @LinkedInEng | @mockitoguy CI/CD pipeline @LI For all our software, not only components of linkedin.com ● Code change ● Code review (strong code ownership, owner must approve) ● Pre/post push validation (CI builds) ● Downstream dependency testing (test code that depend on me) ● New version ready! ● Staging ● Canary (deploy and test on single host) ○ Mobile uses Beta channel ● Ramp-up features (feature toggles) ○ Code push != feature push ● Remove feature toggle (dead code) ● Consumers that use wildcard versions pick up new version in the next build. ● Consumers that use pinned version can be updated automatically using “Push my Upgrade” system. ● We can deprecate/end-of-life previous versions Apps Libraries Dev workflow for all software at LinkedIn. Ready for part 2 (OSS)?
  • 20. @mockitoguy Part 2. CD. in OSS Mockito Powered by shipkit.org
  • 21. @mockitoguy Open Source Mocking Framework for Java ● Mockito started in 2007 ● 1.0 in 2008 ● Hit mainstream in 2010 ● Mostly manual releases...
  • 22. Combined result puts Mockito on 3rd place!
  • 23. @mockitoguy 2014 - Mockito adopts CD. ● Every merged pull request produces a new version and ships to public repo ● Scale: we estimate 2M users ● Prevent release procrastination (dreading to write release notes…)
  • 24. @mockitoguy Benefits of CD in OSS ● Productivity – zero release overhead ● Happy users – get features faster ● Faster debugging – quickly identify bad version (MTTR) ● Sustainability – release & stay alive ● No waste - no unreleased code ● Quality – self-enforced craftsmanship of every change ● Thriving, engaged community – contributions are released quickly
  • 25. @mockitoguy Community Feedback ● Quality anxiety - you ship every pull request to production, are you shipping every bug, too? - we ensure quality via immense battery of tests and rigorous code review ● What version of “mockito-core” to use? - currently 244 versions in Maven Central - use latest! We take compatibility VERY seriously. Sem ver! ● Dependency management cost - worry that any version upgrade may bring incompatibilities to the dependency graph - we get it. We strive to minimize Mockito dependencies. We understand that every dependency is a liability to our customers
  • 26. @mockitoguy Mockito releases By Shipkit ● Shipkit - toolkit for shipping it for Java libraries ● Passionate about release automation? ● http://shipkit.org
  • 27. @LinkedInEng | @mockitoguy Ready for CD? ● Imagine how fast you can ship changes that can create positive business impact ● Imagine unhindered productivity without the release overhead ● Imagine higher quality because smaller, incremental releases are a smaller risk ● Imagine that every code change is excellent, with clean code and great tests ● Imagine how reliable the commit-to-production pipeline is if it is battle tested daily ● At linkedin.com we land 1000 commits per week and ship to production several times a day to 500M+ users. ● In the Open Source, Mockito library ships to production every pull request to estimated 2M users Now it is your turn! Questions?