SlideShare une entreprise Scribd logo
1  sur  127
Beyond TDD
Enabling Your Team to Continuously Deliver Software
Me
•   Fightin’ Texas Aggie

•   .Net and PHP Developer

•   UNIX and Windows Sysadmin

•   Senior Consultant at

    Improving Enterprises

•   chris@chrisweldon.net
Promotion
Promotion
•   @neraath
Promotion
•   @neraath

•   #adn12
Promotion
•   @neraath

•   #adn12

•   #tdd
Promotion
•   @neraath

•   #adn12

•   #tdd

•   #thisguyisawesome
Promotion
•   @neraath

•   #adn12

•   #tdd

•   #thisguyisawesome

•   #bestspeakerever
Promotion
•   @neraath

•   #adn12

•   #tdd

•   #thisguyisawesome

•   #bestspeakerever

•   #terrbilepresenter
Promotion
•   @neraath

•   #adn12

•   #tdd

•   #thisguyisawesome

•   #bestspeakerever

•   #terrbilepresenter

•   #worstpresentation
is hiring!
Overview
•   No code or demonstrations
•   TDD in your current environment
•   Continuous Integration
•   Continuous Delivery
•   Is it worth it?
•   Your next steps
Agile
in g
B e       Agile
“Working software is
the primary measure of
       progress”
Tests
Unit
Load
UI?
Performance
Unit
Unit
Testing
Unit
Testing
Unit leads to
Testing
Unit leads to
                 TDD
Testing
Unit leads to
                 TDD
Testing
Challenges Getting Past
         TDD
Who/What Broke My
     Build?
Integration
Integration
You Don’t See the Forest thru the Trees
Code Quality
Coding Standards
using System;

namespace BeyondTDD
{
   public class StringUtils
   {
      /// <summary>
      /// Strips double quotes from the provided <paramref name="sourceString" />.
      /// </summary>
      /// <param name="sourceString">The source to strip quotes from.</param>
      /// <returns>A string without quotes.</returns>
      public string StripQuotes(string sourceString)
      {
        if (string.IsNullOrEmpty(sourceString))
          throw new ArgumentNullException("sourceString");
        return sourceString.Replace('"', string.Empty);
      }
   }
}
using System;

namespace BeyondTDD
{
    public class StringUtils
    {


        /// <summary>
        /// Strips double quotes from the provided <paramref name="sourceString" />.
        /// </summary>
        public string StripQuotes(string sourceString) {
            if (sourceString == null) {
                throw new ArgumentNullException("sourceString");
            }
            return sourceString.Replace('"', "");
        }


        // Look at all the spaces, ma!

    }
}
using System;

namespace BeyondTDD {
public class StringUtils
{

/*** I had to change this method cause I'm a n00b.
   public string StripQuotes(string sourceString)
    {
        foreach(char c in sourceString) {
            if (c == '"')
            { sourceString[c] == ""; }
        }

                 return sourceString;
         }
*/

             // comments? what comments? this makes sense, right?
             public string StripQuotes(string sourceString)
     {
                if (sourceString == null)
                    {
                    //throw new ArgumentNullException("sourceString");
                    // I <3 Exception more than anything else.
                    throw new Exception("sourceString");
                }


                return sourceString.Replace('"', "");
} } }
I will hunt you down and shoot you like a duck dog.
Security


             srsly?
           what hacker
           wears a tie?
Creating and Deploying
 a Releasable Package
The Feedback Loop is
    Wide Open
How to Improve?
Continuous Integration
CI is a Practice
CI is a Practice

•   Integrate now, and frequently, rather than
    at the end of development
•   Smaller surface area for integration
    problems
    •   Devs can rapidly fix when they occur
•   Reduces “Integration Hell”
Martin Fowler
Practical CI
involves Tools
What do you need?
                            Build Server Accessible by
Source Control
                                   Entire Team

                                 Your Shell Scripts




       Commit to
trunk / master / mainline
         often
What do you need?
•   Automate your build
    •   Manual steps increases risk of failure
•   Make your build self-testing
    •   Writing unit tests is not enough
    •   Must be able to execute tests with a
        single command
What does it do?
What does it do?

Runs Tests
What does it do?

Runs Tests
What does it do?
               Generates
Runs Tests
             Documentation
What does it do?
               Generates
Runs Tests
             Documentation
What does it do?
               Generates
Runs Tests                   Quality Analysis
             Documentation
What does it do?
               Generates
Runs Tests                   Quality Analysis
             Documentation
What does it do?
What does it do?
What does it do?
               Integrates
                projects
What does it do?
                          Integrates
                           projects



Project Status
  is Visible
    to the
     Team
What does it do?
                          Integrates
                           projects



Project Status
  is Visible
    to the
     Team
“Fail Fast”
“Fail Fast”
This Closes our Feedback Loop
“Fail Fast”
•   Every commit (to the trunk) should be
    built
•   Keep the build fast
•   Notify (and make visible to) the entire
    team
    •   Intrusively notify the team of failures
•   Make sure to fix the build after it’s broken
Word to the Wise: Don’t Break the Build!
Other CI
         Considerations
•   Repeatable & reliable
•   Should be able to run the same build
    process locally
•   Break up large testing suites
    •   Remember, “Fail Fast”
If it’s difficult or painful,




do it more often.
Continuous Delivery
Continuous Delivery is
developing in such a way that
 software is always ready for
           release.
