SlideShare a Scribd company logo
TO TDD OR NOT TO TDD
–
THAT IS THE QUESTION
Test-driven
development: lessons
from the
Jenkins Git Plugin
Mark Waite
28 Feb 2018
Agile Boulder
AN EXPERIENCE
TALK
• My biases
• My mistakes
• My misperceptions
This is a biased talk. I’m using my experiences and some data
Biased by professional experience
• 2003 – Extreme Programming - manager
Loved it and lived it for 4 years at a 200 person company
• 2007 – Scrum - manager
Lived it for 6 years at a 5000 person company
• 2013 – More scrum - director
Lived it for 3 years at a 10,000 person company
• 2017 – Technical evangelist at CloudBees
We sell and support Jenkins to Enterprises
Biased by personal experience
• 2012 – My first commit to Jenkins git plugin (Java)
• 2014 – Wrote many tests for git plugin and git client
plugin
• 2015 – Primary maintainer of git plugin and git client
plugin
• 2017 – Divided maintainer – I do legacy, Stephen does
next gen
Biased by beliefs
• I believe in Test Driven Development
TEST-DRIVEN
DEVELOPMENT
• Red – write a small failing
test
• Green – write to pass the test
• Refactor – simplify and
improve
Three simple steps
A lifetime to learn to do it well
I love tests. I write tests.
I run tests. I fix tests. Photo CC BY-SA 4.0
THE LENS OF
PROJECT
HISTORY
WHAT IS JENKINS?
Leading continuous integration server
Open source, started in 2007 as Hudson
Became Jenkins in 2011
150,000+ installations worldwide
1,300+ plugins
Active community
Strong integrations
WHAT IS GIT?
Most popular version control system
Linux kernel tracked in Git
Microsoft Windows tracked in Git
Core technology at GitHub, Bitbucket, VS Online,
…
JENKINS
GIT PLUGIN
HISTORY
Jenkins Git Plugin connects Jenkins to Git
Historical Phases of Jenkins Git Plugin
• Early adoption: 2007 -
2010
• Significant growth: 2010 – 2013
• Refactoring: 2013 - 2016
• Pipeline: 2017 - now
EARLY ADOPTION
2007 - 2010
Early adoption questions:
• Is git relevant to Jenkins users?
• Which git features matter
most?
EARLY ADOPTION
Unknowns
• User value
• Feature relevance
• Performance measures
Integration Hurdles
• Few lines of code
• Few components used
• Few components depend on us
INSTALLS AND TESTS IN
EARLY ADOPTION
0
20000
40000
60000
80000
100000
120000
140000
160000
Jan-08 Jan-10 Jan-12 Jan-14 Jan-16 Jan-18
Active Jenkins Git Plugin Installations
0
2000
4000
6000
8000
10000
12000
14000
Jan-08 Jan-10 Jan-12 Jan-14 Jan-16 Jan-18
Jenkins Git Plugin lines of code vs. test LOC
LOC Test LOC
• User needs are more important than tests
• Discover user needs by delivering
• Test interactively for fastest delivery
WIDESPREAD USE
2010 - 2013
Widespread use questions:
• Easier to use?
• Easier to diagnose?
• Next features?
WIDESPREAD USE
More confident
• User value
• Feature relevance
• Key performance measure
Integration Hurdles
• More features
• More lines of code
• More components used
• Few components depend on us
INSTALLS AND TESTS IN
WIDESPREAD USE
0
20000
40000
60000
80000
100000
120000
140000
160000
Jan-08 Jan-10 Jan-12 Jan-14 Jan-16 Jan-18
Active Jenkins Git Plugin Installations
0
2000
4000
6000
8000
10000
12000
14000
Jan-08 Jan-10 Jan-12 Jan-14 Jan-16 Jan-18
Jenkins Git Plugin lines of code vs. test LOC
LOC Test LOC
• User needs are more important than tests
• Discover user needs by delivering
• Test interactively for fastest delivery
• Feature and dependency growth is increasing
the cost of testing
REFACTORING
2013 - 2016
Resolve implementation problems
Git is winning the source control wars
More regressions from refactoring
Refactor:
• add JGit
• extract git client
REFACTORING
Confident in
• User value
• Feature relevance
• Key performance measures
Integration Hurdles
• More features
• More lines of code
• More components used
• Many components depend on us
INSTALLS AND TESTS IN
REFACTORING
0
20000
40000
60000
80000
100000
120000
140000
160000
Jan-08 Jan-10 Jan-12 Jan-14 Jan-16 Jan-18
Active Jenkins Git Plugin Installations
0
2000
4000
6000
8000
10000
12000
14000
Jan-08 Jan-10 Jan-12 Jan-14 Jan-16 Jan-18
Jenkins Git Plugin lines of code vs. test LOC
LOC Test LOC
• User needs are often failed by regressions
• Discover user needs by delivering
• Test automation for fastest delivery
• Interactive testing still finds most bugs
• Feature and dependency growth is increasing
the cost of testing
PIPELINE
2017 - NOW
Pipeline:
• GitHub, Bitbucket
optimizations
• Simpler setup and
maintenance
• Higher performance
PIPELINE
Significant new
• User value
• Features
• Key performance improved
Integration Hurdles
• More features
• More lines of code
• More components used
• Critical part of Jenkins
INSTALLS AND TESTS IN
PIPELINE
0
20000
40000
60000
80000
100000
120000
140000
160000
Jan-08 Jan-10 Jan-12 Jan-14 Jan-16 Jan-18
Active Jenkins Git Plugin Installations
0
2000
4000
6000
8000
10000
12000
14000
Jan-08 Jan-10 Jan-12 Jan-14 Jan-16 Jan-18
Jenkins Git Plugin lines of code vs. test LOC
LOC Test LOC
• Regressions are less frequent
• Discover user needs by delivering
• Test automation prevents many regressions
• Interactive testing still finds most bugs
• Feature and dependency growth is increasing
the cost of testing
WHEN CAN
I SKIP
TESTS?
Tests are not as critical if:
• Code will be discarded
• Failures are easy to detect
• Interactive testing is enough
• Risk is low from broken code
WHEN
SHOULD I
ADD
TESTS?
Tests are more critical if:
• Code will live a long time
• Failures are hard to detect
• Interactive testing is not
enough
• Risk is high from broken code
Ad

More Related Content

What's hot (20)

