@kmugrage https://gocd.org/
ARCHITECTING FOR CONTINUOUS DELIVERY
Ken Mugrage – ThoughtWorks Technology Advocate
ARCHITECTING FOR CONTINUOUS DELIVERY Ken Mugrage ThoughtWorks - - PowerPoint PPT Presentation
ARCHITECTING FOR CONTINUOUS DELIVERY Ken Mugrage ThoughtWorks Technology Advocate @kmugrage https://gocd.org/ TEAM STRUCTURE @kmugrage https://gocd.org/ CONWAYS LAW Any organization that designs a system (defined broadly) will produce
@kmugrage https://gocd.org/
Ken Mugrage – ThoughtWorks Technology Advocate
@kmugrage https://gocd.org/
@kmugrage https://gocd.org/
Any organization that designs a system (defined broadly) will produce a design whose structure is a copy of the organization's communication structure.
@kmugrage https://gocd.org/
“…It also brings them into day-to-day contact with the customer. This customer feedback loop is essential for improving the quality of the service.”
@kmugrage https://gocd.org/
@kmugrage https://gocd.org/
https://martinfowler.com/bliki/FeatureBranch.html
@kmugrage https://gocd.org/
https://martinfowler.com/bliki/FeatureBranch.html
@kmugrage https://gocd.org/
https://martinfowler.com/bliki/FeatureBranch.html
@kmugrage https://gocd.org/
@kmugrage https://gocd.org/
function reticulateSplines(){ // current implementation lives here }
https://martinfowler.com/articles/feature-toggles.html by Pete Hodgson
@kmugrage https://gocd.org/
function reticulateSplines(){ var useNewAlgorithm = false; // useNewAlgorithm = true; // UNCOMMENT IF YOU ARE WORKING ON THE NEW SR ALGORITHM if( useNewAlgorithm ){ return enhancedSplineReticulation(); } else { return oldFashionedSplineReticulation(); } } function oldFashionedSplineReticulation(){ // current implementation lives here } function enhancedSplineReticulation(){ // TODO: implement better SR algorithm }
https://martinfowler.com/articles/feature-toggles.html by Pete Hodgson
@kmugrage https://gocd.org/
https://martinfowler.com/articles/feature-toggles.html by Pete Hodgson
@kmugrage https://gocd.org/
Build Functional Tests Regression Tests Deploy To Stage Deploy To Production Build Toggles Off Toggles On Deploy To Stage Deploy To Production
@kmugrage https://gocd.org/
Client Code Client Code Client Code Old Supplier https://martinfowler.com/bliki/BranchByAbstraction.html
@kmugrage https://gocd.org/
Client Code Client Code Client Code Old Supplier Abstraction Layer https://martinfowler.com/bliki/BranchByAbstraction.html
@kmugrage https://gocd.org/
Client Code Client Code Client Code Old Supplier Abstraction Layer https://martinfowler.com/bliki/BranchByAbstraction.html
@kmugrage https://gocd.org/
Client Code Client Code Client Code Old Supplier Abstraction Layer https://martinfowler.com/bliki/BranchByAbstraction.html New Supplier Abstraction Layer
@kmugrage https://gocd.org/
Client Code Client Code Client Code New Supplier Abstraction Layer https://martinfowler.com/bliki/BranchByAbstraction.html
@kmugrage https://gocd.org/
@kmugrage https://gocd.org/
/api/users/v1
Consumer 1 Consumer 2 Consumer 3
@kmugrage https://gocd.org/
/api/users/v1
/api/users/v2
Consumer 1 Consumer 2 Consumer 3
@kmugrage https://gocd.org/
/api/users/v1
/api/users/v2
Consumer 1 Consumer 2 Consumer 3
@kmugrage https://gocd.org/
/api/users/v2
Consumer 1 Consumer 2 Consumer 3
@kmugrage https://gocd.org/
Service One Service Two DB
@kmugrage https://gocd.org/
Service One Service Two DB DB
@kmugrage https://gocd.org/
@kmugrage https://gocd.org/
https://martinfowler.com/articles/201701-event-driven.html User Service Quote Service Quote Service Quote Service Quote Service
@kmugrage https://gocd.org/
User Service Quote Service Service Service Service https://martinfowler.com/articles/201701-event-driven.html
@kmugrage https://gocd.org/
the store
from the event stream
https://martinfowler.com/articles/201701-event-driven.html
@kmugrage https://gocd.org/
@kmugrage https://gocd.org/
Client Code Test Double
@kmugrage https://gocd.org/
Client Code Test Double
Contract Test Their Test Service
@kmugrage https://gocd.org/
https://www.thoughtworks.com/radar/techniques/consumer-driven-contract-testing
@kmugrage https://gocd.org/
@kmugrage https://gocd.org/
mocking
https://gauge.org/ https://taiko.gauge.org/
@kmugrage https://gocd.org/
In control theory, observability is a measure of how well internal states
The concept of observability was introduced by Hungarian-American engineer Rudolf E. Kálmán for linear dynamic systems.
@kmugrage https://gocd.org/
applyDiscountCode(discountCode){ this.instrumentation.applyingDiscountCode(discountCode); let discount; try { discount = this.discountService.lookupDiscount(discountCode); } catch (error) { this.instrumentation.discountCodeLookupFailed(discountCode,error); return 0; } this.instrumentation.discountCodeLookupSucceeded(discountCode); const amountDiscounted = discount.applyToCart(this); this.instrumention.discountApplied(discount,amountDiscounted); return amountDiscounted; }
https://martinfowler.com/articles/domain-oriented-observability.html by Pete Hodgson
@kmugrage https://gocd.org/
@kmugrage https://gocd.org/
@kmugrage https://gocd.org/
DB Version 1
DB Version 2
App Version 1 App Version 1 DB Version 2
App Version 2
@kmugrage https://gocd.org/
DB Version 2
App Version 2 select FirstName, LastName from users If null select Name from users Prompt user to update Update FirstName, LastName select FirstName, LastName from users
@kmugrage https://gocd.org/
@kmugrage https://gocd.org/
Release to a very small portion of our audience to “test in production”. ( Pro Tip: Test for business efficacy not just successful bits and bytes )
@kmugrage https://gocd.org/
Release to a very small portion of our audience to “test in production”. ( Pro Tip: Test for business efficacy not just successful bits and bytes )
@kmugrage https://gocd.org/
Release to a very small portion of our audience to “test in production”. ( Pro Tip: Test for business efficacy not just successful bits and bytes )
@kmugrage https://gocd.org/
@kmugrage https://gocd.org/