-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathnotes.txt
128 lines (94 loc) · 3.37 KB
/
notes.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
= The last mile
Every change should trigger the feedback process
Feedback received asap
Delivery team must receive feedback and act on it
= Lean
== Cycle time
Usually dev complete but app doesn't work well in integrated, production-like,
realistic environment and load -> stress and long hours
Remove testing and integration phases that usually happen at the end
-> software always in a releasable state
Incremental development
-> focus on core functionality
Requires pushing to mainline every day
= Deployment pipeline
== Practices
- Only build your binary once
- keep pipeline efficient
- only build upon sound foundations
== Stages
Commit: build + unit tests + code analysis
Automated acceptance test: funtional and non-functional
Manual test: exploratory, UAT
Release: give to customer
= Low risk software releases
== Releasing incrementally
Deploy components independently.
Decouple DB upgrade from feature release
Make rollbacks easy: don't delete data
Expand/contract DB deployment - expand are run before, contract after. Expand
is compatible with current versoin
== Decoupling deployment from release
- Blue/Green deployment
- Canary testing
- Dark launches
- Feature toggles for A/B testing
== Reducing batch size
- reduce cycle time
- prevent scope creep
- increase team motivation
- reduce risk
-> if it hurts, do it more often
- more practice
- working out what went wrong is easier due to smaller size of changes
- rolling back is easier
Rolling forward is the new rolling back
== Building for resilience
Being able to recover quickly from failure is more important than having
failures more often.
-> Mean Time To Recovery over Mean Time Between Failures
Chaos monkey
People
Remediation over rolling back
== Pillars
1. Configuration management
- build, test, deploy automatically
- deploy and runtime config centrally managed
- automated configuration change to every env
- all development done on mainline, implementing large changes
incrementally. Incomplete features hidden
Also requires great cooperation between dev and ops.
2. Agile testing
- automate at every level: unit, integration, acceptance, performance
-> if tests pass, software is releasable
- testing build into the delivery process
3. Deployment pipeline
- model of delivery process, i.e. part of value stream from check in to
release
- extension of CI to the testing and operations teams
- enforce delivery workflow
- used to audit and improve delivery process
Main metric: Cycle time, i.e. delay between deciding to implement and idea and
having software available to users.
Implemented incrementally. Find bottlenecks and solve them - theory of
constraints, kanban
= Core practices
1. Start with Minimum Viable Product
- if you're not embarassed with version 1, you launched too late
2. Measure the value of features
- metrics are part of your product
- lean's 'validated learning': gather actionable metrics based on real
usage
- validated as criteria for done
3. Just enoug up-front analysis
4. Do less
- If you find yourself running out of room on the cards, use smaller cards
5. Include feature toggles
= Conclusion
- Constantly reflect
= 5 steps
CI server
Commit check
Simple deployment script
Real-time alerting
Root cause analysis (5 whys)