More on Being Agile
More on Being Agile
More on Being Agile

“Our highest priority is to satisfy the customer through
  early and continuous delivery of valuable software.”
More on Being Agile

“Our highest priority is to satisfy the customer through
  early and continuous delivery of valuable software.”
Users Drive Your Value
      Much like beauty, value is
    in the eyes of the beholder.
Get In Front of Users
        Sooner
The “Last Mile” Problem

“The further apart your releases are, the more risk you
        introduce that the changes are wrong.”
                        - Jez Humble
Strategies
Minimum Viable Product
Do the minimum
 amount of work
    necessary
Get in front of users
  immediately
Usage Patterns
Measure Conversion /
Behavior Expectations
Why?

•   We want constant feedback
    •   How else do we know what we’re doing
        is valuable?
•   Constant testing and improving our
    delivery process
What about Large
   Features?
Incomplete Features
Incomplete Features

•   Sometimes a feature is just too big
Incomplete Features

•   Sometimes a feature is just too big
    •   Incomplete features across releases
Incomplete Features

•   Sometimes a feature is just too big
    •   Incomplete features across releases
•   Ship it anyways!
Incomplete Features

•   Sometimes a feature is just too big
    •   Incomplete features across releases
•   Ship it anyways!
    •   Beware the Beta
Incomplete Features

•   Sometimes a feature is just too big
    •   Incomplete features across releases
•   Ship it anyways!
    •   Beware the Beta

    •   Solution: Feature Toggles
Feature Toggles
Feature Toggles
Feature Toggles
Feature Toggles
Feature Toggles
Clear the Delivery Path
•   MVP helps to make the team think about going to
    production as soon as possible

•   Deal with Production Gates

    •   Work to cut, simplify, or work around
        organizational red tape

    •   Find “creative solutions” that satisfy everyone
        while emphasizing the business goals
Everybody has
responsibility for the
   release process
DBAs          UX          QA



          Everybody has
      responsibility for the
         release process
Operations   Developers   Managers
Everyone’s
       Responsibilities

•   How do I automate the testing and
    validation after deploying?
•   How do I make it easier for the team to
    release?
Developer
       Responsibilities

•   How do I keep my software releasable?
•   What does it take to deploy my software?
DBA Responsibilities


•   How do I automate schema deployments?
•   How do I give the build server autonomy
    to deploy?
Ops Responsibilities

•   How do I want the software to be
    deployed?
•   How do I give the build server autonomy
    to deploy?
Tester Responsibilities


•   Did the automated deployment succeed?
    •   This is not the same as testing software.
Deploy
Deploy

•   Use the same mechanism for every
    environment
•   Should be simple
•   For products, use the same mechanisms as
    your customers
Deployment for SaaS

•   FTP/SCP
•   PowerShell
•   Shell Scripting
•   MSBuild
•   MSI/Installer Packages
Deployment for
          Products

•   Windows Installers
    •   Built-in, InstallShield, Wise,VISE, etc.
•   Installer (Mac OS)
Deployment Quality
•   Important to establish trust
•   End-to-end functional tests become more
    valuable
    •   Behavior-Driven Development helps to
        realize this
•   Other quality metrics become just as useful
    •   Performance, compatibility, security
Deploy

•   When you’ve deployed, have automated
    smoke tests validate a successful
    deployment
•   If something’s wrong:
    •   Turn off the feature or rollback
    •   Don’t “hack” a fix
If it’s difficult or painful,




do it more often.
Is it worth it?
•   By removing barriers, rehearsing, and
    continuously improving the release
    process, the risk of a release is reduced
    •   Becomes a regular occurrence rather
        than a traumatic procedure
•   Everyone is involved in making the release
    process more automated & efficient
Is it worth it?

•   Feedback determines the viability of your
    feature
    •   Increases confidence when it’s right
    •   Decreases cost when it’s wrong
Moving Forward
•   Identify a single task
    •   Something that is particularly time
        consuming and/or painful
•   Automate the task
•   Start collecting metrics
•   Build team confidence
Moving Forward
•   You need to talk to the business

•   Ask these questions:

    •   Would you like to set the release schedule?

    •   Would you like to minimize risk during deployments?

    •   Would you like to maximize investment on features
        our customers really want?

•   Be sure to alert them of the up-front investment
    required!
Moving Forward


•   Need help?
    •   After the talk, or after hours party
    •   askanagilist@improvingenterprises.com
Questions?
Thanks!


spkr8.com/neraath
References

•   http://www.informit.com/articles/article.aspx?p=1829417

•   http://www.informit.com/articles/article.aspx?p=1750200

•   http://kief.com/the-conflict-between-continuous-delivery-and-traditional-agile.html

•   http://techcrunch.com/2011/10/19/dropbox-minimal-viable-product/

Contenu connexe

Tendances

Scrum Plus Extreme Programming (XP) for Hyper Productivity
Scrum Plus Extreme Programming (XP) for Hyper ProductivityScrum Plus Extreme Programming (XP) for Hyper Productivity
Scrum Plus Extreme Programming (XP) for Hyper ProductivityRon Quartel
 
Automate across Platform, OS, Technologies with TaaS
Automate across Platform, OS, Technologies with TaaSAutomate across Platform, OS, Technologies with TaaS
Automate across Platform, OS, Technologies with TaaSAnand Bagmar
 