Webinar: Version Control in SOASTA 57
Webinar: Version Control in SOASTA 57Webinar: Version Control in SOASTA 57
Webinar: Version Control in SOASTA 57
Jennifer Finney
 
DevOps Fest 2020. Kohsuke Kawaguchi. GitOps, Jenkins X & the Future of CI/CD
DevOps Fest 2020. Kohsuke Kawaguchi. GitOps, Jenkins X & the Future of CI/CDDevOps Fest 2020. Kohsuke Kawaguchi. GitOps, Jenkins X & the Future of CI/CD
DevOps Fest 2020. Kohsuke Kawaguchi. GitOps, Jenkins X & the Future of CI/CD
DevOps_Fest
 
Jenkins meetup170315
Jenkins meetup170315Jenkins meetup170315
Jenkins meetup170315
Fredrik Andersson
 
DOES SFO 2016 - Ray Krueger - Speed as a Prime Directive
DOES SFO 2016 - Ray Krueger - Speed as a Prime DirectiveDOES SFO 2016 - Ray Krueger - Speed as a Prime Directive
DOES SFO 2016 - Ray Krueger - Speed as a Prime Directive
Gene Kim
 
Using JMeter in CloudTest for Continuous Testing
Using JMeter in CloudTest for Continuous TestingUsing JMeter in CloudTest for Continuous Testing
Using JMeter in CloudTest for Continuous Testing
SOASTA
 
Performance Metrics Driven CI/CD - Introduction to Continuous Innovation and ...
Performance Metrics Driven CI/CD - Introduction to Continuous Innovation and ...Performance Metrics Driven CI/CD - Introduction to Continuous Innovation and ...
Performance Metrics Driven CI/CD - Introduction to Continuous Innovation and ...
Mike Villiger
 
What is DevOps?
What is DevOps?What is DevOps?
What is DevOps?
Allied Consultants
 
Fundamentals of DevOps and CI/CD
Fundamentals of DevOps and CI/CDFundamentals of DevOps and CI/CD
Fundamentals of DevOps and CI/CD
Batyr Nuryyev
 
ATAGTR2017 Performance Testing of Big Data Application
ATAGTR2017 Performance Testing of Big Data ApplicationATAGTR2017 Performance Testing of Big Data Application
ATAGTR2017 Performance Testing of Big Data Application
Agile Testing Alliance
 
Legacy On Premise Apps Got You Down? No Problem - DevOps for All
Legacy On Premise Apps Got You Down? No Problem - DevOps for AllLegacy On Premise Apps Got You Down? No Problem - DevOps for All
Legacy On Premise Apps Got You Down? No Problem - DevOps for All
Muly Gottlieb
 
Metrics-driven Continuous Delivery
Metrics-driven Continuous DeliveryMetrics-driven Continuous Delivery
Metrics-driven Continuous Delivery
Andrew Phillips
 
Transitioning from Traditional to Modern QA
Transitioning from Traditional to Modern QATransitioning from Traditional to Modern QA
Transitioning from Traditional to Modern QA
Sauce Labs
 
FishEye and Crucible Presentation
FishEye and Crucible PresentationFishEye and Crucible Presentation
FishEye and Crucible Presentation
Ellen Feaheny
 
50 production deployments a day, at least
50 production deployments a day, at least50 production deployments a day, at least
50 production deployments a day, at least
Oscar Renalias
 
7 steps to pragmatic mobile testing
7 steps to pragmatic mobile testing7 steps to pragmatic mobile testing
7 steps to pragmatic mobile testing
SOASTA
 
Dimensions RM: Agile Requirements Management
Dimensions RM: Agile Requirements ManagementDimensions RM: Agile Requirements Management
Dimensions RM: Agile Requirements Management
Serena Software
 
Perforce - Under New Management by Konrad Litwin
Perforce - Under New Management by Konrad LitwinPerforce - Under New Management by Konrad Litwin
Perforce - Under New Management by Konrad Litwin
Perforce
 
Roadmap to Enterprise Quality
Roadmap to Enterprise QualityRoadmap to Enterprise Quality
Roadmap to Enterprise Quality
Jeff Bramwell
 
App Centric Devops - CloudStack 2014 Collaboration Conference #CCNA14
App Centric Devops - CloudStack 2014 Collaboration Conference #CCNA14App Centric Devops - CloudStack 2014 Collaboration Conference #CCNA14
App Centric Devops - CloudStack 2014 Collaboration Conference #CCNA14
Uri Cohen
 
Dragging the dinosaur into the 21 century
Dragging the dinosaur into the 21 centuryDragging the dinosaur into the 21 century
Dragging the dinosaur into the 21 century
DevOpsDays Galway
 
Webinar: Version Control in SOASTA 57
Webinar: Version Control in SOASTA 57Webinar: Version Control in SOASTA 57
Webinar: Version Control in SOASTA 57
Jennifer Finney
 
DevOps Fest 2020. Kohsuke Kawaguchi. GitOps, Jenkins X & the Future of CI/CD
DevOps Fest 2020. Kohsuke Kawaguchi. GitOps, Jenkins X & the Future of CI/CDDevOps Fest 2020. Kohsuke Kawaguchi. GitOps, Jenkins X & the Future of CI/CD
DevOps Fest 2020. Kohsuke Kawaguchi. GitOps, Jenkins X & the Future of CI/CD
DevOps_Fest
 
DOES SFO 2016 - Ray Krueger - Speed as a Prime Directive
DOES SFO 2016 - Ray Krueger - Speed as a Prime DirectiveDOES SFO 2016 - Ray Krueger - Speed as a Prime Directive
DOES SFO 2016 - Ray Krueger - Speed as a Prime Directive
Gene Kim
 
Using JMeter in CloudTest for Continuous Testing
Using JMeter in CloudTest for Continuous TestingUsing JMeter in CloudTest for Continuous Testing
Using JMeter in CloudTest for Continuous Testing
SOASTA
 
Performance Metrics Driven CI/CD - Introduction to Continuous Innovation and ...
Performance Metrics Driven CI/CD - Introduction to Continuous Innovation and ...Performance Metrics Driven CI/CD - Introduction to Continuous Innovation and ...
Performance Metrics Driven CI/CD - Introduction to Continuous Innovation and ...
Mike Villiger
 
Fundamentals of DevOps and CI/CD
Fundamentals of DevOps and CI/CDFundamentals of DevOps and CI/CD
Fundamentals of DevOps and CI/CD
Batyr Nuryyev
 
