The document discusses the rise of DevOps as a new IT operations support model enabled by large cloud providers. It argues that DevOps will emerge because it is not solely driven by top-down implementations, and enables IT organizations to look for new models enabled by tools like Chef, Puppet, and Docker. DevOps adoption will be stimulated by the growing interest in tools that help align development and operations teams.
30. It all starts in Development
But what do we tell them to do
and how do we get them to do it?
31. Share ownership of availability
• Developers must wear pagers
• Incident command training so everyone
knows their roles
• Notification mechanism?
Access provisioning?
32. Non-functional requirements are
first class citizens
• All of the “-ility” requirements
• As much a part of your service as the
businessʼs functional requirements
• Manage through same process
• Make sure they are on the schedule
• Donʼt over commit
33. Strive for parity between dev & prod
• Develop test data fixtures for all environments
• Implement Mock Services for major
infrastructure pieces for Developer user.
• Continuous integration means integrate early
• Use the deployment, config, and packaging
tools in dev
34. Push config management
discipline back to Dev
• Dev is about creating variation, Ops is
about eliminating variation
• Augment deployment toolchain to support
the variation
• Do developers use the tools?
• Do developers like them?
• Devʼs need config too
• Accept config contributions and patches
from dev
35. Packaging... itʼs not just for the OS
• If you want to be a high performing web
operations organization, you need to take
change management seriously.
• Strict versioning is needed, and package
managers do that.
• Itʼs about being idempotent.
• Transfer packaging responsibility to dev
• Define the packaging constructs you will
support
http://webscalebook.com
36. Config is code
• if itʼs code it needs to be managed like
code...
• Should be transparent and identical SDLC
in both dev and ops
• Avoid or eliminate asymetric release
processes
37. Tailor release artifacts to roles
• “Small teams make better software”
• Make sure one team getting stuck doesnʼt
prevent another team to release (org
coupling)
• Large codebases suffer software entropy
effects
• Build an infrastructure that can reliably
manage lots of smaller artifacts
• Org conflict is a good time to suggest
breaking up a codebase into separate
concerns
38. Standard management vocabulary
• Consistent and expected management
behavior
• Across components and releases
• “start, stop, status, update, install...”
39. Rollback
• Rollback that works
• No, really works
• Seriously, really really works
• You say it will work? Test it right now
40. Standard metrics abstractions
• Dev surface metrics to Ops
• Avoid the back and forth conversations
• Use a standard framework
• Use standard types (gague, counter,
timer...)
• Ops knows what to expect and how to
visualize
https://github.com/codahale/metrics
41. Push test ownership to the edges
• QA is “Quality Assurance”
• QA writing tests = bottleneck
• QA writing tests = avoiding responsibility
• QA is architecture / tooling / assurance
• Test Driven Development
• Test Driven Operations (yes, you too)
• Bottom line: Everyone owns quality.
48. Decoupled Release Model Example
Code, Config, Control
Code, Config, Control
Code, Config, Control
"Check-
Operations in"
"Check-
Rundeck
1 in"
"Check- Source
1 in" Repo
Source 1 Monitor
Rundeck Chef
1
"Check-
in"
"Check-
Source
Repo
"Auto-Deploy Repo
Instance Instance Develop in"
"Check-
New App Develop Package Manifest
in" "Check- Jobs &
Infrastructure
CI Server
Develop Package Manifest
Package Manifest
out"
"Check-
out"
"Check-
2 Adhoc
1 Instance Source
Repo
"Verify"
2 out" Operate
Commands
"Verify"
2
2
Watch
"Verify" Code
Monitoring Watch
Publish Code
& Testing Staging Results Watch
Build Rundeck
Release Publish Code
ResultsContinuous Build
Repo Publish Release Chef
Deployment
ResultsContinuous Build
Repo
Release
Continuous
Loop
Integration Deployment Unit RightScale
Testing Tests "Promote" ARelease
Repo
Prod Integration Deployment Unit
Loop
"Promote" Repo
A Prod
Release Testing Loop Tests
Repo
Dev Test
Automatic
Integration
Deployment
Testing
Unit
Tests 3
"Promote" A
Dev Test Automatic
Deployment 3
Dev Test
Dev Test
Automatic
Deployment 3
Bootstrap Develop Release Operate
Release
Repo Release
A Release Repo
Repo A
1 Repo
B
4 Promote Prod
Release
Repo
B
Audit Release
Job Repo Release
Repo Repo
C C
"Determine what packages "Promote release"
and versions are available"
2 "Check
-in"
Souce
Repo
Hudson
Prod
Release
Repo
Release
Package Manifest 5 Deploy
Job
"yum install"
Release
app code
Repo
A
Release
Rundeck
services Repo
3 Validate
Release
OS B
Release
Chef
Repo RightScale
C
"Check for conflicts and
Sandbox
Prod
run validation scripts"
49. Decoupled Release Model Example
Code, Config, Control
Code, Config, Control
Code, Config, Control
"Check-
Operations in"
"Check-
Rundeck
1 in"
"Check- Source
1 in" Repo
Source 1 Monitor
Rundeck Chef
1
"Check-
in"
"Check-
Source
Repo
"Auto-Deploy Repo
Instance Instance Develop in"
"Check-
New App Develop Package Manifest
in" "Check- Jobs &
Infrastructure
CI Server
Develop Package Manifest
Package Manifest
out"
"Check-
out"
"Check-
2 Adhoc
1 Instance Source
Repo
"Verify"
2 out" Operate
Commands
"Verify"
2
2
Watch
"Verify" Code
Monitoring Watch
Publish Code
& Testing Staging Results Watch
Build Rundeck
Release Publish Code
ResultsContinuous Build
Repo Publish Release Chef
Deployment
ResultsContinuous Build
Repo
Release
Continuous
Loop
Integration Deployment Unit RightScale
Testing Tests "Promote" ARelease
Repo
Prod Integration Deployment Unit
Loop
"Promote" Repo
A Prod
Release Testing Loop Tests
Repo
Dev Test
Automatic
Integration
Deployment
Testing
Unit
Tests 3
"Promote" A
Dev Test Automatic
Deployment 3
Dev Test
Dev Test
Automatic
Deployment 3
Bootstrap Develop Release Operate
Release
Repo Release
A Release Repo
Repo A
1 Repo
B
4 Promote Prod
Release
Repo
B
Audit Release
Job Repo Release
Repo Repo
C C
"Determine what packages "Promote release"
and versions are available"
2 "Check
-in"
Souce
Repo
Hudson
Prod
Release
Repo
Release
Package Manifest 5 Deploy
Job
"yum install"
Release
app code
Repo
A
Release
Rundeck
services Repo
3 Validate
Release
OS B
Release
Chef
Repo RightScale
C
"Check for conflicts and
Sandbox
Prod
run validation scripts"
50. Bootstrap
Operations
Rundeck
Rundeck Chef
"Auto-Deploy Instance Instance
New App
Infrastructure
CI Server
Source
1 Instance
Repo
Monitoring
& Testing Staging
Release
Repo
Prod
Release
Repo
Dev Test
51. Decoupled Release Model Example
Code, Config, Control
Code, Config, Control
Code, Config, Control
"Check-
Operations in"
"Check-
Rundeck
1 in"
"Check- Source
1 in" Repo
Source 1 Monitor
Rundeck Chef
1
"Check-
in"
"Check-
Source
Repo
"Auto-Deploy Repo
Instance Instance Develop in"
"Check-
New App Develop Package Manifest
in" "Check- Jobs &
Infrastructure
CI Server
Develop Package Manifest
Package Manifest
out"
"Check-
out"
"Check-
2 Adhoc
1 Instance Source
Repo
"Verify"
2 out" Operate
Commands
"Verify"
2
2
Watch
"Verify" Code
Monitoring Watch
Publish Code
& Testing Staging Results Watch
Build Rundeck
Release Publish Code
ResultsContinuous Build
Repo Publish Release Chef
Deployment
ResultsContinuous Build
Repo
Release
Continuous
Loop
Integration Deployment Unit RightScale
Testing Tests "Promote" ARelease
Repo
Prod Integration Deployment Unit
Loop
"Promote" Repo
A Prod
Release Testing Loop Tests
Repo
Dev Test
Automatic
Integration
Deployment
Testing
Unit
Tests 3
"Promote" A
Dev Test Automatic
Deployment 3
Dev Test
Dev Test
Automatic
Deployment 3
Bootstrap Develop Release Operate
Release
Repo Release
A Release Repo
Repo A
1 Repo
B
4 Promote Prod
Release
Repo
B
Audit Release
Job Repo Release
Repo Repo
C C
"Determine what packages "Promote release"
and versions are available"
2 "Check
-in"
Souce
Repo
Hudson
Prod
Release
Repo
Release
Package Manifest 5 Deploy
Job
"yum install"
Release
app code
Repo
A
Release
Rundeck
services Repo
3 Validate
Release
OS B
Release
Chef
Repo RightScale
C
"Check for conflicts and
Sandbox
Prod
run validation scripts"
52. Develop
Code, Config, Control
"Check-
in"
1 Source
Repo
"Check-
in"
Develop
Package Manifest "Check-
out"
"Verify"
2
Watch
Code
Publish
Results Build
Continuous
Release
Deployment
Repo
Integration Loop Unit
Testing Tests "Promote" A
Dev Test
Automatic
Deployment 3
53. Decoupled Release Model Example
Code, Config, Control
Code, Config, Control
Code, Config, Control
"Check-
Operations in"
"Check-
Rundeck
1 in"
"Check- Source
1 in" Repo
Source 1 Monitor
Rundeck Chef
1
"Check-
in"
"Check-
Source
Repo
"Auto-Deploy Repo
Instance Instance Develop in"
"Check-
New App Develop Package Manifest
in" "Check- Jobs &
Infrastructure
CI Server
Develop Package Manifest
Package Manifest
out"
"Check-
out"
"Check-
2 Adhoc
1 Instance Source
Repo
"Verify"
2 out" Operate
Commands
"Verify"
2
2
Watch
"Verify" Code
Monitoring Watch
Publish Code
& Testing Staging Results Watch
Build Rundeck
Release Publish Code
ResultsContinuous Build
Repo Publish Release Chef
Deployment
ResultsContinuous Build
Repo
Release
Continuous
Loop
Integration Deployment Unit RightScale
Testing Tests "Promote" ARelease
Repo
Prod Integration Deployment Unit
Loop
"Promote" Repo
A Prod
Release Testing Loop Tests
Repo
Dev Test
Automatic
Integration
Deployment
Testing
Unit
Tests 3
"Promote" A
Dev Test Automatic
Deployment 3
Dev Test
Dev Test
Automatic
Deployment 3
Bootstrap Develop Release Operate
Release
Repo Release
A Release Repo
Repo A
1 Repo
B
4 Promote Prod
Release
Repo
B
Audit Release
Job Repo Release
Repo Repo
C C
"Determine what packages "Promote release"
and versions are available"
2 "Check
-in"
Souce
Repo
Hudson
Prod
Release
Repo
Release
Package Manifest 5 Deploy
Job
"yum install"
Release
app code
Repo
A
Release
Rundeck
services Repo
3 Validate
Release
OS B
Release
Chef
Repo RightScale
C
"Check for conflicts and
Sandbox
Prod
run validation scripts"
54. Release
Release
Repo Release
A Release Repo
Repo A
1 Repo
B
4 Promote Prod
Release
Repo
B
Audit Release
Job Repo Release
Repo Repo
C C
"Determine what packages "Promote release"
and versions are available"
2 "Check
-in"
Souce
Repo
Hudson
Prod
Release
Repo
ease
Package Manifest 5 Deploy
Job
"yum install"
Release
app code
Repo
A
Release
Rundeck
services Repo
3 Validate
Release
OS B
Release
Chef
Repo RightScale
C
"Check for conflicts and
Sandbox
Prod
run validation scripts"