Continuous Deployment at Etsy — TimesOpen NYC
Continuous Deployment at Etsy — TimesOpen NYCContinuous Deployment at Etsy — TimesOpen NYC
Continuous Deployment at Etsy — TimesOpen NYCMike Brittain
 
Agile Testing Best Practices
Agile Testing Best PracticesAgile Testing Best Practices
Agile Testing Best PracticesStephen Ritchie
 
Flexing your Agile Muscle - Agile Technical Concepts Explained
Flexing your Agile Muscle - Agile Technical Concepts ExplainedFlexing your Agile Muscle - Agile Technical Concepts Explained
Flexing your Agile Muscle - Agile Technical Concepts ExplainedSandy Mamoli
 
QA team transition to agile testing at Alcatel Lucent
QA team transition to agile testing at Alcatel LucentQA team transition to agile testing at Alcatel Lucent
QA team transition to agile testing at Alcatel LucentAgileSparks
 
Continuous Deployment: Startup Lessons Learned
Continuous Deployment: Startup Lessons LearnedContinuous Deployment: Startup Lessons Learned
Continuous Deployment: Startup Lessons LearnedAsh Maurya
 
Continuous Delivery Distilled
Continuous Delivery DistilledContinuous Delivery Distilled
Continuous Delivery DistilledMatt Callanan
 
有了 Agile,為什麼還要有 DevOps?
有了 Agile,為什麼還要有 DevOps?有了 Agile,為什麼還要有 DevOps?
有了 Agile,為什麼還要有 DevOps?William Yeh
 
ALE15 The real value of a definition of done
ALE15  The real value of a definition of doneALE15  The real value of a definition of done
ALE15 The real value of a definition of doneChristian Vos
 
Product! - The road to production deployment
Product! - The road to production deploymentProduct! - The road to production deployment
Product! - The road to production deploymentFilippo Zanella
 
Introduction to DevOps
Introduction to DevOpsIntroduction to DevOps
Introduction to DevOpsDmitry Buzdin
 
Scrum + Behavior Driven Development (BDD) - Colombo
Scrum + Behavior Driven Development (BDD) - ColomboScrum + Behavior Driven Development (BDD) - Colombo
Scrum + Behavior Driven Development (BDD) - ColomboNaveen Kumar Singh
 
Devops, Secops, Opsec, DevSec *ops *.* ?
Devops, Secops, Opsec, DevSec *ops *.* ?Devops, Secops, Opsec, DevSec *ops *.* ?
Devops, Secops, Opsec, DevSec *ops *.* ?Kris Buytaert
 
Introduction to Continuous Delivery (BBWorld/DevCon 2013)
Introduction to Continuous Delivery (BBWorld/DevCon 2013)Introduction to Continuous Delivery (BBWorld/DevCon 2013)
Introduction to Continuous Delivery (BBWorld/DevCon 2013)Mike McGarr
 
Monitoring 改造計畫:流程觀點
Monitoring 改造計畫:流程觀點Monitoring 改造計畫:流程觀點
Monitoring 改造計畫:流程觀點William Yeh
 
Selenium Users Anonymous
Selenium Users AnonymousSelenium Users Anonymous
Selenium Users AnonymousDave Haeffner
 
Facilitating Release Planning Event
Facilitating Release Planning EventFacilitating Release Planning Event
Facilitating Release Planning EventRavi Tadwalkar
 
Silverlight vs HTML5 - Lessons learned from the real world...
Silverlight vs HTML5 - Lessons learned from the real world...Silverlight vs HTML5 - Lessons learned from the real world...
Silverlight vs HTML5 - Lessons learned from the real world...Peter Gfader
 

Tendances (20)

Scrum Plus Extreme Programming (XP) for Hyper Productivity
Scrum Plus Extreme Programming (XP) for Hyper ProductivityScrum Plus Extreme Programming (XP) for Hyper Productivity
Scrum Plus Extreme Programming (XP) for Hyper Productivity
 
Automate across Platform, OS, Technologies with TaaS
Automate across Platform, OS, Technologies with TaaSAutomate across Platform, OS, Technologies with TaaS
Automate across Platform, OS, Technologies with TaaS
 
Continuous Deployment at Etsy — TimesOpen NYC
Continuous Deployment at Etsy — TimesOpen NYCContinuous Deployment at Etsy — TimesOpen NYC
Continuous Deployment at Etsy — TimesOpen NYC
 
Agile Testing Best Practices
Agile Testing Best PracticesAgile Testing Best Practices
Agile Testing Best Practices
 
Flexing your Agile Muscle - Agile Technical Concepts Explained
Flexing your Agile Muscle - Agile Technical Concepts ExplainedFlexing your Agile Muscle - Agile Technical Concepts Explained
Flexing your Agile Muscle - Agile Technical Concepts Explained
 
QA team transition to agile testing at Alcatel Lucent
QA team transition to agile testing at Alcatel LucentQA team transition to agile testing at Alcatel Lucent
QA team transition to agile testing at Alcatel Lucent
 
Continuous Deployment: Startup Lessons Learned
Continuous Deployment: Startup Lessons LearnedContinuous Deployment: Startup Lessons Learned
Continuous Deployment: Startup Lessons Learned
 
Continuous Delivery Distilled
Continuous Delivery DistilledContinuous Delivery Distilled
Continuous Delivery Distilled
 
有了 Agile,為什麼還要有 DevOps?
有了 Agile,為什麼還要有 DevOps?有了 Agile,為什麼還要有 DevOps?
有了 Agile,為什麼還要有 DevOps?
 