ATAGTR2017 Performance Testing of Big Data Application
ATAGTR2017 Performance Testing of Big Data ApplicationATAGTR2017 Performance Testing of Big Data Application
ATAGTR2017 Performance Testing of Big Data Application
Agile Testing Alliance
 
Legacy On Premise Apps Got You Down? No Problem - DevOps for All
Legacy On Premise Apps Got You Down? No Problem - DevOps for AllLegacy On Premise Apps Got You Down? No Problem - DevOps for All
Legacy On Premise Apps Got You Down? No Problem - DevOps for All
Muly Gottlieb
 
Metrics-driven Continuous Delivery
Metrics-driven Continuous DeliveryMetrics-driven Continuous Delivery
Metrics-driven Continuous Delivery
Andrew Phillips
 
Transitioning from Traditional to Modern QA
Transitioning from Traditional to Modern QATransitioning from Traditional to Modern QA
Transitioning from Traditional to Modern QA
Sauce Labs
 
FishEye and Crucible Presentation
FishEye and Crucible PresentationFishEye and Crucible Presentation
FishEye and Crucible Presentation
Ellen Feaheny
 
50 production deployments a day, at least
50 production deployments a day, at least50 production deployments a day, at least
50 production deployments a day, at least
Oscar Renalias
 
7 steps to pragmatic mobile testing
7 steps to pragmatic mobile testing7 steps to pragmatic mobile testing
7 steps to pragmatic mobile testing
SOASTA
 
Dimensions RM: Agile Requirements Management
Dimensions RM: Agile Requirements ManagementDimensions RM: Agile Requirements Management
Dimensions RM: Agile Requirements Management
Serena Software
 
Perforce - Under New Management by Konrad Litwin
Perforce - Under New Management by Konrad LitwinPerforce - Under New Management by Konrad Litwin
Perforce - Under New Management by Konrad Litwin
Perforce
 
Roadmap to Enterprise Quality
Roadmap to Enterprise QualityRoadmap to Enterprise Quality
Roadmap to Enterprise Quality
Jeff Bramwell
 
App Centric Devops - CloudStack 2014 Collaboration Conference #CCNA14
App Centric Devops - CloudStack 2014 Collaboration Conference #CCNA14App Centric Devops - CloudStack 2014 Collaboration Conference #CCNA14
App Centric Devops - CloudStack 2014 Collaboration Conference #CCNA14
Uri Cohen
 
Dragging the dinosaur into the 21 century
Dragging the dinosaur into the 21 centuryDragging the dinosaur into the 21 century
Dragging the dinosaur into the 21 century
DevOpsDays Galway
 

Similar to To TDD or not to TDD - that is the question (20)

Continuous Delivery without Significant Test Automation
Continuous Delivery without Significant Test AutomationContinuous Delivery without Significant Test Automation
Continuous Delivery without Significant Test Automation
Maaret Pyhäjärvi
 
AD1545 - Extending the XPages Extension Library
AD1545 - Extending the XPages Extension LibraryAD1545 - Extending the XPages Extension Library
AD1545 - Extending the XPages Extension Library
paidi_ed
 
WSO2Con USA 2017: Implementing a Modern API Management Solution that Benefits...
WSO2Con USA 2017: Implementing a Modern API Management Solution that Benefits...WSO2Con USA 2017: Implementing a Modern API Management Solution that Benefits...
WSO2Con USA 2017: Implementing a Modern API Management Solution that Benefits...
WSO2
 
Application Insights for Integration Developers
Application Insights for Integration DevelopersApplication Insights for Integration Developers
Application Insights for Integration Developers
Sriram Hariharan
 
From Iterative to Continuous Delivery, PNSQC 2014
From Iterative to Continuous Delivery, PNSQC 2014From Iterative to Continuous Delivery, PNSQC 2014
From Iterative to Continuous Delivery, PNSQC 2014
John Ruberto
 
Adopting Continuous Integration in an Ops Group
Adopting Continuous Integration in an Ops GroupAdopting Continuous Integration in an Ops Group
Adopting Continuous Integration in an Ops Group
colleenfry
 
Aniruddha_Mukherjee_CV_June_2016
Aniruddha_Mukherjee_CV_June_2016Aniruddha_Mukherjee_CV_June_2016
Aniruddha_Mukherjee_CV_June_2016
Aniruddha Mukherjee
 
SanDiego_DevOps_Meetup_9212016-v8
SanDiego_DevOps_Meetup_9212016-v8SanDiego_DevOps_Meetup_9212016-v8
SanDiego_DevOps_Meetup_9212016-v8
Rajwinder Singh
 
SanDiego_DevOps_Meetup_9212016
SanDiego_DevOps_Meetup_9212016SanDiego_DevOps_Meetup_9212016
SanDiego_DevOps_Meetup_9212016
w2fong
 
CipherCloud Microservice Meetup - Managing Services in a Lean Startup
CipherCloud Microservice Meetup - Managing Services in a Lean StartupCipherCloud Microservice Meetup - Managing Services in a Lean Startup
CipherCloud Microservice Meetup - Managing Services in a Lean Startup
Shobana Radhakrishnan
 
Top 10 Lessons Learned from the Netflix API - OSCON 2014
Top 10 Lessons Learned from the Netflix API - OSCON 2014Top 10 Lessons Learned from the Netflix API - OSCON 2014
Top 10 Lessons Learned from the Netflix API - OSCON 2014
Daniel Jacobson
 
The DevOps journey in an Enterprise - CoDe-Conf. Stockholm September 14, 2017
The DevOps journey in an Enterprise - CoDe-Conf. Stockholm September 14, 2017The DevOps journey in an Enterprise - CoDe-Conf. Stockholm September 14, 2017
The DevOps journey in an Enterprise - CoDe-Conf. Stockholm September 14, 2017
Anders Lundsgård
 
Oscon2014 Netflix API - Top 10 Lessons Learned
Oscon2014 Netflix API - Top 10 Lessons LearnedOscon2014 Netflix API - Top 10 Lessons Learned
Oscon2014 Netflix API - Top 10 Lessons Learned
Sangeeta Narayanan
 
Chris Munns, DevOps @ Amazon: Microservices, 2 Pizza Teams, & 50 Million Depl...
Chris Munns, DevOps @ Amazon: Microservices, 2 Pizza Teams, & 50 Million Depl...Chris Munns, DevOps @ Amazon: Microservices, 2 Pizza Teams, & 50 Million Depl...
Chris Munns, DevOps @ Amazon: Microservices, 2 Pizza Teams, & 50 Million Depl...
TriNimbus
 
