The Agile App Developer’s
Guide to Success
with DevOps Tooling
or, “What on Earth was I thinking
when I named this?”
About Me
Markus Silpala
@msilpala
Developer, Instructor, Coach, Architect,
DevOps Engineer
Software Maker
How About You?
The Agile App Developer’s
Guide to Success
with DevOps Tooling
Agile App Developer
Cross-functional and co-located
Pairing or tight collaboration
Test-Driven Development (TDD)
Lots of testing; likely no QA team
Fast, frequent builds
Separate ops group does deployments and admin
Working this way is AWESOME
Awesome ToolsVersion Control (often GitHub these days)
Automated testing frameworks
IDEs with refactoring and auto-completion
Continuous Integration (CI) servers
Build and dependency tools (kind-of awesome)
Easy, consistent workstation setup
Awesome Practices
Pairing (or maybe rapid fork-pull cycles)
Collective code ownership
TDD, BDD, and/or ATDD
User stories and customer collaboration
Frequent builds and/or releases
The Agile App Developer’s
Guide to Success
with DevOps Tooling
Here comes DevOpsor,
Agile Infrastructure
Awesome Tools!
Version Control (usually GitHub)
Infrastructure automation (e.g. chef)
Clouds of API-driven virtual machines
Test automation frameworks (e.g. ChefSpec)
CI Servers
Dependency-management tools (e.g. berkshelf)
Awesome Practices!
Pairing? Frequent fork-pull cycles, at least
Collective Ownership – probably
Automated Builds
Continuous Integration – at least in some parts
And yet...
After going agile, no one ever asks for their requirements or testing silos back.
Yet I have seen two very capable teams ask for their ops silos.
Other colleagues have shares similar stories with me.
“After a while, the Java devs don’t want anything to do with Chef.”
Why?
Immature tooling (relatively)
Unfamiliar skill areas for a lot of app devs
Much slower build automation
More complex interactions across components.
Uncomfortable time requirements (i.e. on call)
The Agile App Developer’s
Guide to Success
with DevOps Tooling
Unfamiliar tool space
Linux: RHEL vs CentOS vs Ubuntu vs Debian
Networking: DNS, TCP, UDP, interfaces, ports, routes
Installation: source vs binary tarball vs package
Services, processes, logging, CPU, RAM
SSH, tunnels, private/public keys
Unfamiliar tool space
Embed an ops person on the dev team
Find some devs who do know these things
Train or mentor the devs that you have
Workstations hard to set up consistently
Document the exact steps used to set up a dev machine.
Keep those docs up to date!
Better: automate the setup.
Hard to test infra
ChefSpec (if you're using Chef)
ServerSpec
Test Kitchen
bats
Self-testing builds
Long feedback loops
Use ChefSpec and vagrant for local testing
Use a local repository for any installation binaries
Pre-build VM images with base installations in place
Use a container system such as Docker
Dependencies are harder
Try Puppet instead
Try Ansible instead (python + ssh)
Devs just want to code
Ops proficiency is the new testing
Ensure they have the help (and time) they need to succeed in the infra space
Embed an ops person on the dev team
At least make sure they know each other's pain
These waters are still being charted
Mini-RetrospectiveHow good a use of your hour was this session?
(5) Best use of the last hour that I can think of
(4) Highly valuable use of my time
(3) Valuable
(2) Meh
(1) I wish I had left early