ALE15 The real value of a definition of done
ALE15  The real value of a definition of doneALE15  The real value of a definition of done
ALE15 The real value of a definition of done
 
Product! - The road to production deployment
Product! - The road to production deploymentProduct! - The road to production deployment
Product! - The road to production deployment
 
Introduction to DevOps
Introduction to DevOpsIntroduction to DevOps
Introduction to DevOps
 
FAST Agile
FAST AgileFAST Agile
FAST Agile
 
Scrum + Behavior Driven Development (BDD) - Colombo
Scrum + Behavior Driven Development (BDD) - ColomboScrum + Behavior Driven Development (BDD) - Colombo
Scrum + Behavior Driven Development (BDD) - Colombo
 
Devops, Secops, Opsec, DevSec *ops *.* ?
Devops, Secops, Opsec, DevSec *ops *.* ?Devops, Secops, Opsec, DevSec *ops *.* ?
Devops, Secops, Opsec, DevSec *ops *.* ?
 
Introduction to Continuous Delivery (BBWorld/DevCon 2013)
Introduction to Continuous Delivery (BBWorld/DevCon 2013)Introduction to Continuous Delivery (BBWorld/DevCon 2013)
Introduction to Continuous Delivery (BBWorld/DevCon 2013)
 
Monitoring 改造計畫:流程觀點
Monitoring 改造計畫:流程觀點Monitoring 改造計畫:流程觀點
Monitoring 改造計畫:流程觀點
 
Selenium Users Anonymous
Selenium Users AnonymousSelenium Users Anonymous
Selenium Users Anonymous
 
Facilitating Release Planning Event
Facilitating Release Planning EventFacilitating Release Planning Event
Facilitating Release Planning Event
 
Silverlight vs HTML5 - Lessons learned from the real world...
Silverlight vs HTML5 - Lessons learned from the real world...Silverlight vs HTML5 - Lessons learned from the real world...
Silverlight vs HTML5 - Lessons learned from the real world...
 

En vedette

Finding practice tools
Finding practice toolsFinding practice tools
Finding practice toolsdrakowski
 
How to search like a pro
How to search like a proHow to search like a pro
How to search like a prodrakowski
 
Legal ethics online
Legal ethics onlineLegal ethics online
Legal ethics onlinedrakowski
 
REST Easy - Building RESTful Services in Zend Framework
REST Easy - Building RESTful Services in Zend FrameworkREST Easy - Building RESTful Services in Zend Framework
REST Easy - Building RESTful Services in Zend FrameworkChris Weldon
 
RESTful API Design & Implementation with CodeIgniter PHP Framework
RESTful API Design & Implementation with CodeIgniter PHP FrameworkRESTful API Design & Implementation with CodeIgniter PHP Framework
RESTful API Design & Implementation with CodeIgniter PHP FrameworkBo-Yi Wu
 
Web Services PHP Tutorial
Web Services PHP TutorialWeb Services PHP Tutorial
Web Services PHP TutorialLorna Mitchell
 

En vedette (6)

Finding practice tools
Finding practice toolsFinding practice tools
Finding practice tools
 
How to search like a pro
How to search like a proHow to search like a pro
How to search like a pro
 
Legal ethics online
Legal ethics onlineLegal ethics online
Legal ethics online
 
REST Easy - Building RESTful Services in Zend Framework
REST Easy - Building RESTful Services in Zend FrameworkREST Easy - Building RESTful Services in Zend Framework
REST Easy - Building RESTful Services in Zend Framework
 
RESTful API Design & Implementation with CodeIgniter PHP Framework
RESTful API Design & Implementation with CodeIgniter PHP FrameworkRESTful API Design & Implementation with CodeIgniter PHP Framework
RESTful API Design & Implementation with CodeIgniter PHP Framework
 
Web Services PHP Tutorial
Web Services PHP TutorialWeb Services PHP Tutorial
Web Services PHP Tutorial
 

Similaire à Beyond TDD: Enabling Your Team to Continuously Deliver Software

Continuous delivery is more than dev ops
Continuous delivery is more than dev opsContinuous delivery is more than dev ops
Continuous delivery is more than dev opsAgile Montréal
 
Continuous delivery @wcap 5-09-2013
Continuous delivery   @wcap 5-09-2013Continuous delivery   @wcap 5-09-2013
Continuous delivery @wcap 5-09-2013David Funaro
 
DevOps, Common use cases, Architectures, Best Practices
DevOps, Common use cases, Architectures, Best PracticesDevOps, Common use cases, Architectures, Best Practices
DevOps, Common use cases, Architectures, Best PracticesShiva Narayanaswamy
 
Testing and DevOps Culture: Lessons Learned
Testing and DevOps Culture: Lessons LearnedTesting and DevOps Culture: Lessons Learned
Testing and DevOps Culture: Lessons LearnedLB Denker
 
The Continuous delivery value - Funaro
The Continuous delivery value - FunaroThe Continuous delivery value - Funaro
The Continuous delivery value - FunaroCodemotion
 
The Continuous delivery Value @ codemotion 2014
The Continuous delivery Value @ codemotion 2014The Continuous delivery Value @ codemotion 2014
The Continuous delivery Value @ codemotion 2014David Funaro
 
You build it, you run it
You build it, you run itYou build it, you run it
You build it, you run itSkyscanner
 
