This document discusses the principles and benefits of continuous delivery. It defines continuous delivery as enabling an application to be built, tested, and ready for deployment to production at any time. The key principles are to automate everything, keep all code and releases in source control, and ensure quality is built in from the start. Continuous delivery provides benefits like instant feedback, low risk changes, and faster delivery of value to customers. It also impacts development practices like enabling shorter sprints in Scrum and promoting test-driven development.
2. Tomas Riha
Architect @ VGT/WirelessCar
MAJOR project liability
MAJOR Project Liability
Passionate about change and improvement
Skiing feeder
mail: triha74@gmail.com
twitter: @TomasRihaSE
blog: continuous-delivery-and-more.blogspot.com
3. Agenda
What its all about
Intro to Continuous Delivery
Principles of Continuous Delivery
Look at a Pipe
Impact on Methods and Professions
Importance of Architecture
Scaling Continuous Delivery
4. What its all about
Our highest priority is to satisfy the customer
through early and continuous delivery
of valuable software.
5. What does that mean?
As soon as we have added value to the application it
should be in the hands of the customer.
6. Are we really delivering as soon as possible?
Pre
Planning
Dev Sys Test Reg Test
Pre
Planning
Dev Sys Test Reg Test
Scrummerfall happens because its hard for developers to have
something deployable for the testers to test.
System testing on something that has not been regression tested is
fundamentally flawed.
Cost of regression test tends to bloat sprint content.
Sprint 2-4 weeks
7. Are we really delivering as soon as possible?
Delivering every 2-4 weeks when a SET of features have
been completed is NOT delivering value as soon as
possible.
8. Remind me why do we want to deliver as soon
as possible.
Feedback
Faster feedback, less upfront design, easier to build what the customer wants.
Complexity
Small change sets are low risk, easy to understand and easy to manage.
Cost
Unreleased code is cost without value.
9. So what is stopping us?
Its hard to...
... system and regression test right at the moment when the
value has been added.
... to even just have an application deploy at the moment
when the value has been added
10. Continuous Delivery
Build Release Deploy Test Prod
Your application always builds, passes its unit tests,
deploys and passes system tests.
11. Continuous Integration/Delivery/Deploy
Continuous Integration
Your application always builds and passes its unit tests.
Continuous Delivery
Your application always builds, passes its unit tests, deploys and passes its
system tests making it always ready to deploy to production through a largely
automated process
Continuous Deployment
Your application automatically deploys to production through a fully automated
process
12. Continuously as in all the time?
Yes!
End of sprint isn't continuously.
Weekly isn't continuously.
Nightly isn't continuously.
Every code commit is continuously!
13. What Tests? Unit? Component? System?
Yes!
All of it and eventually you will add Rollback, Load and Failover as well.
14. Principles of Continuous Delivery
1. The process MUST be repeatable, reliable and
independent of key personnel
23. The pipe - Build once!
Build Release
Build and Unit test then release it!
24. The pipe - Release everything!
Build Release
Build Release
Build Release
Build Release
Code
DB Scripts
Server Config
Deploy script
Feedback Feedback
25. The pipe -Bundle released artifacts
Build Release
Build Release
Build Release
Build Release
Assembly
Feedback
26. The pipe - Use Same Deploy Mechanism
Function TestAssembly Deploy
DB
Server
Function Test
Function Test
Pipe Status
Feedback
Feedback Feedback
27. The pipe - Use Same Deploy Mechanism
Deploy
DB
Server
Pipe Status
Server
DB
Server Server
DB
Server Server
Deploy
Pre Prod Prod
UAT
FeedbackFeedback Feedback
28. Continuous Delivery
Build Release Assemble Deploy
Deploy
PreProd/Prod
Test
Summary
We build once
Release everything
Automate everything
Fast feedback
Automate all tests except UAT
29. Obvious benefits
Continuous Regression testing gives instant feedback.
Continuously deploying to test servers tests deploy mechanism several
hundred times per release.
Always ready to push new release into UAT
We can get customer feedback as soon as value has been added
30. Continuous Delivery - Feature Verification
Pre
Planning
Dev Reg Test
Continuously
Continuous Regression means that all feature verification is always done
on a functioning application.
Forces Test Driven Development as the gap in time between Reg Test
and Verification of new features leaves untested code in the application.
System Test
When a
feature is
done
31. Continuous Delivery - Impact on Scrum
Pre
Planning
Dev Reg Test
No need for any code freeze period.
Short sprints are possible since there is no need for long regression test period
Features can be planned at start or just before feature start.
Features can be done and "released" but not delivered until sprint.
Features can be developed serially or in parallel within a sprint.
System Test
Feature cycle
Pre
Planning
Dev Reg Test System Test
Feature cycle
32. Continuous Delivery - Impact on Scrum
Features can be done and "released" but not delivered until sprint.
Breaks continuous delivery?
Don't we want to continuously deliver to UAT?
We want feedback as soon as possible!
Undelivered code is a cost without value!
IF you stick to scrum do NOT submit to mid sprint releases instead shorten your
sprints.
33. Continuous Delivery - Impact on Scrum
Scrum is based on developing a feature set without
distraction, mid sprint releases are a huge distraction.
Working towards two deadlines within one sprint causes stress.
Discussion about what features will be done for the mid sprint release are a
distraction and time sink.
Deploying what happens to be ready isnt so bad in theory, in reality Product
owner will expect features at mid sprint.
34. Continuous Delivery - Feature driven
development
Feature driven development is very natural
Analyze, Design, Develop+Test, Deliver to UAT
Development can be done serial or parallel
No done and unreleased code
Pre
Planning
Dev Reg Test System Test
Feature cycle
Pre
Planning
Dev Reg Test System Test
Feature cycle
35. Continuous Delivery - Continuous
Responsibility
Developers have to take responsibility for their check ins.
Regression test before commit, make a smoke test suite for fast feedback
Never just change regression tests to make them work
Evolve new tests with the code
36. Continuous Delivery - Continuous
Responsibility
If we break the pipe we need to fix it ASAP
Things will break, things should break, when it does fix it!
Never leave the pipe red!
37. Continuous Delivery - Continuous
Responsibility
Portability and visiblity
Pipe has to be portable in order for developers to be able to take responsibility.
Fast feedback has to be visible.
38. Continuous Delivery & Test Driven
Development
Time Gap between code commit of new feature and
execution of test case needs to be minimal.
If it´s green it needs to go into regression suite ASAP
If there is a bug equally it needs to be reported equally ASAP
Developing tests in parallel with code minimizes the gap.
39. Continuous Delivery & Test Driven
Development
Who should automate the tests?
Test Design - Done by Testers
Test automation - Done by ????
Coding - Done by Developers
40. Continuous Delivery & Test Driven
Development
Tomorrow Agile Team Member
Developers with Testing skills
alt
Testers with Development skills
WILL BE SUPER HOT AND EARN SUPER NICE $$$$
:)
41. Continuous Delivery & Architecture
Architect for testability and change.
Architect around services.
Clearly defined responsibility.
Small components.
Build in testability.
Build strong support for feature flags.
42. Continuous Delivery & Scalability
Single threaded process does not scale
Scale around number of code committers
Dedicated servers create bottlenecks
Good architecture helps, monoliths don't.
Isolated and parallelized testcases help.
Use cloud nodes!!
If no cloud available build a pool of servers.
43. Continuous Delivery & Expansion
Each individual that is exposed to CD has to mature
Continuous Delivery is individual maturity.
Each new individual has to mature and learn.
Each new team has to mature and learn.
There are no short cuts for new team members just faster learning.
44. Benefits
Continuous Regression testing gives instant feedback.
Continuously deploying to test servers tests deploy mechanism several
hundred times per release.
Always ready to push new release into UAT
Test Driven Development
Continuous Responsibility by Developers
Sustainable Quality