Modern software testing and processes 2019
Modern software testing and processes 2019Modern software testing and processes 2019
Modern software testing and processes 2019
Karim Fanadka
 
Automation at Philips Healthcare
Automation at Philips HealthcareAutomation at Philips Healthcare
Automation at Philips Healthcare
Arnon Axelrod
 
Continuous Performance Testing and Monitoring in Agile Development
Continuous Performance Testing and Monitoring in Agile DevelopmentContinuous Performance Testing and Monitoring in Agile Development
Continuous Performance Testing and Monitoring in Agile Development
Neotys
 
Lessons Learned from Large Scale Adoption of DevOps for IBM z Systems Software
Lessons Learned from Large Scale Adoption of DevOps for IBM z Systems SoftwareLessons Learned from Large Scale Adoption of DevOps for IBM z Systems Software
Lessons Learned from Large Scale Adoption of DevOps for IBM z Systems Software
DevOps for Enterprise Systems
 
apidays LIVE Paris 2021 - Lessons from the API Stewardship Journey in Azure b...
apidays LIVE Paris 2021 - Lessons from the API Stewardship Journey in Azure b...apidays LIVE Paris 2021 - Lessons from the API Stewardship Journey in Azure b...
apidays LIVE Paris 2021 - Lessons from the API Stewardship Journey in Azure b...
apidays
 
#SPSBrussels 2017 vincent biret #azure #functions microsoft #flow
#SPSBrussels 2017 vincent biret #azure #functions microsoft #flow#SPSBrussels 2017 vincent biret #azure #functions microsoft #flow
#SPSBrussels 2017 vincent biret #azure #functions microsoft #flow
Vincent Biret
 
Continuous Delivery without Significant Test Automation
Continuous Delivery without Significant Test AutomationContinuous Delivery without Significant Test Automation
Continuous Delivery without Significant Test Automation
Maaret Pyhäjärvi
 
AD1545 - Extending the XPages Extension Library
AD1545 - Extending the XPages Extension LibraryAD1545 - Extending the XPages Extension Library
AD1545 - Extending the XPages Extension Library
paidi_ed
 
WSO2Con USA 2017: Implementing a Modern API Management Solution that Benefits...
WSO2Con USA 2017: Implementing a Modern API Management Solution that Benefits...WSO2Con USA 2017: Implementing a Modern API Management Solution that Benefits...
WSO2Con USA 2017: Implementing a Modern API Management Solution that Benefits...
WSO2
 
Application Insights for Integration Developers
Application Insights for Integration DevelopersApplication Insights for Integration Developers
Application Insights for Integration Developers
Sriram Hariharan
 
From Iterative to Continuous Delivery, PNSQC 2014
From Iterative to Continuous Delivery, PNSQC 2014From Iterative to Continuous Delivery, PNSQC 2014
From Iterative to Continuous Delivery, PNSQC 2014
John Ruberto
 
Adopting Continuous Integration in an Ops Group
Adopting Continuous Integration in an Ops GroupAdopting Continuous Integration in an Ops Group
Adopting Continuous Integration in an Ops Group
colleenfry
 
Aniruddha_Mukherjee_CV_June_2016
Aniruddha_Mukherjee_CV_June_2016Aniruddha_Mukherjee_CV_June_2016
Aniruddha_Mukherjee_CV_June_2016
Aniruddha Mukherjee
 
SanDiego_DevOps_Meetup_9212016-v8
SanDiego_DevOps_Meetup_9212016-v8SanDiego_DevOps_Meetup_9212016-v8
SanDiego_DevOps_Meetup_9212016-v8
Rajwinder Singh
 
SanDiego_DevOps_Meetup_9212016
SanDiego_DevOps_Meetup_9212016SanDiego_DevOps_Meetup_9212016
SanDiego_DevOps_Meetup_9212016
w2fong
 
CipherCloud Microservice Meetup - Managing Services in a Lean Startup
CipherCloud Microservice Meetup - Managing Services in a Lean StartupCipherCloud Microservice Meetup - Managing Services in a Lean Startup
CipherCloud Microservice Meetup - Managing Services in a Lean Startup
Shobana Radhakrishnan
 
Top 10 Lessons Learned from the Netflix API - OSCON 2014
Top 10 Lessons Learned from the Netflix API - OSCON 2014Top 10 Lessons Learned from the Netflix API - OSCON 2014
Top 10 Lessons Learned from the Netflix API - OSCON 2014
Daniel Jacobson
 
The DevOps journey in an Enterprise - CoDe-Conf. Stockholm September 14, 2017
The DevOps journey in an Enterprise - CoDe-Conf. Stockholm September 14, 2017The DevOps journey in an Enterprise - CoDe-Conf. Stockholm September 14, 2017
The DevOps journey in an Enterprise - CoDe-Conf. Stockholm September 14, 2017
Anders Lundsgård
 
Oscon2014 Netflix API - Top 10 Lessons Learned
Oscon2014 Netflix API - Top 10 Lessons LearnedOscon2014 Netflix API - Top 10 Lessons Learned
Oscon2014 Netflix API - Top 10 Lessons Learned
Sangeeta Narayanan
 
Chris Munns, DevOps @ Amazon: Microservices, 2 Pizza Teams, & 50 Million Depl...
Chris Munns, DevOps @ Amazon: Microservices, 2 Pizza Teams, & 50 Million Depl...Chris Munns, DevOps @ Amazon: Microservices, 2 Pizza Teams, & 50 Million Depl...
Chris Munns, DevOps @ Amazon: Microservices, 2 Pizza Teams, & 50 Million Depl...
TriNimbus
 
Modern software testing and processes 2019
Modern software testing and processes 2019Modern software testing and processes 2019
Modern software testing and processes 2019
Karim Fanadka
 
Automation at Philips Healthcare
Automation at Philips HealthcareAutomation at Philips Healthcare
Automation at Philips Healthcare
Arnon Axelrod
 
Continuous Performance Testing and Monitoring in Agile Development
Continuous Performance Testing and Monitoring in Agile DevelopmentContinuous Performance Testing and Monitoring in Agile Development
Continuous Performance Testing and Monitoring in Agile Development
Neotys
 