Deployment is the new build
Deployment is the new buildDeployment is the new build
Deployment is the new buildAndrew Phillips
 
[Webinar] Test First, Fail Fast - Simplifying the Tester's Transition to DevOps
[Webinar] Test First, Fail Fast - Simplifying the Tester's Transition to DevOps[Webinar] Test First, Fail Fast - Simplifying the Tester's Transition to DevOps
[Webinar] Test First, Fail Fast - Simplifying the Tester's Transition to DevOpsKMS Technology
 
Agile development practices - How do they really work ?
Agile development practices - How do they really work ?Agile development practices - How do they really work ?
Agile development practices - How do they really work ?anand003
 
Why your company loves to welcome change but sucks at accommodating it
Why your company loves to welcome change but sucks at accommodating itWhy your company loves to welcome change but sucks at accommodating it
Why your company loves to welcome change but sucks at accommodating itFarooq Ali
 
Keeping Your DevOps Transformation From Crushing Your Ops Capacity
Keeping Your DevOps Transformation From Crushing Your Ops Capacity Keeping Your DevOps Transformation From Crushing Your Ops Capacity
Keeping Your DevOps Transformation From Crushing Your Ops Capacity Rundeck
 
Driving application development through behavior driven development
Driving application development through behavior driven developmentDriving application development through behavior driven development
Driving application development through behavior driven developmentEinar Ingebrigtsen
 
Design patterns for efficient DevOps processes - Rebecca Fitzhugh - DevOpsDay...
Design patterns for efficient DevOps processes - Rebecca Fitzhugh - DevOpsDay...Design patterns for efficient DevOps processes - Rebecca Fitzhugh - DevOpsDay...
Design patterns for efficient DevOps processes - Rebecca Fitzhugh - DevOpsDay...DevOpsDays Tel Aviv
 
Confoo-Montreal-2016: Controlling Your Environments using Infrastructure as Code
Confoo-Montreal-2016: Controlling Your Environments using Infrastructure as CodeConfoo-Montreal-2016: Controlling Your Environments using Infrastructure as Code
Confoo-Montreal-2016: Controlling Your Environments using Infrastructure as CodeSteve Mercier
 
Integration testing in enterprises using TaaS
Integration testing in enterprises using TaaS Integration testing in enterprises using TaaS
Integration testing in enterprises using TaaS Anand Bagmar
 
Building QA Team that matters for an Agile World
Building QA Team that matters for an Agile WorldBuilding QA Team that matters for an Agile World
Building QA Team that matters for an Agile WorldMaurizio Mancini
 

Similaire à Beyond TDD: Enabling Your Team to Continuously Deliver Software (20)

Continuous delivery is more than dev ops
Continuous delivery is more than dev opsContinuous delivery is more than dev ops
Continuous delivery is more than dev ops
 
Continuous delivery @wcap 5-09-2013
Continuous delivery   @wcap 5-09-2013Continuous delivery   @wcap 5-09-2013
Continuous delivery @wcap 5-09-2013
 
DevOps, Common use cases, Architectures, Best Practices
DevOps, Common use cases, Architectures, Best PracticesDevOps, Common use cases, Architectures, Best Practices
DevOps, Common use cases, Architectures, Best Practices
 
Testing and DevOps Culture: Lessons Learned
Testing and DevOps Culture: Lessons LearnedTesting and DevOps Culture: Lessons Learned
Testing and DevOps Culture: Lessons Learned
 
The Continuous delivery value - Funaro
The Continuous delivery value - FunaroThe Continuous delivery value - Funaro
The Continuous delivery value - Funaro
 
The Continuous delivery Value @ codemotion 2014
The Continuous delivery Value @ codemotion 2014The Continuous delivery Value @ codemotion 2014
The Continuous delivery Value @ codemotion 2014
 
You build it, you run it
You build it, you run itYou build it, you run it
You build it, you run it
 
Deployment is the new build
Deployment is the new buildDeployment is the new build
Deployment is the new build
 
[Webinar] Test First, Fail Fast - Simplifying the Tester's Transition to DevOps
[Webinar] Test First, Fail Fast - Simplifying the Tester's Transition to DevOps[Webinar] Test First, Fail Fast - Simplifying the Tester's Transition to DevOps
[Webinar] Test First, Fail Fast - Simplifying the Tester's Transition to DevOps
 
AvenDATA and Devops
AvenDATA and DevopsAvenDATA and Devops
AvenDATA and Devops
 
Agile development practices - How do they really work ?
Agile development practices - How do they really work ?Agile development practices - How do they really work ?
Agile development practices - How do they really work ?
 
Why your company loves to welcome change but sucks at accommodating it
Why your company loves to welcome change but sucks at accommodating itWhy your company loves to welcome change but sucks at accommodating it
Why your company loves to welcome change but sucks at accommodating it
 
Keeping Your DevOps Transformation From Crushing Your Ops Capacity
Keeping Your DevOps Transformation From Crushing Your Ops Capacity Keeping Your DevOps Transformation From Crushing Your Ops Capacity
Keeping Your DevOps Transformation From Crushing Your Ops Capacity
 
Production-ready Software
Production-ready SoftwareProduction-ready Software
Production-ready Software
 
Driving application development through behavior driven development
Driving application development through behavior driven developmentDriving application development through behavior driven development
Driving application development through behavior driven development
 
