Our highest priority is to
satisfy the customer
through early and
of valuable software.
Developers must also support the operational use of their
software — a combination that’s become known as “devops.”
This further motivates writing good code and testing it
thoroughly. Developers’ personal stake in keeping the system
running smoothly complements the engineering procedures and
lets the system maintain quality at scale. Methodologies and tools
aren’t enough by themselves because they can always be
misused. Thus, a culture of personal responsibility is critical.
Kent Beck - Facebook - https://www.facebook.com/publications/514128035341603
Ubiquitous in Agile initiatives
Common impediment at stand-ups at this moment
Costly to spin up another test environment
Inconsistent and stale configurations - system failures
Communication barriers between development and operations
Short Cycle Times
Focus on Quality
Low Technical Debt
Individuals and Interactions
maintenance of the
maintenance of the
systems on which the
How can we apply Agile practices to both?
A Deeper Vertical Slice?
<< User Stories
It’s all software now ...
Virtualization has revolutionized system operations
Let’s apply known practices to both application development and
Let’s develop our systems - using build automation,TDD, and
We have historically run our software on systems, now lets use
software to build those systems
Three reasons why this won’t work :)
Reason 1: System provisioning is much more variable than building
Reason 2: Systems are more heavyweight than software artifacts
Reason 3: Doing this involves possibly unfamiliar tools and skills
Operations write software? That’s for developers.
Developers manage systems? That’s for operations.
Too variable ?
Traditional system provisioning involves
One solution: make provisioning deterministic
The inputs guarantee the outputs
No “hidden” inputs
Only automate a deterministic system
Use tests to assert outputs
Environment automation solution
Cook up servers with recipes
Free and Open Source
Influenced by Puppet, which was influenced by CFEngine
Too heavyweight ?
Solution: lightweight virtualization tools
Abstract away the hardware
Command line integrates with build system
Explore new areas:
Developers - Learn sysamin stuff - bash, init.d scripts, managing public
keys, vi instead of Eclipse
System engineers - Dig into software development - Ruby, Java, TDD
Embrace new tools
Dev/Ops collaboration - pairing, post release retrospectives