Lessons Learned from Large Scale Adoption of DevOps for IBM z Systems Software
Lessons Learned from Large Scale Adoption of DevOps for IBM z Systems SoftwareLessons Learned from Large Scale Adoption of DevOps for IBM z Systems Software
Lessons Learned from Large Scale Adoption of DevOps for IBM z Systems Software
DevOps for Enterprise Systems
 
apidays LIVE Paris 2021 - Lessons from the API Stewardship Journey in Azure b...
apidays LIVE Paris 2021 - Lessons from the API Stewardship Journey in Azure b...apidays LIVE Paris 2021 - Lessons from the API Stewardship Journey in Azure b...
apidays LIVE Paris 2021 - Lessons from the API Stewardship Journey in Azure b...
apidays
 
#SPSBrussels 2017 vincent biret #azure #functions microsoft #flow
#SPSBrussels 2017 vincent biret #azure #functions microsoft #flow#SPSBrussels 2017 vincent biret #azure #functions microsoft #flow
#SPSBrussels 2017 vincent biret #azure #functions microsoft #flow
Vincent Biret
 
Ad

More from Mark Waite (9)

Training as Code - Applying CI/CD to training
Training as Code - Applying CI/CD to trainingTraining as Code - Applying CI/CD to training
Training as Code - Applying CI/CD to training
Mark Waite
 
Docker and Jenkins [as code]
Docker and Jenkins [as code]Docker and Jenkins [as code]
Docker and Jenkins [as code]
Mark Waite
 
Thinking about Jenkins Security
Thinking about Jenkins SecurityThinking about Jenkins Security
Thinking about Jenkins Security
Mark Waite
 
Lessons from Jenkins Platform Support
Lessons from Jenkins Platform SupportLessons from Jenkins Platform Support
Lessons from Jenkins Platform Support
Mark Waite
 
Git for jenkins faster and better
Git for jenkins   faster and betterGit for jenkins   faster and better
Git for jenkins faster and better
Mark Waite
 
Docker and Jenkins Pipeline
Docker and Jenkins PipelineDocker and Jenkins Pipeline
Docker and Jenkins Pipeline
Mark Waite
 
Git in-the-large
Git in-the-largeGit in-the-large
Git in-the-large
Mark Waite
 
Jenkins - Continuous Integration after Hudson, CruiseControl, and home built
Jenkins - Continuous Integration after Hudson, CruiseControl, and home builtJenkins - Continuous Integration after Hudson, CruiseControl, and home built
Jenkins - Continuous Integration after Hudson, CruiseControl, and home built
Mark Waite
 
Jenkins For One
Jenkins For OneJenkins For One
Jenkins For One
Mark Waite
 
Training as Code - Applying CI/CD to training
Training as Code - Applying CI/CD to trainingTraining as Code - Applying CI/CD to training
Training as Code - Applying CI/CD to training
Mark Waite
 
Docker and Jenkins [as code]
Docker and Jenkins [as code]Docker and Jenkins [as code]
Docker and Jenkins [as code]
Mark Waite
 
Thinking about Jenkins Security
Thinking about Jenkins SecurityThinking about Jenkins Security
Thinking about Jenkins Security
Mark Waite
 
Lessons from Jenkins Platform Support
Lessons from Jenkins Platform SupportLessons from Jenkins Platform Support
Lessons from Jenkins Platform Support
Mark Waite
 
Git for jenkins faster and better
Git for jenkins   faster and betterGit for jenkins   faster and better
Git for jenkins faster and better
Mark Waite
 
Docker and Jenkins Pipeline
Docker and Jenkins PipelineDocker and Jenkins Pipeline
Docker and Jenkins Pipeline
Mark Waite
 
Git in-the-large
Git in-the-largeGit in-the-large
Git in-the-large
Mark Waite
 
Jenkins - Continuous Integration after Hudson, CruiseControl, and home built
Jenkins - Continuous Integration after Hudson, CruiseControl, and home builtJenkins - Continuous Integration after Hudson, CruiseControl, and home built
Jenkins - Continuous Integration after Hudson, CruiseControl, and home built
Mark Waite
 
Jenkins For One
Jenkins For OneJenkins For One
Jenkins For One
Mark Waite
 
Ad

Recently uploaded (20)