Design patterns for efficient DevOps processes - Rebecca Fitzhugh - DevOpsDay...
Design patterns for efficient DevOps processes - Rebecca Fitzhugh - DevOpsDay...Design patterns for efficient DevOps processes - Rebecca Fitzhugh - DevOpsDay...
Design patterns for efficient DevOps processes - Rebecca Fitzhugh - DevOpsDay...
 
Confoo-Montreal-2016: Controlling Your Environments using Infrastructure as Code
Confoo-Montreal-2016: Controlling Your Environments using Infrastructure as CodeConfoo-Montreal-2016: Controlling Your Environments using Infrastructure as Code
Confoo-Montreal-2016: Controlling Your Environments using Infrastructure as Code
 
Integration testing in enterprises using TaaS
Integration testing in enterprises using TaaS Integration testing in enterprises using TaaS
Integration testing in enterprises using TaaS
 
Building QA Team that matters for an Agile World
Building QA Team that matters for an Agile WorldBuilding QA Team that matters for an Agile World
Building QA Team that matters for an Agile World
 
Don't Mind the Gap by Galen Emery
Don't Mind the Gap by Galen EmeryDon't Mind the Gap by Galen Emery
Don't Mind the Gap by Galen Emery
 

Plus de Chris Weldon

SOLID - Not Just a State of Matter, It's Principles for OO Propriety
SOLID - Not Just a State of Matter, It's Principles for OO ProprietySOLID - Not Just a State of Matter, It's Principles for OO Propriety
SOLID - Not Just a State of Matter, It's Principles for OO ProprietyChris Weldon
 
Unit Testing in SharePoint 2010
Unit Testing in SharePoint 2010Unit Testing in SharePoint 2010
Unit Testing in SharePoint 2010Chris Weldon
 

Plus de Chris Weldon (6)

Keat presentation
Keat presentationKeat presentation
Keat presentation
 
SOLID - Not Just a State of Matter, It's Principles for OO Propriety
SOLID - Not Just a State of Matter, It's Principles for OO ProprietySOLID - Not Just a State of Matter, It's Principles for OO Propriety
SOLID - Not Just a State of Matter, It's Principles for OO Propriety
 
SOLID Principles
SOLID PrinciplesSOLID Principles
SOLID Principles
 
Unit Testing in SharePoint 2010
Unit Testing in SharePoint 2010Unit Testing in SharePoint 2010
Unit Testing in SharePoint 2010
 
IoC with PHP
IoC with PHPIoC with PHP
IoC with PHP
 
PHP & MVC
PHP & MVCPHP & MVC
PHP & MVC
 

Dernier

Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024The Digital Insurer
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024Rafal Los
 
Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonAnna Loughnan Colquhoun
 
How to convert PDF to text with Nanonets
How to convert PDF to text with NanonetsHow to convert PDF to text with Nanonets
How to convert PDF to text with Nanonetsnaman860154
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationRadu Cotescu
 
Presentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreterPresentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreternaman860154
 
Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfsudhanshuwaghmare1
 
A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024Results
 
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptxEIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptxEarley Information Science
 
The Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxThe Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxMalak Abu Hammad
 
Boost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityBoost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityPrincipled Technologies
 
CNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of ServiceCNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of Servicegiselly40
 
08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking MenDelhi Call girls
 
🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘RTylerCroy
 
Slack Application Development 101 Slides
Slack Application Development 101 SlidesSlack Application Development 101 Slides
Slack Application Development 101 Slidespraypatel2
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...apidays
 
IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsIAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsEnterprise Knowledge
 
Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Scriptwesley chun
 
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfThe Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfEnterprise Knowledge
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationMichael W. Hawkins
 

Dernier (20)

Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024
 
Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt Robison
 
How to convert PDF to text with Nanonets
How to convert PDF to text with NanonetsHow to convert PDF to text with Nanonets
How to convert PDF to text with Nanonets
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organization
 
Presentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreterPresentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreter
 
Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdf
 
A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024
 
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptxEIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
 
The Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxThe Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptx
 
Boost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityBoost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivity
 
CNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of ServiceCNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of Service
 
08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men
 
🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘
 
Slack Application Development 101 Slides
Slack Application Development 101 SlidesSlack Application Development 101 Slides
Slack Application Development 101 Slides
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
 
IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsIAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI Solutions
 
Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Script
 
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfThe Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day Presentation
 

