SlideShare a Scribd company logo
1 of 43
Cork Software Crafters
Follow us on
Twitter: @CorkSwCraft
Meetup: www.meetup.com/Cork-Software-Craftsmanship-Meetup
Slack: softwarecrafters.slack.com/messages/cork
Continuous Delivery non-breaking changes exercise
25th February 2020
facilitated by Paulo Clavijo Esteban
Thanks
Software Crafters Communities Worldwide
softwarecrafters.org
follow Cork Software Crafters
@CorkSwCraft
We are always looking for new ideas, new talks and
mostly new hands-on sessions for our meetups.
Contact us if you want to collaborate!
6:15pm - Welcome.
6:30pm - Introduction.
6:40pm - Hands-on time. We will work in groups on the exercise.
7:50pm - Retrospective.
Paulo Clavijo (@pclavijo)
Agenda
Cork Software Crafters
Non-breaking changes exercise
We favour a Continuous Integration/Continuous Delivery approach, integrating changes with the
trunk branch and deploying all the way to production multiple times per day. Our pull requests should
always take in consideration a blue/green deployment. But there is a multitude of "breaking changes"
that can make our life complicated :-(.
In this group exercise, we will go through different scenarios for breaking code changes (UI changes,
API changes, Database changes, Message Queue changes, Performance improvements ...) and discuss
together what could be the right steps to integrate changes in a non-breaking way.
Paulo Clavijo @pclavijo
Cork Software Crafters
Continous Delivery
“Continuous Delivery is a software development discipline where you build software in
such a way that the software can be released to production at any time… You achieve
continuous delivery by continuously integrating the software done by the development
team, building executables, and running automated tests on those executables to detect
problems… You push those executables into increasingly production-like environments
to ensure that the software will work in production.” - Martin Fowler
Paulo Clavijo @pclavijo
Cork Software Crafters
Trunk-Based Development
Paulo Clavijo @pclavijo
Cork Software Crafters
http://trunkbaseddevelopment.com
Blue-green deployment
Paulo Clavijo @pclavijo
Users Router
Green
environment
Blue
environment
create a new green environment and switch from Blue (old) to Green (new)
example.com
new-example.com
code v1.0
code v1.1
Cork Software Crafters
Practice Time
We are here to learn .
Cork Software Crafters Paulo Clavijo (@pclavijo)
Focus on doing it right .
We need to slow down .
Collaboration .
Coding Dojo Mindset
Collaboration
● We will work in groups of 4 to 5 people
● 5 min for scenario
● 3 min to share ideas and solutions
● Swap groups
Paulo Clavijo @pclavijo
Keep in mind
● Service is available continuously
● Deployment requires parallel versions (blue/green)
● Deploy the smallest changes you can
● We do not deploy multiple services at once (avoid coupled
changes)
Paulo Clavijo @pclavijo
Cork Software Crafters
UI changes
Scenario UI-1
Replacing and old home page by a new and redesigned one on a
SPA UI.
- The current home page view has /my-dashboard as route. This route is also the
default route in the app, users are redirected to it when they just use the base url
www.app.com.
- The new page will have multiple components and actions, it will take around 2 week
to develop.
- Users can not see the new page until it is completely finished.
Paulo Clavijo @pclavijo
Cork Software Crafters
Scenario UI-2
New feature to allow product reviews.
- Customers should be able to see reviews for a product on the produt detail
view.
- Logged-in customers can add their own review for a product.
- This new feature will take 1 week to develop.
- Users can not see the new feature until it is completely finished.
Paulo Clavijo @pclavijo
Cork Software Crafters
Feature Toggles
“A feature toggle is a technique in software development that
attempts to provide an alternative to maintaining multiple
source-code branches (known as feature branches), such that a
feature can be tested even before it is completed and ready for
release. Feature toggle is used to hide, enable or disable the
feature during run time. For example, during the development
process, a developer can enable the feature for testing and disable
it for other users.” - Wikipedia
Paulo Clavijo @pclavijo
API changes
Scenario API-1
Make the paramater category required in an existing /products
endpoint.
- The parameter allows filtering products GET /products?category=home
Paulo Clavijo @pclavijo
Cork Software Crafters
Scenario API-2
Rename the request query parameter pcod to productId in a
existing /products endpoint.
- The parameter is used for retrieving a single product GET /products?pcod=12345
fun getProduct(@RequestParam pcod: String): Product {
return productsService.getProduct(pcod)
}
Paulo Clavijo @pclavijo
Cork Software Crafters
Advice and considerations
API breaking changes:
● adding a new or modifying an existing validation to an existing resource
● requiring a parameter that wasn’t required before
● changing existing error response codes/messages
● modifying the expected payload
● changing the data type of an existing field
● changing supported filtering on existing endpoints
● renaming a field or endpoint
● changing the URL structure of an existing endpoint
…
Consider API versioning, Consumer-Driven Contracts
Paulo Clavijo @pclavijo
Cork Software Crafters
Parallel Change
“Parallel change, also known as expand and contract, is a pattern
to implement backward-incompatible changes to an interface in a
safe manner, by breaking the change into three distinct phases:
expand, migrate, and contract.” - Martin Fowler
Paulo Clavijo @pclavijo
Cork Software Crafters
Parallel Change
Paulo Clavijo @pclavijo
Cork Software Crafters
Parallel Change
Paulo Clavijo @pclavijo
Cork Software Crafters
Parallel Change
Paulo Clavijo @pclavijo
Cork Software Crafters
DB changes
Scenario DB-1
Rename the attribute information_compliance to
regulatory_requirements in the Application entity.
- We are using a table on a relational database.
- Attribute not related to other tables.
- Change in code and table column.
Paulo Clavijo @pclavijo
Cork Software Crafters
Scenario DB-2
Transform the attribute name to firstname and lastname in the
Customer entity.
- We are using a table on a relational database.
- Attribute not related to other tables.
- Change in code and table column.
- Data already exist in the table.
- No other service connects to this database.
Paulo Clavijo @pclavijo
Cork Software Crafters
Advice and considerations
Database changes that can cause downtime or errors:
● removing a column
● adding a column with a default value
● renaming a column
● changing the type of a column
● setting NOT NULL on an existing column
● renaming a table
● adding a foreign key
● backfilling data
● adding an index non-concurrently
...
Paulo Clavijo @pclavijo
Cork Software Crafters
Advice and considerations
● Read chapter 5 (Evolutionary Data) from Building Evolutionary Architectures book.
● Take a look at github.com/ankane/strong_migrations#dangerous-operations
Paulo Clavijo @pclavijo
Cork Software Crafters
Large Scale changes
Scenario LS-1
Change the persistence technology from Relational Database to a
NoSql store.
We will start with the Customer entity.
- Other entities only refer to Customer using its ID.
- Customer is not used in joins.
Paulo Clavijo @pclavijo
Cork Software Crafters
Branch by Abstraction
“Branch by Abstraction is a technique for making a large-scale
change to a software system in gradual way that allows you to
release the system regularly while the change is still in-progress.” -
Martin Fowler
Paulo Clavijo @pclavijo
Branch by Abstraction
“Branch by Abstraction is a technique for making a large-scale
change to a software system in gradual way that allows you to
release the system regularly while the change is still in-progress.” -
Martin Fowler
Paulo Clavijo @pclavijo
Message queue changes
Scenario Q-1
- Server A sends a message OrderPlaced with a field old_field
using a queue to Server B and Server C.
- We need to change old_field to new_field.
Server A
queue
Message
Server B
Server C
Paulo Clavijo @pclavijo
Cork Software Crafters
Postel’s Law and the Tolerant Reader pattern
“When communicating between systems, Postel’s Law and the
Tolerant Reader pattern state that an implementation should be
liberal when receiving data and conservative when sending data.
This makes system integration less painful because changes to data
fields ignored by the receiving system becomes seamless to the
overall integration.” - Secure By Design
Paulo Clavijo @pclavijo
Cork Software Crafters
Performance changes
Scenario P-1
We have a service that calculates daily delivery routes for
postmen. It uses a cpu and memory inefficient route calculation
logic, we want to reimplement the calculation with a new
algorithm that improves performance.
- Calculation is complex with lots of corner cases.
- We expect the same outcome from old and new logic.
- It will take around 2 week to develop.
- This service is highly important for the business.
- Paulo Clavijo @pclavijo
Cork Software Crafters
Advice and considerations
● Consider Canary Release
● Consider Branch Branch By Abstraction with verification (involves verifying that the
two implementations return the same results to requests)
● Take a look at Scienties github.com/github/scientist (a library for carefully
refactoring critical paths)
Paulo Clavijo @pclavijo
Cork Software Crafters
Verify Branch By Abstraction
“... a run-time configuration toggle delegates to a verifying
implementation that calls both components with the same inputs and fails
fast if they do not produce the same output. This reduces the feedback
loop for old and new component incompatibilities, and increases
confidence in our evolving architecture.” - Steve Smith
Paulo Clavijo @pclavijo
References
- Taller Parallel Changes, Eduardo Ferro. Software Crafters Barcelona 2018.
- BlueGreenDeployment, Martin Fowler
- BranchByAbstraction, Martin Fowler
- Parallel Change, Danilo Sato
- Parallel Change Refactoring, Oleksii Fedorov
- Parallel Change (Parallel Design), Jakub Holy
- Effective Design (slides 8 and 9), Kent Beck
- The Limited Red Society, Joshua Kerievsky
- StranglerFigApplication, Martin Fowler
- CanaryRelease, Danilo Sato
Paulo Clavijo (@pclavijo)Cork Software Crafters
Recommended Books
- Building Evolutionary Architectures: Support Constant Change by Neal Ford, Rebecca Parsons
and Patrick Kua.
- The DevOps Handbook by Gene Kim, Jez Humble, Patrick Debois, John Willis (chapter 12).
- The Mikado Method by Ola Ellnestam.
- Working Effectively with Legacy Code by Michael Feathers.
- Refactoring by Martin Fowler.
Paulo Clavijo (@pclavijo)Cork Software Crafters

More Related Content

What's hot

Contract testing. Isolated testing of microservices with pact.io - Evgeniy Ku...
Contract testing. Isolated testing of microservices with pact.io - Evgeniy Ku...Contract testing. Isolated testing of microservices with pact.io - Evgeniy Ku...
Contract testing. Isolated testing of microservices with pact.io - Evgeniy Ku...Evgeniy Kuzmin
 
Consumer-Driven Contract Testing - Workshop - January 2021
Consumer-Driven Contract Testing - Workshop - January 2021Consumer-Driven Contract Testing - Workshop - January 2021
Consumer-Driven Contract Testing - Workshop - January 2021Paulo Clavijo
 
Consumer Driven Contracts and Your Microservice Architecture
Consumer Driven Contracts and Your Microservice ArchitectureConsumer Driven Contracts and Your Microservice Architecture
Consumer Driven Contracts and Your Microservice ArchitectureMarcin Grzejszczak
 
Consumer-Driven Contract Testing PACT
Consumer-Driven Contract Testing PACTConsumer-Driven Contract Testing PACT
Consumer-Driven Contract Testing PACTVodqaBLR
 
Amsterdam JUG - Continuous performance
Amsterdam JUG - Continuous performanceAmsterdam JUG - Continuous performance
Amsterdam JUG - Continuous performanceBert Jan Schrijver
 
Microservices. Test smarter, not harder. Voxxed Days 2019
Microservices. Test smarter, not harder. Voxxed Days 2019Microservices. Test smarter, not harder. Voxxed Days 2019
Microservices. Test smarter, not harder. Voxxed Days 2019Beth Skurrie
 
DeTesters meetup november 2018 - Continuous performance: load testing with G...
DeTesters meetup november 2018  - Continuous performance: load testing with G...DeTesters meetup november 2018  - Continuous performance: load testing with G...
DeTesters meetup november 2018 - Continuous performance: load testing with G...Bert Jan Schrijver
 
Codemotion tech pills - Continuous performance
Codemotion tech pills  - Continuous performanceCodemotion tech pills  - Continuous performance
Codemotion tech pills - Continuous performanceBert Jan Schrijver
 
Spring Cloud Contract And Your Microservice Architecture
Spring Cloud Contract And Your Microservice ArchitectureSpring Cloud Contract And Your Microservice Architecture
Spring Cloud Contract And Your Microservice ArchitectureMarcin Grzejszczak
 
Tdd vs bdd vs atdd — developers’ methodologies to navigate complex developmen...
Tdd vs bdd vs atdd — developers’ methodologies to navigate complex developmen...Tdd vs bdd vs atdd — developers’ methodologies to navigate complex developmen...
Tdd vs bdd vs atdd — developers’ methodologies to navigate complex developmen...Katy Slemon
 
Interview with Issam Lahlali, one of the CppDepend tool creators
Interview with Issam Lahlali, one of the CppDepend tool creatorsInterview with Issam Lahlali, one of the CppDepend tool creators
Interview with Issam Lahlali, one of the CppDepend tool creatorsPVS-Studio
 
Microservices: Consumer Driven Contracts in Practice
Microservices: Consumer Driven Contracts in PracticeMicroservices: Consumer Driven Contracts in Practice
Microservices: Consumer Driven Contracts in PracticeQaiser Mazhar
 
So What Do Cucumbers Have To Do With Testing
So What Do Cucumbers Have To Do With TestingSo What Do Cucumbers Have To Do With Testing
So What Do Cucumbers Have To Do With Testingsjmarsh
 
Consumer Driven Contracts and Your Microservice Architecture @ Warsaw JUG
Consumer Driven Contracts and Your Microservice Architecture @ Warsaw JUGConsumer Driven Contracts and Your Microservice Architecture @ Warsaw JUG
Consumer Driven Contracts and Your Microservice Architecture @ Warsaw JUGMarcin Grzejszczak
 
Consumer-driven contracts with Pact and PHP
Consumer-driven contracts with Pact and PHPConsumer-driven contracts with Pact and PHP
Consumer-driven contracts with Pact and PHPAndy Kelk
 
Implementing BDD at scale for agile and DevOps teams
Implementing BDD at scale for agile and DevOps teamsImplementing BDD at scale for agile and DevOps teams
Implementing BDD at scale for agile and DevOps teamsLaurent PY
 
Behavior-Driven Development (BDD) in context
Behavior-Driven Development (BDD) in contextBehavior-Driven Development (BDD) in context
Behavior-Driven Development (BDD) in contextAlexander Kress
 
Consumer Driven Contracts (DDD Perth 2016)
Consumer Driven Contracts (DDD Perth 2016)Consumer Driven Contracts (DDD Perth 2016)
Consumer Driven Contracts (DDD Perth 2016)Rob Crowley
 

What's hot (20)

Contract testing. Isolated testing of microservices with pact.io - Evgeniy Ku...
Contract testing. Isolated testing of microservices with pact.io - Evgeniy Ku...Contract testing. Isolated testing of microservices with pact.io - Evgeniy Ku...
Contract testing. Isolated testing of microservices with pact.io - Evgeniy Ku...
 
Code Contracts
Code ContractsCode Contracts
Code Contracts
 
Consumer-Driven Contract Testing - Workshop - January 2021
Consumer-Driven Contract Testing - Workshop - January 2021Consumer-Driven Contract Testing - Workshop - January 2021
Consumer-Driven Contract Testing - Workshop - January 2021
 
Consumer Driven Contracts and Your Microservice Architecture
Consumer Driven Contracts and Your Microservice ArchitectureConsumer Driven Contracts and Your Microservice Architecture
Consumer Driven Contracts and Your Microservice Architecture
 
Consumer-Driven Contract Testing PACT
Consumer-Driven Contract Testing PACTConsumer-Driven Contract Testing PACT
Consumer-Driven Contract Testing PACT
 
Amsterdam JUG - Continuous performance
Amsterdam JUG - Continuous performanceAmsterdam JUG - Continuous performance
Amsterdam JUG - Continuous performance
 
Microservices. Test smarter, not harder. Voxxed Days 2019
Microservices. Test smarter, not harder. Voxxed Days 2019Microservices. Test smarter, not harder. Voxxed Days 2019
Microservices. Test smarter, not harder. Voxxed Days 2019
 
DeTesters meetup november 2018 - Continuous performance: load testing with G...
DeTesters meetup november 2018  - Continuous performance: load testing with G...DeTesters meetup november 2018  - Continuous performance: load testing with G...
DeTesters meetup november 2018 - Continuous performance: load testing with G...
 
Codemotion tech pills - Continuous performance
Codemotion tech pills  - Continuous performanceCodemotion tech pills  - Continuous performance
Codemotion tech pills - Continuous performance
 
Spring Cloud Contract And Your Microservice Architecture
Spring Cloud Contract And Your Microservice ArchitectureSpring Cloud Contract And Your Microservice Architecture
Spring Cloud Contract And Your Microservice Architecture
 
Tdd vs bdd vs atdd — developers’ methodologies to navigate complex developmen...
Tdd vs bdd vs atdd — developers’ methodologies to navigate complex developmen...Tdd vs bdd vs atdd — developers’ methodologies to navigate complex developmen...
Tdd vs bdd vs atdd — developers’ methodologies to navigate complex developmen...
 
Interview with Issam Lahlali, one of the CppDepend tool creators
Interview with Issam Lahlali, one of the CppDepend tool creatorsInterview with Issam Lahlali, one of the CppDepend tool creators
Interview with Issam Lahlali, one of the CppDepend tool creators
 
Microservices: Consumer Driven Contracts in Practice
Microservices: Consumer Driven Contracts in PracticeMicroservices: Consumer Driven Contracts in Practice
Microservices: Consumer Driven Contracts in Practice
 
So What Do Cucumbers Have To Do With Testing
So What Do Cucumbers Have To Do With TestingSo What Do Cucumbers Have To Do With Testing
So What Do Cucumbers Have To Do With Testing
 
Consumer Driven Contracts and Your Microservice Architecture @ Warsaw JUG
Consumer Driven Contracts and Your Microservice Architecture @ Warsaw JUGConsumer Driven Contracts and Your Microservice Architecture @ Warsaw JUG
Consumer Driven Contracts and Your Microservice Architecture @ Warsaw JUG
 
Consumer-driven contracts with Pact and PHP
Consumer-driven contracts with Pact and PHPConsumer-driven contracts with Pact and PHP
Consumer-driven contracts with Pact and PHP
 
Implementing BDD at scale for agile and DevOps teams
Implementing BDD at scale for agile and DevOps teamsImplementing BDD at scale for agile and DevOps teams
Implementing BDD at scale for agile and DevOps teams
 
Behavior-Driven Development (BDD) in context
Behavior-Driven Development (BDD) in contextBehavior-Driven Development (BDD) in context
Behavior-Driven Development (BDD) in context
 
Consumer Driven Contracts (DDD Perth 2016)
Consumer Driven Contracts (DDD Perth 2016)Consumer Driven Contracts (DDD Perth 2016)
Consumer Driven Contracts (DDD Perth 2016)
 
BDD and Behave
BDD and BehaveBDD and Behave
BDD and Behave
 

Similar to CI/CD non-breaking changes exercise - Cork Software Crafters - February 2020

Angular 2 overview in 60 minutes
Angular 2 overview in 60 minutesAngular 2 overview in 60 minutes
Angular 2 overview in 60 minutesLoiane Groner
 
Continuous Deployment of your Application @SpringOne
Continuous Deployment of your Application @SpringOneContinuous Deployment of your Application @SpringOne
Continuous Deployment of your Application @SpringOneciberkleid
 
[DPE Summit] How Improving the Testing Experience Goes Beyond Quality: A Deve...
[DPE Summit] How Improving the Testing Experience Goes Beyond Quality: A Deve...[DPE Summit] How Improving the Testing Experience Goes Beyond Quality: A Deve...
[DPE Summit] How Improving the Testing Experience Goes Beyond Quality: A Deve...Roberto Pérez Alcolea
 
Keeping your build tool updated in a multi repository world
Keeping your build tool updated in a multi repository worldKeeping your build tool updated in a multi repository world
Keeping your build tool updated in a multi repository worldRoberto Pérez Alcolea
 
SDLC and Software Process Models
SDLC and Software Process ModelsSDLC and Software Process Models
SDLC and Software Process ModelsNana Sarpong
 
Workshop: Delivering chnages for applications and databases
Workshop: Delivering chnages for applications and databasesWorkshop: Delivering chnages for applications and databases
Workshop: Delivering chnages for applications and databasesEduardo Piairo
 
DesignState Intralink to AgilePLM
DesignState Intralink to AgilePLMDesignState Intralink to AgilePLM
DesignState Intralink to AgilePLMZero Wait-State
 
Continuous Deployment to the cloud
Continuous Deployment to the cloudContinuous Deployment to the cloud
Continuous Deployment to the cloudVMware Tanzu
 
Trunk based development
Trunk based developmentTrunk based development
Trunk based developmentgo_oh
 
Continuous Deployment of your Application @jSession#5
Continuous Deployment of your Application @jSession#5Continuous Deployment of your Application @jSession#5
Continuous Deployment of your Application @jSession#5Marcin Grzejszczak
 
DevOps/Flow workshop for agile india 2015
DevOps/Flow workshop for agile india 2015DevOps/Flow workshop for agile india 2015
DevOps/Flow workshop for agile india 2015Yuval Yeret
 
Odoo Migration Services from Pragmatic: Helps your Business become more Effic...
Odoo Migration Services from Pragmatic: Helps your Business become more Effic...Odoo Migration Services from Pragmatic: Helps your Business become more Effic...
Odoo Migration Services from Pragmatic: Helps your Business become more Effic...NajmuddinMerchant
 
Wix Dev-Centric Culture And Continuous Delivery
Wix Dev-Centric Culture And Continuous DeliveryWix Dev-Centric Culture And Continuous Delivery
Wix Dev-Centric Culture And Continuous DeliveryAviran Mordo
 
Constantly Contributing Pretty Patches FLCD
Constantly Contributing Pretty Patches FLCDConstantly Contributing Pretty Patches FLCD
Constantly Contributing Pretty Patches FLCDMark Casias
 
Continuous Delivery: The Dirty Details
Continuous Delivery: The Dirty DetailsContinuous Delivery: The Dirty Details
Continuous Delivery: The Dirty DetailsMike Brittain
 
Software Development : Jeremy Gleason Iscope Digital
Software Development : Jeremy Gleason Iscope DigitalSoftware Development : Jeremy Gleason Iscope Digital
Software Development : Jeremy Gleason Iscope DigitalIscope Digital
 
agile with scrum methodology
agile with scrum methodology agile with scrum methodology
agile with scrum methodology rahul reddy
 

Similar to CI/CD non-breaking changes exercise - Cork Software Crafters - February 2020 (20)

Angular 2 overview in 60 minutes
Angular 2 overview in 60 minutesAngular 2 overview in 60 minutes
Angular 2 overview in 60 minutes
 
Continuous Deployment of your Application @SpringOne
Continuous Deployment of your Application @SpringOneContinuous Deployment of your Application @SpringOne
Continuous Deployment of your Application @SpringOne
 
[DPE Summit] How Improving the Testing Experience Goes Beyond Quality: A Deve...
[DPE Summit] How Improving the Testing Experience Goes Beyond Quality: A Deve...[DPE Summit] How Improving the Testing Experience Goes Beyond Quality: A Deve...
[DPE Summit] How Improving the Testing Experience Goes Beyond Quality: A Deve...
 
Keeping your build tool updated in a multi repository world
Keeping your build tool updated in a multi repository worldKeeping your build tool updated in a multi repository world
Keeping your build tool updated in a multi repository world
 
SDLC and Software Process Models
SDLC and Software Process ModelsSDLC and Software Process Models
SDLC and Software Process Models
 
Workshop: Delivering chnages for applications and databases
Workshop: Delivering chnages for applications and databasesWorkshop: Delivering chnages for applications and databases
Workshop: Delivering chnages for applications and databases
 
DesignState Intralink to AgilePLM
DesignState Intralink to AgilePLMDesignState Intralink to AgilePLM
DesignState Intralink to AgilePLM
 
Continuous Deployment to the cloud
Continuous Deployment to the cloudContinuous Deployment to the cloud
Continuous Deployment to the cloud
 
Trunk based development
Trunk based developmentTrunk based development
Trunk based development
 
Continuous Deployment of your Application @jSession#5
Continuous Deployment of your Application @jSession#5Continuous Deployment of your Application @jSession#5
Continuous Deployment of your Application @jSession#5
 
Agile.docx
Agile.docxAgile.docx
Agile.docx
 
DevOps/Flow workshop for agile india 2015
DevOps/Flow workshop for agile india 2015DevOps/Flow workshop for agile india 2015
DevOps/Flow workshop for agile india 2015
 
Odoo Migration Services from Pragmatic: Helps your Business become more Effic...
Odoo Migration Services from Pragmatic: Helps your Business become more Effic...Odoo Migration Services from Pragmatic: Helps your Business become more Effic...
Odoo Migration Services from Pragmatic: Helps your Business become more Effic...
 
Wix Dev-Centric Culture And Continuous Delivery
Wix Dev-Centric Culture And Continuous DeliveryWix Dev-Centric Culture And Continuous Delivery
Wix Dev-Centric Culture And Continuous Delivery
 
CV_DebarpanMukherjee
CV_DebarpanMukherjeeCV_DebarpanMukherjee
CV_DebarpanMukherjee
 
Constantly Contributing Pretty Patches FLCD
Constantly Contributing Pretty Patches FLCDConstantly Contributing Pretty Patches FLCD
Constantly Contributing Pretty Patches FLCD
 
Introduction to git & github
Introduction to git & githubIntroduction to git & github
Introduction to git & github
 
Continuous Delivery: The Dirty Details
Continuous Delivery: The Dirty DetailsContinuous Delivery: The Dirty Details
Continuous Delivery: The Dirty Details
 
Software Development : Jeremy Gleason Iscope Digital
Software Development : Jeremy Gleason Iscope DigitalSoftware Development : Jeremy Gleason Iscope Digital
Software Development : Jeremy Gleason Iscope Digital
 
agile with scrum methodology
agile with scrum methodology agile with scrum methodology
agile with scrum methodology
 

More from Paulo Clavijo

Legacy Code and Refactoring Workshop - Session 1 - October 2019
Legacy Code and Refactoring Workshop - Session 1 - October 2019Legacy Code and Refactoring Workshop - Session 1 - October 2019
Legacy Code and Refactoring Workshop - Session 1 - October 2019Paulo Clavijo
 
TDD and Simple Design Workshop - Session 1 - March 2019
TDD and Simple Design Workshop - Session 1 - March 2019TDD and Simple Design Workshop - Session 1 - March 2019
TDD and Simple Design Workshop - Session 1 - March 2019Paulo Clavijo
 
TDD and Simple Design Workshop - Session 1 - November 2018
TDD and Simple Design Workshop - Session 1 - November 2018TDD and Simple Design Workshop - Session 1 - November 2018
TDD and Simple Design Workshop - Session 1 - November 2018Paulo Clavijo
 
Outside-in TDD with Test Doubles
Outside-in TDD with Test DoublesOutside-in TDD with Test Doubles
Outside-in TDD with Test DoublesPaulo Clavijo
 
DDD Strategic Design - Context Maps - Paulo Clavijo - April 2018
DDD Strategic Design - Context Maps - Paulo Clavijo - April 2018DDD Strategic Design - Context Maps - Paulo Clavijo - April 2018
DDD Strategic Design - Context Maps - Paulo Clavijo - April 2018Paulo Clavijo
 
ATDD - Desarrollo Dirigido por Test de Aceptación
ATDD - Desarrollo Dirigido por Test de AceptaciónATDD - Desarrollo Dirigido por Test de Aceptación
ATDD - Desarrollo Dirigido por Test de AceptaciónPaulo Clavijo
 
Tests Unitarios con JUnit 4
Tests Unitarios con JUnit 4Tests Unitarios con JUnit 4
Tests Unitarios con JUnit 4Paulo Clavijo
 
Gestión de Cambios de BBDD con LiquiBase
Gestión de Cambios de BBDD con LiquiBaseGestión de Cambios de BBDD con LiquiBase
Gestión de Cambios de BBDD con LiquiBasePaulo Clavijo
 
Introducción a Spring Roo
Introducción a Spring RooIntroducción a Spring Roo
Introducción a Spring RooPaulo Clavijo
 

More from Paulo Clavijo (9)

Legacy Code and Refactoring Workshop - Session 1 - October 2019
Legacy Code and Refactoring Workshop - Session 1 - October 2019Legacy Code and Refactoring Workshop - Session 1 - October 2019
Legacy Code and Refactoring Workshop - Session 1 - October 2019
 
TDD and Simple Design Workshop - Session 1 - March 2019
TDD and Simple Design Workshop - Session 1 - March 2019TDD and Simple Design Workshop - Session 1 - March 2019
TDD and Simple Design Workshop - Session 1 - March 2019
 
TDD and Simple Design Workshop - Session 1 - November 2018
TDD and Simple Design Workshop - Session 1 - November 2018TDD and Simple Design Workshop - Session 1 - November 2018
TDD and Simple Design Workshop - Session 1 - November 2018
 
Outside-in TDD with Test Doubles
Outside-in TDD with Test DoublesOutside-in TDD with Test Doubles
Outside-in TDD with Test Doubles
 
DDD Strategic Design - Context Maps - Paulo Clavijo - April 2018
DDD Strategic Design - Context Maps - Paulo Clavijo - April 2018DDD Strategic Design - Context Maps - Paulo Clavijo - April 2018
DDD Strategic Design - Context Maps - Paulo Clavijo - April 2018
 
ATDD - Desarrollo Dirigido por Test de Aceptación
ATDD - Desarrollo Dirigido por Test de AceptaciónATDD - Desarrollo Dirigido por Test de Aceptación
ATDD - Desarrollo Dirigido por Test de Aceptación
 
Tests Unitarios con JUnit 4
Tests Unitarios con JUnit 4Tests Unitarios con JUnit 4
Tests Unitarios con JUnit 4
 
Gestión de Cambios de BBDD con LiquiBase
Gestión de Cambios de BBDD con LiquiBaseGestión de Cambios de BBDD con LiquiBase
Gestión de Cambios de BBDD con LiquiBase
 
Introducción a Spring Roo
Introducción a Spring RooIntroducción a Spring Roo
Introducción a Spring Roo
 

Recently uploaded

Alfresco TTL#157 - Troubleshooting Made Easy: Deciphering Alfresco mTLS Confi...
Alfresco TTL#157 - Troubleshooting Made Easy: Deciphering Alfresco mTLS Confi...Alfresco TTL#157 - Troubleshooting Made Easy: Deciphering Alfresco mTLS Confi...
Alfresco TTL#157 - Troubleshooting Made Easy: Deciphering Alfresco mTLS Confi...Angel Borroy López
 
CRM Contender Series: HubSpot vs. Salesforce
CRM Contender Series: HubSpot vs. SalesforceCRM Contender Series: HubSpot vs. Salesforce
CRM Contender Series: HubSpot vs. SalesforceBrainSell Technologies
 
Introduction Computer Science - Software Design.pdf
Introduction Computer Science - Software Design.pdfIntroduction Computer Science - Software Design.pdf
Introduction Computer Science - Software Design.pdfFerryKemperman
 
Automate your Kamailio Test Calls - Kamailio World 2024
Automate your Kamailio Test Calls - Kamailio World 2024Automate your Kamailio Test Calls - Kamailio World 2024
Automate your Kamailio Test Calls - Kamailio World 2024Andreas Granig
 
Comparing Linux OS Image Update Models - EOSS 2024.pdf
Comparing Linux OS Image Update Models - EOSS 2024.pdfComparing Linux OS Image Update Models - EOSS 2024.pdf
Comparing Linux OS Image Update Models - EOSS 2024.pdfDrew Moseley
 
Recruitment Management Software Benefits (Infographic)
Recruitment Management Software Benefits (Infographic)Recruitment Management Software Benefits (Infographic)
Recruitment Management Software Benefits (Infographic)Hr365.us smith
 
Maximizing Efficiency and Profitability with OnePlan’s Professional Service A...
Maximizing Efficiency and Profitability with OnePlan’s Professional Service A...Maximizing Efficiency and Profitability with OnePlan’s Professional Service A...
Maximizing Efficiency and Profitability with OnePlan’s Professional Service A...OnePlan Solutions
 
Taming Distributed Systems: Key Insights from Wix's Large-Scale Experience - ...
Taming Distributed Systems: Key Insights from Wix's Large-Scale Experience - ...Taming Distributed Systems: Key Insights from Wix's Large-Scale Experience - ...
Taming Distributed Systems: Key Insights from Wix's Large-Scale Experience - ...Natan Silnitsky
 
React Server Component in Next.js by Hanief Utama
React Server Component in Next.js by Hanief UtamaReact Server Component in Next.js by Hanief Utama
React Server Component in Next.js by Hanief UtamaHanief Utama
 
Tech Tuesday - Mastering Time Management Unlock the Power of OnePlan's Timesh...
Tech Tuesday - Mastering Time Management Unlock the Power of OnePlan's Timesh...Tech Tuesday - Mastering Time Management Unlock the Power of OnePlan's Timesh...
Tech Tuesday - Mastering Time Management Unlock the Power of OnePlan's Timesh...OnePlan Solutions
 
Unveiling Design Patterns: A Visual Guide with UML Diagrams
Unveiling Design Patterns: A Visual Guide with UML DiagramsUnveiling Design Patterns: A Visual Guide with UML Diagrams
Unveiling Design Patterns: A Visual Guide with UML DiagramsAhmed Mohamed
 
VK Business Profile - provides IT solutions and Web Development
VK Business Profile - provides IT solutions and Web DevelopmentVK Business Profile - provides IT solutions and Web Development
VK Business Profile - provides IT solutions and Web Developmentvyaparkranti
 
办理学位证(UQ文凭证书)昆士兰大学毕业证成绩单原版一模一样
办理学位证(UQ文凭证书)昆士兰大学毕业证成绩单原版一模一样办理学位证(UQ文凭证书)昆士兰大学毕业证成绩单原版一模一样
办理学位证(UQ文凭证书)昆士兰大学毕业证成绩单原版一模一样umasea
 
What is Fashion PLM and Why Do You Need It
What is Fashion PLM and Why Do You Need ItWhat is Fashion PLM and Why Do You Need It
What is Fashion PLM and Why Do You Need ItWave PLM
 
Global Identity Enrolment and Verification Pro Solution - Cizo Technology Ser...
Global Identity Enrolment and Verification Pro Solution - Cizo Technology Ser...Global Identity Enrolment and Verification Pro Solution - Cizo Technology Ser...
Global Identity Enrolment and Verification Pro Solution - Cizo Technology Ser...Cizo Technology Services
 
GOING AOT WITH GRAALVM – DEVOXX GREECE.pdf
GOING AOT WITH GRAALVM – DEVOXX GREECE.pdfGOING AOT WITH GRAALVM – DEVOXX GREECE.pdf
GOING AOT WITH GRAALVM – DEVOXX GREECE.pdfAlina Yurenko
 
KnowAPIs-UnknownPerf-jaxMainz-2024 (1).pptx
KnowAPIs-UnknownPerf-jaxMainz-2024 (1).pptxKnowAPIs-UnknownPerf-jaxMainz-2024 (1).pptx
KnowAPIs-UnknownPerf-jaxMainz-2024 (1).pptxTier1 app
 
Precise and Complete Requirements? An Elusive Goal
Precise and Complete Requirements? An Elusive GoalPrecise and Complete Requirements? An Elusive Goal
Precise and Complete Requirements? An Elusive GoalLionel Briand
 

Recently uploaded (20)

Alfresco TTL#157 - Troubleshooting Made Easy: Deciphering Alfresco mTLS Confi...
Alfresco TTL#157 - Troubleshooting Made Easy: Deciphering Alfresco mTLS Confi...Alfresco TTL#157 - Troubleshooting Made Easy: Deciphering Alfresco mTLS Confi...
Alfresco TTL#157 - Troubleshooting Made Easy: Deciphering Alfresco mTLS Confi...
 
CRM Contender Series: HubSpot vs. Salesforce
CRM Contender Series: HubSpot vs. SalesforceCRM Contender Series: HubSpot vs. Salesforce
CRM Contender Series: HubSpot vs. Salesforce
 
Introduction Computer Science - Software Design.pdf
Introduction Computer Science - Software Design.pdfIntroduction Computer Science - Software Design.pdf
Introduction Computer Science - Software Design.pdf
 
Automate your Kamailio Test Calls - Kamailio World 2024
Automate your Kamailio Test Calls - Kamailio World 2024Automate your Kamailio Test Calls - Kamailio World 2024
Automate your Kamailio Test Calls - Kamailio World 2024
 
Comparing Linux OS Image Update Models - EOSS 2024.pdf
Comparing Linux OS Image Update Models - EOSS 2024.pdfComparing Linux OS Image Update Models - EOSS 2024.pdf
Comparing Linux OS Image Update Models - EOSS 2024.pdf
 
Recruitment Management Software Benefits (Infographic)
Recruitment Management Software Benefits (Infographic)Recruitment Management Software Benefits (Infographic)
Recruitment Management Software Benefits (Infographic)
 
Maximizing Efficiency and Profitability with OnePlan’s Professional Service A...
Maximizing Efficiency and Profitability with OnePlan’s Professional Service A...Maximizing Efficiency and Profitability with OnePlan’s Professional Service A...
Maximizing Efficiency and Profitability with OnePlan’s Professional Service A...
 
Taming Distributed Systems: Key Insights from Wix's Large-Scale Experience - ...
Taming Distributed Systems: Key Insights from Wix's Large-Scale Experience - ...Taming Distributed Systems: Key Insights from Wix's Large-Scale Experience - ...
Taming Distributed Systems: Key Insights from Wix's Large-Scale Experience - ...
 
React Server Component in Next.js by Hanief Utama
React Server Component in Next.js by Hanief UtamaReact Server Component in Next.js by Hanief Utama
React Server Component in Next.js by Hanief Utama
 
Tech Tuesday - Mastering Time Management Unlock the Power of OnePlan's Timesh...
Tech Tuesday - Mastering Time Management Unlock the Power of OnePlan's Timesh...Tech Tuesday - Mastering Time Management Unlock the Power of OnePlan's Timesh...
Tech Tuesday - Mastering Time Management Unlock the Power of OnePlan's Timesh...
 
Unveiling Design Patterns: A Visual Guide with UML Diagrams
Unveiling Design Patterns: A Visual Guide with UML DiagramsUnveiling Design Patterns: A Visual Guide with UML Diagrams
Unveiling Design Patterns: A Visual Guide with UML Diagrams
 
VK Business Profile - provides IT solutions and Web Development
VK Business Profile - provides IT solutions and Web DevelopmentVK Business Profile - provides IT solutions and Web Development
VK Business Profile - provides IT solutions and Web Development
 
办理学位证(UQ文凭证书)昆士兰大学毕业证成绩单原版一模一样
办理学位证(UQ文凭证书)昆士兰大学毕业证成绩单原版一模一样办理学位证(UQ文凭证书)昆士兰大学毕业证成绩单原版一模一样
办理学位证(UQ文凭证书)昆士兰大学毕业证成绩单原版一模一样
 
2.pdf Ejercicios de programación competitiva
2.pdf Ejercicios de programación competitiva2.pdf Ejercicios de programación competitiva
2.pdf Ejercicios de programación competitiva
 
What is Fashion PLM and Why Do You Need It
What is Fashion PLM and Why Do You Need ItWhat is Fashion PLM and Why Do You Need It
What is Fashion PLM and Why Do You Need It
 
Global Identity Enrolment and Verification Pro Solution - Cizo Technology Ser...
Global Identity Enrolment and Verification Pro Solution - Cizo Technology Ser...Global Identity Enrolment and Verification Pro Solution - Cizo Technology Ser...
Global Identity Enrolment and Verification Pro Solution - Cizo Technology Ser...
 
GOING AOT WITH GRAALVM – DEVOXX GREECE.pdf
GOING AOT WITH GRAALVM – DEVOXX GREECE.pdfGOING AOT WITH GRAALVM – DEVOXX GREECE.pdf
GOING AOT WITH GRAALVM – DEVOXX GREECE.pdf
 
KnowAPIs-UnknownPerf-jaxMainz-2024 (1).pptx
KnowAPIs-UnknownPerf-jaxMainz-2024 (1).pptxKnowAPIs-UnknownPerf-jaxMainz-2024 (1).pptx
KnowAPIs-UnknownPerf-jaxMainz-2024 (1).pptx
 
Precise and Complete Requirements? An Elusive Goal
Precise and Complete Requirements? An Elusive GoalPrecise and Complete Requirements? An Elusive Goal
Precise and Complete Requirements? An Elusive Goal
 
Odoo Development Company in India | Devintelle Consulting Service
Odoo Development Company in India | Devintelle Consulting ServiceOdoo Development Company in India | Devintelle Consulting Service
Odoo Development Company in India | Devintelle Consulting Service
 

CI/CD non-breaking changes exercise - Cork Software Crafters - February 2020

  • 1. Cork Software Crafters Follow us on Twitter: @CorkSwCraft Meetup: www.meetup.com/Cork-Software-Craftsmanship-Meetup Slack: softwarecrafters.slack.com/messages/cork Continuous Delivery non-breaking changes exercise 25th February 2020 facilitated by Paulo Clavijo Esteban Thanks
  • 2. Software Crafters Communities Worldwide softwarecrafters.org
  • 3. follow Cork Software Crafters @CorkSwCraft
  • 4. We are always looking for new ideas, new talks and mostly new hands-on sessions for our meetups. Contact us if you want to collaborate!
  • 5. 6:15pm - Welcome. 6:30pm - Introduction. 6:40pm - Hands-on time. We will work in groups on the exercise. 7:50pm - Retrospective. Paulo Clavijo (@pclavijo) Agenda Cork Software Crafters
  • 6. Non-breaking changes exercise We favour a Continuous Integration/Continuous Delivery approach, integrating changes with the trunk branch and deploying all the way to production multiple times per day. Our pull requests should always take in consideration a blue/green deployment. But there is a multitude of "breaking changes" that can make our life complicated :-(. In this group exercise, we will go through different scenarios for breaking code changes (UI changes, API changes, Database changes, Message Queue changes, Performance improvements ...) and discuss together what could be the right steps to integrate changes in a non-breaking way. Paulo Clavijo @pclavijo Cork Software Crafters
  • 7. Continous Delivery “Continuous Delivery is a software development discipline where you build software in such a way that the software can be released to production at any time… You achieve continuous delivery by continuously integrating the software done by the development team, building executables, and running automated tests on those executables to detect problems… You push those executables into increasingly production-like environments to ensure that the software will work in production.” - Martin Fowler Paulo Clavijo @pclavijo Cork Software Crafters
  • 8. Trunk-Based Development Paulo Clavijo @pclavijo Cork Software Crafters http://trunkbaseddevelopment.com
  • 9. Blue-green deployment Paulo Clavijo @pclavijo Users Router Green environment Blue environment create a new green environment and switch from Blue (old) to Green (new) example.com new-example.com code v1.0 code v1.1 Cork Software Crafters
  • 11. We are here to learn . Cork Software Crafters Paulo Clavijo (@pclavijo) Focus on doing it right . We need to slow down . Collaboration . Coding Dojo Mindset
  • 12. Collaboration ● We will work in groups of 4 to 5 people ● 5 min for scenario ● 3 min to share ideas and solutions ● Swap groups Paulo Clavijo @pclavijo
  • 13. Keep in mind ● Service is available continuously ● Deployment requires parallel versions (blue/green) ● Deploy the smallest changes you can ● We do not deploy multiple services at once (avoid coupled changes) Paulo Clavijo @pclavijo Cork Software Crafters
  • 15. Scenario UI-1 Replacing and old home page by a new and redesigned one on a SPA UI. - The current home page view has /my-dashboard as route. This route is also the default route in the app, users are redirected to it when they just use the base url www.app.com. - The new page will have multiple components and actions, it will take around 2 week to develop. - Users can not see the new page until it is completely finished. Paulo Clavijo @pclavijo Cork Software Crafters
  • 16. Scenario UI-2 New feature to allow product reviews. - Customers should be able to see reviews for a product on the produt detail view. - Logged-in customers can add their own review for a product. - This new feature will take 1 week to develop. - Users can not see the new feature until it is completely finished. Paulo Clavijo @pclavijo Cork Software Crafters
  • 17. Feature Toggles “A feature toggle is a technique in software development that attempts to provide an alternative to maintaining multiple source-code branches (known as feature branches), such that a feature can be tested even before it is completed and ready for release. Feature toggle is used to hide, enable or disable the feature during run time. For example, during the development process, a developer can enable the feature for testing and disable it for other users.” - Wikipedia Paulo Clavijo @pclavijo
  • 19. Scenario API-1 Make the paramater category required in an existing /products endpoint. - The parameter allows filtering products GET /products?category=home Paulo Clavijo @pclavijo Cork Software Crafters
  • 20. Scenario API-2 Rename the request query parameter pcod to productId in a existing /products endpoint. - The parameter is used for retrieving a single product GET /products?pcod=12345 fun getProduct(@RequestParam pcod: String): Product { return productsService.getProduct(pcod) } Paulo Clavijo @pclavijo Cork Software Crafters
  • 21. Advice and considerations API breaking changes: ● adding a new or modifying an existing validation to an existing resource ● requiring a parameter that wasn’t required before ● changing existing error response codes/messages ● modifying the expected payload ● changing the data type of an existing field ● changing supported filtering on existing endpoints ● renaming a field or endpoint ● changing the URL structure of an existing endpoint … Consider API versioning, Consumer-Driven Contracts Paulo Clavijo @pclavijo Cork Software Crafters
  • 22. Parallel Change “Parallel change, also known as expand and contract, is a pattern to implement backward-incompatible changes to an interface in a safe manner, by breaking the change into three distinct phases: expand, migrate, and contract.” - Martin Fowler Paulo Clavijo @pclavijo Cork Software Crafters
  • 23. Parallel Change Paulo Clavijo @pclavijo Cork Software Crafters
  • 24. Parallel Change Paulo Clavijo @pclavijo Cork Software Crafters
  • 25. Parallel Change Paulo Clavijo @pclavijo Cork Software Crafters
  • 27. Scenario DB-1 Rename the attribute information_compliance to regulatory_requirements in the Application entity. - We are using a table on a relational database. - Attribute not related to other tables. - Change in code and table column. Paulo Clavijo @pclavijo Cork Software Crafters
  • 28. Scenario DB-2 Transform the attribute name to firstname and lastname in the Customer entity. - We are using a table on a relational database. - Attribute not related to other tables. - Change in code and table column. - Data already exist in the table. - No other service connects to this database. Paulo Clavijo @pclavijo Cork Software Crafters
  • 29. Advice and considerations Database changes that can cause downtime or errors: ● removing a column ● adding a column with a default value ● renaming a column ● changing the type of a column ● setting NOT NULL on an existing column ● renaming a table ● adding a foreign key ● backfilling data ● adding an index non-concurrently ... Paulo Clavijo @pclavijo Cork Software Crafters
  • 30. Advice and considerations ● Read chapter 5 (Evolutionary Data) from Building Evolutionary Architectures book. ● Take a look at github.com/ankane/strong_migrations#dangerous-operations Paulo Clavijo @pclavijo Cork Software Crafters
  • 32. Scenario LS-1 Change the persistence technology from Relational Database to a NoSql store. We will start with the Customer entity. - Other entities only refer to Customer using its ID. - Customer is not used in joins. Paulo Clavijo @pclavijo Cork Software Crafters
  • 33. Branch by Abstraction “Branch by Abstraction is a technique for making a large-scale change to a software system in gradual way that allows you to release the system regularly while the change is still in-progress.” - Martin Fowler Paulo Clavijo @pclavijo
  • 34. Branch by Abstraction “Branch by Abstraction is a technique for making a large-scale change to a software system in gradual way that allows you to release the system regularly while the change is still in-progress.” - Martin Fowler Paulo Clavijo @pclavijo
  • 36. Scenario Q-1 - Server A sends a message OrderPlaced with a field old_field using a queue to Server B and Server C. - We need to change old_field to new_field. Server A queue Message Server B Server C Paulo Clavijo @pclavijo Cork Software Crafters
  • 37. Postel’s Law and the Tolerant Reader pattern “When communicating between systems, Postel’s Law and the Tolerant Reader pattern state that an implementation should be liberal when receiving data and conservative when sending data. This makes system integration less painful because changes to data fields ignored by the receiving system becomes seamless to the overall integration.” - Secure By Design Paulo Clavijo @pclavijo Cork Software Crafters
  • 39. Scenario P-1 We have a service that calculates daily delivery routes for postmen. It uses a cpu and memory inefficient route calculation logic, we want to reimplement the calculation with a new algorithm that improves performance. - Calculation is complex with lots of corner cases. - We expect the same outcome from old and new logic. - It will take around 2 week to develop. - This service is highly important for the business. - Paulo Clavijo @pclavijo Cork Software Crafters
  • 40. Advice and considerations ● Consider Canary Release ● Consider Branch Branch By Abstraction with verification (involves verifying that the two implementations return the same results to requests) ● Take a look at Scienties github.com/github/scientist (a library for carefully refactoring critical paths) Paulo Clavijo @pclavijo Cork Software Crafters
  • 41. Verify Branch By Abstraction “... a run-time configuration toggle delegates to a verifying implementation that calls both components with the same inputs and fails fast if they do not produce the same output. This reduces the feedback loop for old and new component incompatibilities, and increases confidence in our evolving architecture.” - Steve Smith Paulo Clavijo @pclavijo
  • 42. References - Taller Parallel Changes, Eduardo Ferro. Software Crafters Barcelona 2018. - BlueGreenDeployment, Martin Fowler - BranchByAbstraction, Martin Fowler - Parallel Change, Danilo Sato - Parallel Change Refactoring, Oleksii Fedorov - Parallel Change (Parallel Design), Jakub Holy - Effective Design (slides 8 and 9), Kent Beck - The Limited Red Society, Joshua Kerievsky - StranglerFigApplication, Martin Fowler - CanaryRelease, Danilo Sato Paulo Clavijo (@pclavijo)Cork Software Crafters
  • 43. Recommended Books - Building Evolutionary Architectures: Support Constant Change by Neal Ford, Rebecca Parsons and Patrick Kua. - The DevOps Handbook by Gene Kim, Jez Humble, Patrick Debois, John Willis (chapter 12). - The Mikado Method by Ola Ellnestam. - Working Effectively with Legacy Code by Michael Feathers. - Refactoring by Martin Fowler. Paulo Clavijo (@pclavijo)Cork Software Crafters