TestMigrationsInPy: A Dataset of Test Migrations from Unittest to Pytest (MSR...
TestMigrationsInPy: A Dataset of Test Migrations from Unittest to Pytest (MSR...TestMigrationsInPy: A Dataset of Test Migrations from Unittest to Pytest (MSR...
TestMigrationsInPy: A Dataset of Test Migrations from Unittest to Pytest (MSR...
Andre Hora
 
Interactive odoo dashboards for sales, CRM , Inventory, Invoice, Purchase, Pr...
Interactive odoo dashboards for sales, CRM , Inventory, Invoice, Purchase, Pr...Interactive odoo dashboards for sales, CRM , Inventory, Invoice, Purchase, Pr...
Interactive odoo dashboards for sales, CRM , Inventory, Invoice, Purchase, Pr...
AxisTechnolabs
 
Adobe Illustrator Crack FREE Download 2025 Latest Version
Adobe Illustrator Crack FREE Download 2025 Latest VersionAdobe Illustrator Crack FREE Download 2025 Latest Version
Adobe Illustrator Crack FREE Download 2025 Latest Version
kashifyounis067
 
Exceptional Behaviors: How Frequently Are They Tested? (AST 2025)
Exceptional Behaviors: How Frequently Are They Tested? (AST 2025)Exceptional Behaviors: How Frequently Are They Tested? (AST 2025)
Exceptional Behaviors: How Frequently Are They Tested? (AST 2025)
Andre Hora
 
Adobe Marketo Engage Champion Deep Dive - SFDC CRM Synch V2 & Usage Dashboards
Adobe Marketo Engage Champion Deep Dive - SFDC CRM Synch V2 & Usage DashboardsAdobe Marketo Engage Champion Deep Dive - SFDC CRM Synch V2 & Usage Dashboards
Adobe Marketo Engage Champion Deep Dive - SFDC CRM Synch V2 & Usage Dashboards
BradBedford3
 
Exploring Code Comprehension in Scientific Programming: Preliminary Insight...
Exploring Code Comprehension  in Scientific Programming:  Preliminary Insight...Exploring Code Comprehension  in Scientific Programming:  Preliminary Insight...
Exploring Code Comprehension in Scientific Programming: Preliminary Insight...
University of Hawai‘i at Mānoa
 
Download Wondershare Filmora Crack [2025] With Latest
Download Wondershare Filmora Crack [2025] With LatestDownload Wondershare Filmora Crack [2025] With Latest
Download Wondershare Filmora Crack [2025] With Latest
tahirabibi60507
 
Avast Premium Security Crack FREE Latest Version 2025
Avast Premium Security Crack FREE Latest Version 2025Avast Premium Security Crack FREE Latest Version 2025
Avast Premium Security Crack FREE Latest Version 2025
mu394968
 
How to Optimize Your AWS Environment for Improved Cloud Performance
How to Optimize Your AWS Environment for Improved Cloud PerformanceHow to Optimize Your AWS Environment for Improved Cloud Performance
How to Optimize Your AWS Environment for Improved Cloud Performance
ThousandEyes
 
Scaling GraphRAG: Efficient Knowledge Retrieval for Enterprise AI
Scaling GraphRAG:  Efficient Knowledge Retrieval for Enterprise AIScaling GraphRAG:  Efficient Knowledge Retrieval for Enterprise AI
Scaling GraphRAG: Efficient Knowledge Retrieval for Enterprise AI
danshalev
 
Douwan Crack 2025 new verson+ License code
Douwan Crack 2025 new verson+ License codeDouwan Crack 2025 new verson+ License code
Douwan Crack 2025 new verson+ License code
aneelaramzan63
 
Landscape of Requirements Engineering for/by AI through Literature Review
Landscape of Requirements Engineering for/by AI through Literature ReviewLandscape of Requirements Engineering for/by AI through Literature Review
Landscape of Requirements Engineering for/by AI through Literature Review
Hironori Washizaki
 
Requirements in Engineering AI- Enabled Systems: Open Problems and Safe AI Sy...
Requirements in Engineering AI- Enabled Systems: Open Problems and Safe AI Sy...Requirements in Engineering AI- Enabled Systems: Open Problems and Safe AI Sy...
Requirements in Engineering AI- Enabled Systems: Open Problems and Safe AI Sy...
Lionel Briand
 
Adobe Master Collection CC Crack Advance Version 2025
Adobe Master Collection CC Crack Advance Version 2025Adobe Master Collection CC Crack Advance Version 2025
Adobe Master Collection CC Crack Advance Version 2025
kashifyounis067
 
Mastering Fluent Bit: Ultimate Guide to Integrating Telemetry Pipelines with ...
Mastering Fluent Bit: Ultimate Guide to Integrating Telemetry Pipelines with ...Mastering Fluent Bit: Ultimate Guide to Integrating Telemetry Pipelines with ...
Mastering Fluent Bit: Ultimate Guide to Integrating Telemetry Pipelines with ...
Eric D. Schabell
 
FL Studio Producer Edition Crack 2025 Full Version
FL Studio Producer Edition Crack 2025 Full VersionFL Studio Producer Edition Crack 2025 Full Version
FL Studio Producer Edition Crack 2025 Full Version
tahirabibi60507
 
Designing AI-Powered APIs on Azure: Best Practices& Considerations
Designing AI-Powered APIs on Azure: Best Practices& ConsiderationsDesigning AI-Powered APIs on Azure: Best Practices& Considerations
Designing AI-Powered APIs on Azure: Best Practices& Considerations
Dinusha Kumarasiri
 
Download YouTube By Click 2025 Free Full Activated
Download YouTube By Click 2025 Free Full ActivatedDownload YouTube By Click 2025 Free Full Activated
Download YouTube By Click 2025 Free Full Activated
saniamalik72555
 
Explaining GitHub Actions Failures with Large Language Models Challenges, In...
Explaining GitHub Actions Failures with Large Language Models Challenges, In...Explaining GitHub Actions Failures with Large Language Models Challenges, In...
Explaining GitHub Actions Failures with Large Language Models Challenges, In...
ssuserb14185
 
Solidworks Crack 2025 latest new + license code
Solidworks Crack 2025 latest new + license codeSolidworks Crack 2025 latest new + license code
Solidworks Crack 2025 latest new + license code
aneelaramzan63
 
TestMigrationsInPy: A Dataset of Test Migrations from Unittest to Pytest (MSR...
TestMigrationsInPy: A Dataset of Test Migrations from Unittest to Pytest (MSR...TestMigrationsInPy: A Dataset of Test Migrations from Unittest to Pytest (MSR...
TestMigrationsInPy: A Dataset of Test Migrations from Unittest to Pytest (MSR...
Andre Hora
 
Interactive odoo dashboards for sales, CRM , Inventory, Invoice, Purchase, Pr...
Interactive odoo dashboards for sales, CRM , Inventory, Invoice, Purchase, Pr...Interactive odoo dashboards for sales, CRM , Inventory, Invoice, Purchase, Pr...
Interactive odoo dashboards for sales, CRM , Inventory, Invoice, Purchase, Pr...
AxisTechnolabs
 
Adobe Illustrator Crack FREE Download 2025 Latest Version
Adobe Illustrator Crack FREE Download 2025 Latest VersionAdobe Illustrator Crack FREE Download 2025 Latest Version
Adobe Illustrator Crack FREE Download 2025 Latest Version
kashifyounis067
 
Exceptional Behaviors: How Frequently Are They Tested? (AST 2025)
Exceptional Behaviors: How Frequently Are They Tested? (AST 2025)Exceptional Behaviors: How Frequently Are They Tested? (AST 2025)
Exceptional Behaviors: How Frequently Are They Tested? (AST 2025)
Andre Hora
 
Adobe Marketo Engage Champion Deep Dive - SFDC CRM Synch V2 & Usage Dashboards
Adobe Marketo Engage Champion Deep Dive - SFDC CRM Synch V2 & Usage DashboardsAdobe Marketo Engage Champion Deep Dive - SFDC CRM Synch V2 & Usage Dashboards
Adobe Marketo Engage Champion Deep Dive - SFDC CRM Synch V2 & Usage Dashboards
BradBedford3
 
Exploring Code Comprehension in Scientific Programming: Preliminary Insight...
Exploring Code Comprehension  in Scientific Programming:  Preliminary Insight...Exploring Code Comprehension  in Scientific Programming:  Preliminary Insight...
Exploring Code Comprehension in Scientific Programming: Preliminary Insight...
University of Hawai‘i at Mānoa
 
Download Wondershare Filmora Crack [2025] With Latest
Download Wondershare Filmora Crack [2025] With LatestDownload Wondershare Filmora Crack [2025] With Latest
Download Wondershare Filmora Crack [2025] With Latest
tahirabibi60507
 
Avast Premium Security Crack FREE Latest Version 2025
Avast Premium Security Crack FREE Latest Version 2025Avast Premium Security Crack FREE Latest Version 2025
Avast Premium Security Crack FREE Latest Version 2025
mu394968
 
How to Optimize Your AWS Environment for Improved Cloud Performance
How to Optimize Your AWS Environment for Improved Cloud PerformanceHow to Optimize Your AWS Environment for Improved Cloud Performance
How to Optimize Your AWS Environment for Improved Cloud Performance
ThousandEyes
 
Scaling GraphRAG: Efficient Knowledge Retrieval for Enterprise AI
Scaling GraphRAG:  Efficient Knowledge Retrieval for Enterprise AIScaling GraphRAG:  Efficient Knowledge Retrieval for Enterprise AI
Scaling GraphRAG: Efficient Knowledge Retrieval for Enterprise AI
danshalev
 
Douwan Crack 2025 new verson+ License code
Douwan Crack 2025 new verson+ License codeDouwan Crack 2025 new verson+ License code
Douwan Crack 2025 new verson+ License code
aneelaramzan63
 
Landscape of Requirements Engineering for/by AI through Literature Review
Landscape of Requirements Engineering for/by AI through Literature ReviewLandscape of Requirements Engineering for/by AI through Literature Review
Landscape of Requirements Engineering for/by AI through Literature Review
Hironori Washizaki
 
Requirements in Engineering AI- Enabled Systems: Open Problems and Safe AI Sy...
Requirements in Engineering AI- Enabled Systems: Open Problems and Safe AI Sy...Requirements in Engineering AI- Enabled Systems: Open Problems and Safe AI Sy...
Requirements in Engineering AI- Enabled Systems: Open Problems and Safe AI Sy...
Lionel Briand
 
Adobe Master Collection CC Crack Advance Version 2025
Adobe Master Collection CC Crack Advance Version 2025Adobe Master Collection CC Crack Advance Version 2025
Adobe Master Collection CC Crack Advance Version 2025
kashifyounis067
 
Mastering Fluent Bit: Ultimate Guide to Integrating Telemetry Pipelines with ...
Mastering Fluent Bit: Ultimate Guide to Integrating Telemetry Pipelines with ...Mastering Fluent Bit: Ultimate Guide to Integrating Telemetry Pipelines with ...
Mastering Fluent Bit: Ultimate Guide to Integrating Telemetry Pipelines with ...
Eric D. Schabell
 
FL Studio Producer Edition Crack 2025 Full Version
FL Studio Producer Edition Crack 2025 Full VersionFL Studio Producer Edition Crack 2025 Full Version
FL Studio Producer Edition Crack 2025 Full Version
tahirabibi60507
 
Designing AI-Powered APIs on Azure: Best Practices& Considerations
Designing AI-Powered APIs on Azure: Best Practices& ConsiderationsDesigning AI-Powered APIs on Azure: Best Practices& Considerations
Designing AI-Powered APIs on Azure: Best Practices& Considerations
Dinusha Kumarasiri
 
Download YouTube By Click 2025 Free Full Activated
Download YouTube By Click 2025 Free Full ActivatedDownload YouTube By Click 2025 Free Full Activated
Download YouTube By Click 2025 Free Full Activated
saniamalik72555
 
Explaining GitHub Actions Failures with Large Language Models Challenges, In...
Explaining GitHub Actions Failures with Large Language Models Challenges, In...Explaining GitHub Actions Failures with Large Language Models Challenges, In...
Explaining GitHub Actions Failures with Large Language Models Challenges, In...
ssuserb14185
 
Solidworks Crack 2025 latest new + license code
Solidworks Crack 2025 latest new + license codeSolidworks Crack 2025 latest new + license code
Solidworks Crack 2025 latest new + license code
aneelaramzan63
 

To TDD or not to TDD - that is the question

  • 1. TO TDD OR NOT TO TDD – THAT IS THE QUESTION Test-driven development: lessons from the Jenkins Git Plugin Mark Waite 28 Feb 2018 Agile Boulder
  • 2. AN EXPERIENCE TALK • My biases • My mistakes • My misperceptions This is a biased talk. I’m using my experiences and some data Biased by professional experience • 2003 – Extreme Programming - manager Loved it and lived it for 4 years at a 200 person company • 2007 – Scrum - manager Lived it for 6 years at a 5000 person company • 2013 – More scrum - director Lived it for 3 years at a 10,000 person company • 2017 – Technical evangelist at CloudBees We sell and support Jenkins to Enterprises Biased by personal experience • 2012 – My first commit to Jenkins git plugin (Java) • 2014 – Wrote many tests for git plugin and git client plugin • 2015 – Primary maintainer of git plugin and git client plugin • 2017 – Divided maintainer – I do legacy, Stephen does next gen Biased by beliefs • I believe in Test Driven Development
  • 3. TEST-DRIVEN DEVELOPMENT • Red – write a small failing test • Green – write to pass the test • Refactor – simplify and improve Three simple steps A lifetime to learn to do it well I love tests. I write tests. I run tests. I fix tests. Photo CC BY-SA 4.0
  • 5. WHAT IS JENKINS? Leading continuous integration server Open source, started in 2007 as Hudson Became Jenkins in 2011 150,000+ installations worldwide 1,300+ plugins Active community Strong integrations
  • 6. WHAT IS GIT? Most popular version control system Linux kernel tracked in Git Microsoft Windows tracked in Git Core technology at GitHub, Bitbucket, VS Online, …
  • 7. JENKINS GIT PLUGIN HISTORY Jenkins Git Plugin connects Jenkins to Git Historical Phases of Jenkins Git Plugin • Early adoption: 2007 - 2010 • Significant growth: 2010 – 2013 • Refactoring: 2013 - 2016 • Pipeline: 2017 - now
  • 8. EARLY ADOPTION 2007 - 2010 Early adoption questions: • Is git relevant to Jenkins users? • Which git features matter most?
  • 9. EARLY ADOPTION Unknowns • User value • Feature relevance • Performance measures Integration Hurdles • Few lines of code • Few components used • Few components depend on us
  • 10. INSTALLS AND TESTS IN EARLY ADOPTION 0 20000 40000 60000 80000 100000 120000 140000 160000 Jan-08 Jan-10 Jan-12 Jan-14 Jan-16 Jan-18 Active Jenkins Git Plugin Installations 0 2000 4000 6000 8000 10000 12000 14000 Jan-08 Jan-10 Jan-12 Jan-14 Jan-16 Jan-18 Jenkins Git Plugin lines of code vs. test LOC LOC Test LOC • User needs are more important than tests • Discover user needs by delivering • Test interactively for fastest delivery
  • 11. WIDESPREAD USE 2010 - 2013 Widespread use questions: • Easier to use? • Easier to diagnose? • Next features?
  • 12. WIDESPREAD USE More confident • User value • Feature relevance • Key performance measure Integration Hurdles • More features • More lines of code • More components used • Few components depend on us
  • 13. INSTALLS AND TESTS IN WIDESPREAD USE 0 20000 40000 60000 80000 100000 120000 140000 160000 Jan-08 Jan-10 Jan-12 Jan-14 Jan-16 Jan-18 Active Jenkins Git Plugin Installations 0 2000 4000 6000 8000 10000 12000 14000 Jan-08 Jan-10 Jan-12 Jan-14 Jan-16 Jan-18 Jenkins Git Plugin lines of code vs. test LOC LOC Test LOC • User needs are more important than tests • Discover user needs by delivering • Test interactively for fastest delivery • Feature and dependency growth is increasing the cost of testing
  • 14. REFACTORING 2013 - 2016 Resolve implementation problems Git is winning the source control wars More regressions from refactoring Refactor: • add JGit • extract git client
  • 15. REFACTORING Confident in • User value • Feature relevance • Key performance measures Integration Hurdles • More features • More lines of code • More components used • Many components depend on us
  • 16. INSTALLS AND TESTS IN REFACTORING 0 20000 40000 60000 80000 100000 120000 140000 160000 Jan-08 Jan-10 Jan-12 Jan-14 Jan-16 Jan-18 Active Jenkins Git Plugin Installations 0 2000 4000 6000 8000 10000 12000 14000 Jan-08 Jan-10 Jan-12 Jan-14 Jan-16 Jan-18 Jenkins Git Plugin lines of code vs. test LOC LOC Test LOC • User needs are often failed by regressions • Discover user needs by delivering • Test automation for fastest delivery • Interactive testing still finds most bugs • Feature and dependency growth is increasing the cost of testing
  • 17. PIPELINE 2017 - NOW Pipeline: • GitHub, Bitbucket optimizations • Simpler setup and maintenance • Higher performance
  • 18. PIPELINE Significant new • User value • Features • Key performance improved Integration Hurdles • More features • More lines of code • More components used • Critical part of Jenkins
  • 19. INSTALLS AND TESTS IN PIPELINE 0 20000 40000 60000 80000 100000 120000 140000 160000 Jan-08 Jan-10 Jan-12 Jan-14 Jan-16 Jan-18 Active Jenkins Git Plugin Installations 0 2000 4000 6000 8000 10000 12000 14000 Jan-08 Jan-10 Jan-12 Jan-14 Jan-16 Jan-18 Jenkins Git Plugin lines of code vs. test LOC LOC Test LOC • Regressions are less frequent • Discover user needs by delivering • Test automation prevents many regressions • Interactive testing still finds most bugs • Feature and dependency growth is increasing the cost of testing
  • 20. WHEN CAN I SKIP TESTS? Tests are not as critical if: • Code will be discarded • Failures are easy to detect • Interactive testing is enough • Risk is low from broken code
  • 21. WHEN SHOULD I ADD TESTS? Tests are more critical if: • Code will live a long time • Failures are hard to detect • Interactive testing is not enough • Risk is high from broken code

Editor's Notes

  • #3: This is an experience report. It is based on my biases, my errors, and my misperception. I share my history not because it is especially relevant to test driven development, but because it may help you understand some of the biases that are implicit in the talk. Most of my time with test driven development was as a manager watching teams practice it. I was the manager of a team that transitioned from waterfall to Extreme Programming in 2003. That team of 10-15 people went “all in” with Extreme Programming. We tore down the cubicle walls. We installed big white boards. We encouraged continuous integration and rigorous test driven development in the Java desktop application we created and released every 3 months. We worked that way for 4 years. It was fun. After those 4 years, in 2007 we were acquired by a larger company. The product was moved to India and we were assigned to a project writing SharePoint extensions in C#. I spent a few years managing SharePoint based development in C# with the same developers who had spent 4 years writing test driven the Java based desktop application. After we discovered that SharePoint was a poor choice for the tasks we were trying to accomplish, I was reassigned to manage the build team for a large database application written in Java. We didn’t write tests ourselves, but we ran the tests created by others. That lasted for a few years and provided new experiences, including running builds for hundreds of developers. After those 6 years, I joined a different company as a director in 2013. The team was creating a Java based replacement for a rule processing engine. We spent 3+ years bringing that Java based rule processing engine into multiple releases. More new experiences, and eventually an assignment to manage a team of C programmers in their work on a message bus. In 2017, I joined CloudBees as a technical evangelist. I now spend my time showing people how to do cool things with Jenkins. I think test driven development is great. I’ve been in organizations where we wrote very few automated tests and I’ve been in organizations where we wrote many, many automated tests. I prefer more automated tests and I prefer tests that are written while the code is being written. We created our own python based continuous integration server in 2003, then switched to Hudson in 2007 when it became available. Hudson became Jenkins in 2011. I submitted tests to the Jenkins git plugin in 2014 when I became frustrated at the regressions I was detecting in new releases. In 2015 I became the primary maintainer of the plugin. In 2017, Stephen Connolly became a maintainer and added some really great multi-branch Pipeline features which he maintains. My history is only relevant to you if it helps you understand my biases. I think test driven development is great. I think everyone should do it almost all the time. However, others don’t always think that way. In particular, the original developers of the Jenkins git plugin don’t work that way. This talk uses history to look at those places where a lack of automated tests, and a lack of test driven development can be good, helpful, and workable.
  • #10: This is a period of fast learning and experimentation. There is less code to break and fewer dependencies
  • #11: I’m a test driven development proponent. I love test driven development. Yet here we see adoption and delight with code that is definitely not test driven. For the first 18 months of the existence of the plugin, there are no tests. None. All verification is done interactively before a release. How were they so successful? Because users are more important than tests. Interactive testing at this stage is much faster than writing tests.