Beyond TDD: Enabling Your Team to Continuously Deliver Software

  • 1. Beyond TDD Enabling Your Team to Continuously Deliver Software
  • 2. Me • Fightin’ Texas Aggie • .Net and PHP Developer • UNIX and Windows Sysadmin • Senior Consultant at Improving Enterprises • chris@chrisweldon.net
  • 4. Promotion • @neraath
  • 5. Promotion • @neraath • #adn12
  • 6. Promotion • @neraath • #adn12 • #tdd
  • 7. Promotion • @neraath • #adn12 • #tdd • #thisguyisawesome
  • 8. Promotion • @neraath • #adn12 • #tdd • #thisguyisawesome • #bestspeakerever
  • 9. Promotion • @neraath • #adn12 • #tdd • #thisguyisawesome • #bestspeakerever • #terrbilepresenter
  • 10. Promotion • @neraath • #adn12 • #tdd • #thisguyisawesome • #bestspeakerever • #terrbilepresenter • #worstpresentation
  • 12. Overview • No code or demonstrations • TDD in your current environment • Continuous Integration • Continuous Delivery • Is it worth it? • Your next steps
  • 13. Agile
  • 14. in g B e Agile
  • 15. “Working software is the primary measure of progress”
  • 16. Tests
  • 17. Unit
  • 18. Load
  • 19. UI?
  • 21. Unit
  • 25. Unit leads to TDD Testing
  • 26. Unit leads to TDD Testing
  • 30. Integration You Don’t See the Forest thru the Trees
  • 33. using System; namespace BeyondTDD { public class StringUtils { /// <summary> /// Strips double quotes from the provided <paramref name="sourceString" />. /// </summary> /// <param name="sourceString">The source to strip quotes from.</param> /// <returns>A string without quotes.</returns> public string StripQuotes(string sourceString) { if (string.IsNullOrEmpty(sourceString)) throw new ArgumentNullException("sourceString"); return sourceString.Replace('"', string.Empty); } } }
  • 34. using System; namespace BeyondTDD { public class StringUtils { /// <summary> /// Strips double quotes from the provided <paramref name="sourceString" />. /// </summary> public string StripQuotes(string sourceString) { if (sourceString == null) { throw new ArgumentNullException("sourceString"); } return sourceString.Replace('"', ""); } // Look at all the spaces, ma! } }
  • 35. using System; namespace BeyondTDD { public class StringUtils { /*** I had to change this method cause I'm a n00b. public string StripQuotes(string sourceString) { foreach(char c in sourceString) { if (c == '"') { sourceString[c] == ""; } } return sourceString; } */ // comments? what comments? this makes sense, right? public string StripQuotes(string sourceString) { if (sourceString == null) { //throw new ArgumentNullException("sourceString"); // I <3 Exception more than anything else. throw new Exception("sourceString"); } return sourceString.Replace('"', ""); } } }
  • 36. I will hunt you down and shoot you like a duck dog.
  • 37.
  • 38. Security srsly? what hacker wears a tie?
  • 39. Creating and Deploying a Releasable Package
  • 40. The Feedback Loop is Wide Open
  • 43. CI is a Practice
  • 44. CI is a Practice • Integrate now, and frequently, rather than at the end of development • Smaller surface area for integration problems • Devs can rapidly fix when they occur • Reduces “Integration Hell”
  • 45.
  • 48. What do you need? Build Server Accessible by Source Control Entire Team Your Shell Scripts Commit to trunk / master / mainline often
  • 49. What do you need? • Automate your build • Manual steps increases risk of failure • Make your build self-testing • Writing unit tests is not enough • Must be able to execute tests with a single command
  • 51. What does it do? Runs Tests
  • 52. What does it do? Runs Tests
  • 53. What does it do? Generates Runs Tests Documentation
  • 54. What does it do? Generates Runs Tests Documentation
  • 55. What does it do? Generates Runs Tests Quality Analysis Documentation
  • 56. What does it do? Generates Runs Tests Quality Analysis Documentation
  • 59. What does it do? Integrates projects
  • 60. What does it do? Integrates projects Project Status is Visible to the Team
  • 61. What does it do? Integrates projects Project Status is Visible to the Team
  • 63. “Fail Fast” This Closes our Feedback Loop
  • 64. “Fail Fast” • Every commit (to the trunk) should be built • Keep the build fast • Notify (and make visible to) the entire team • Intrusively notify the team of failures • Make sure to fix the build after it’s broken
  • 65.
  • 66. Word to the Wise: Don’t Break the Build!
  • 67.
  • 68. Other CI Considerations • Repeatable & reliable • Should be able to run the same build process locally • Break up large testing suites • Remember, “Fail Fast”
  • 69. If it’s difficult or painful, do it more often.
  • 71. Continuous Delivery is developing in such a way that software is always ready for release.
  • 72. More on Being Agile
  • 73. More on Being Agile
  • 74. More on Being Agile “Our highest priority is to satisfy the customer through early and continuous delivery of valuable software.”
  • 75. More on Being Agile “Our highest priority is to satisfy the customer through early and continuous delivery of valuable software.”
  • 76. Users Drive Your Value Much like beauty, value is in the eyes of the beholder.
  • 77. Get In Front of Users Sooner
  • 78. The “Last Mile” Problem “The further apart your releases are, the more risk you introduce that the changes are wrong.” - Jez Humble
  • 80.
  • 81.
  • 83. Do the minimum amount of work necessary
  • 84.
  • 85. Get in front of users immediately
  • 86.
  • 89.
  • 90.
  • 91.
  • 92. Why? • We want constant feedback • How else do we know what we’re doing is valuable? • Constant testing and improving our delivery process
  • 93. What about Large Features?
  • 95. Incomplete Features • Sometimes a feature is just too big
  • 96. Incomplete Features • Sometimes a feature is just too big • Incomplete features across releases
  • 97. Incomplete Features • Sometimes a feature is just too big • Incomplete features across releases • Ship it anyways!
  • 98. Incomplete Features • Sometimes a feature is just too big • Incomplete features across releases • Ship it anyways! • Beware the Beta
  • 99. Incomplete Features • Sometimes a feature is just too big • Incomplete features across releases • Ship it anyways! • Beware the Beta • Solution: Feature Toggles
  • 105. Clear the Delivery Path • MVP helps to make the team think about going to production as soon as possible • Deal with Production Gates • Work to cut, simplify, or work around organizational red tape • Find “creative solutions” that satisfy everyone while emphasizing the business goals
  • 106. Everybody has responsibility for the release process
  • 107. DBAs UX QA Everybody has responsibility for the release process Operations Developers Managers
  • 108. Everyone’s Responsibilities • How do I automate the testing and validation after deploying? • How do I make it easier for the team to release?
  • 109. Developer Responsibilities • How do I keep my software releasable? • What does it take to deploy my software?
  • 110. DBA Responsibilities • How do I automate schema deployments? • How do I give the build server autonomy to deploy?
  • 111. Ops Responsibilities • How do I want the software to be deployed? • How do I give the build server autonomy to deploy?
  • 112. Tester Responsibilities • Did the automated deployment succeed? • This is not the same as testing software.
  • 113. Deploy
  • 114. Deploy • Use the same mechanism for every environment • Should be simple • For products, use the same mechanisms as your customers
  • 115. Deployment for SaaS • FTP/SCP • PowerShell • Shell Scripting • MSBuild • MSI/Installer Packages
  • 116. Deployment for Products • Windows Installers • Built-in, InstallShield, Wise,VISE, etc. • Installer (Mac OS)
  • 117. Deployment Quality • Important to establish trust • End-to-end functional tests become more valuable • Behavior-Driven Development helps to realize this • Other quality metrics become just as useful • Performance, compatibility, security
  • 118. Deploy • When you’ve deployed, have automated smoke tests validate a successful deployment • If something’s wrong: • Turn off the feature or rollback • Don’t “hack” a fix
  • 119. If it’s difficult or painful, do it more often.
  • 120. Is it worth it? • By removing barriers, rehearsing, and continuously improving the release process, the risk of a release is reduced • Becomes a regular occurrence rather than a traumatic procedure • Everyone is involved in making the release process more automated & efficient
  • 121. Is it worth it? • Feedback determines the viability of your feature • Increases confidence when it’s right • Decreases cost when it’s wrong
  • 122. Moving Forward • Identify a single task • Something that is particularly time consuming and/or painful • Automate the task • Start collecting metrics • Build team confidence
  • 123. Moving Forward • You need to talk to the business • Ask these questions: • Would you like to set the release schedule? • Would you like to minimize risk during deployments? • Would you like to maximize investment on features our customers really want? • Be sure to alert them of the up-front investment required!
  • 124. Moving Forward • Need help? • After the talk, or after hours party • askanagilist@improvingenterprises.com
  • 127. References • http://www.informit.com/articles/article.aspx?p=1829417 • http://www.informit.com/articles/article.aspx?p=1750200 • http://kief.com/the-conflict-between-continuous-delivery-and-traditional-agile.html • http://techcrunch.com/2011/10/19/dropbox-minimal-viable-product/

Notes de l'éditeur

  1. \n
  2. \n
  3. \n
  4. \n
  5. \n
  6. \n
  7. \n
  8. \n
  9. \n
  10. \n
  11. Finish at 90 seconds\n
  12. \n
  13. \n
  14. \n
  15. \n
  16. \n
  17. \n
  18. \n
  19. \n
  20. Finish at 4:00\n
  21. Finish at 4:00\n
  22. Finish at 4:00\n
  23. Finish at 4:00\n
  24. \n
  25. \n
  26. Finish at 5:30\n
  27. \n
  28. \n
  29. \n
  30. \n
  31. \n
  32. \n
  33. \n
  34. \n
  35. \n
  36. \n
  37. Finish no later than 10:00\n
  38. \n
  39. NO LATER THAN 12:00\n
  40. \n
  41. \n
  42. Finish at 21:00\n
  43. \n
  44. \n
  45. \n
  46. \n
  47. \n
  48. \n
  49. \n
  50. Finish at 15:30\n
  51. Finish at 15:30\n
  52. Finish at 15:30\n
  53. Finish at 15:30\n
  54. \n
  55. \n
  56. Finish at 19:00\n
  57. \n
  58. \n
  59. Finish at 23:00\n
  60. Ask audience what Continuous Delivery is. 3 responses max. \nStop at 24:00. DO NOT ASK FOR AUDIENCE PARTICIPATION IF PAST 24:00.\n
  61. Finish at 24:30\n
  62. \n
  63. \n
  64. \n
  65. \n
  66. Finish at 26:30\nTalk about needing to understand value.\n
  67. \n
  68. Finish at 27:30\n
  69. \n
  70. \n
  71. \n
  72. \n
  73. \n
  74. \n
  75. \n
  76. \n
  77. \n
  78. \n
  79. \n
  80. Finish at 32:00\n
  81. \n
  82. \n
  83. \n
  84. \n
  85. \n
  86. \n
  87. Finish at 35:00\n
  88. Finish at 35:00\n
  89. Finish at 35:00\n
  90. Finish at 35:00\n
  91. IF STARTING AFTER 35:00, MOVE QUICK\n
  92. \n
  93. \n
  94. \n
  95. \n
  96. \n
  97. \n
  98. \n
  99. \n
  100. \n
  101. \n
  102. Finish at 36:00\n
  103. \n
  104. \n
  105. SKIP IF AFTER 37:30\n
  106. SKIP IF AFTER 38:00\n
  107. Finish at 39:00\n
  108. \n
  109. Finish at 40:00\n
  110. \n
  111. Finish at 42:00\n
  112. \n
  113. \n
  114. Finish at 45:00\n
  115. \n
  116. \n
  117. \n