Pat Debois, What if devops was invented by coca cola?
A cure for everything!
nobody knows the secret formula
celebrate delivery
communication
automation
measuring
sharing
test driven
devops/noops/infracoders
the end users love it
solve your own bottleneck, adapt it to your needs.
Open space, Platform Refactoring
How do you handle refactoring which spans more than one app, more
than one team, more than one API boundary?
eg: multiple interconnected webapps, each maintained by a
different team.
Step 1: simplify. Kill features! Features carry a cost, and if
they are harming performance, they may not be carrying their
weight
API versioning
Branch by abstraction for APIs:
start with frontend hitting API-v1
introduce API-v2
gradually migrate frontend from using API-v1 to API-v2, one call
at a time
check it all works
remove API-v1
semantic versioning – communicate when your APIs break
only really viable if you have confidence that your test suite
will catch breaking changes
API versioning can be problematic for legacy reasons. If you’re
close to your API consumers, it’s easy to drop old API
versions. If you’re far removed (say, with a public API), you
may have to keep maintaining multiple API versions for a long time
though one way to alleviate this can be to reimplement API v1
as a shim on API v2; that way, you have much less code to
maintain and (more importantly) less duplication
Team interplay
If I’m a frontend dev and I want to instigate a change to a
backend API, how should I go about it?
fork the repo and JFDI!
but get it reviewed by the backend team
go over and pair with someone from the backend team for a while
good communication is key – your JavaScript developer may not
have the ability to just fix it themselves; but they should feel
able to approach backend team for help
How do application developers get feedback about production
performance?
Who deploys the code?
if devs are deploying their own code, they should also be
watching the monitoring as they deploy it
this builds up familiarity with the metrics relevant to
their app
then the devs know if their app is worsening in performance
issue: there may be 20,000 graphs. The ops will have much
more knowledge than the devs in how to wade through all this
data, but the devs should be more directly interested in the
data specific to their app.
mitigation: pair an ops and a dev on making a dashboard
devs & QAs to own the dashboard
ideas for metrics:
response time
SQL query time
disk, cpu, memory
iowait
Open space: devops and kanban
Kanban wall:
columns
limited WIP
optimize for throughput
if you hit a WIP limit, stop the line and fix the blockage
sharing information internally
wiki
example: developer configuring logstash, simultaneously writes
wiki page for logstash
“we’re an ops team but we have CI specialists and production
specialists. would we need one kanban board or two?”
kanban works for cross-functional teams
anyone can pick up any story
if you violate this, your velocity may become misleading
eg CI folks consistently do a 1-point story 3x faster than
production folks; velocity will become skewed by prod folks
how do you handle interrupt-driven work within kanban?
ie if you’re at a WIP limit, how do you handle an urgent
production outage?
make kanban work for you; don’t become a slave to it
if WIP limit is preventing you from working, increase it
but what’s the point of a WIP limit if you just raise it
when you hit it? Isn’t it trying to tell you something?
if you hit a WIP limit, yes you should investigate
why. Correct action will depend
if someone’s struggling with their story, stop the line
& help them?
too many outstanding pull requests and not enough people
reviewing - JFDI
team is working well, but some people have nothing to do
– raise WIP limit
can have an “urgent” lane for interrupts
drop an existing task to a “blocked” column to make room for the
urgent task
how does this happen in scrum vs kanban?
in scrum, if I have a production outage which my most senior
dev takes on, I can look to reduce our commitment for the
sprint in order to communicate the loss of capacity to the
stakeholders. How does kanban cope?
iterations are an accounting tool. you measure velocity and
use yesterday’s weather to do planning. If you think you’ve
taken a hit, you can communicate an expectation of a reduced
velocity for the iteration.
ZeroTurnaround demos
JRebel demo
maven project in eclipse
tomcat (with jrebel) running
edit JSPs & properties file & save
instantly see results in tomcat
edit java validation logic & save
ditto
HotSpot can do some of these things, but JRebel can do advanced
things such as big refactorings, adding classes, deleting classes, etc
LiveRebel demo
orchestration
releases should be testable, reversible, automated, consistent
command centre
build artefact for an app (code+db+conf)
one-stop mgmt console
see what’s currently deployed to any given server
app view:
see what versions of what apps
drill down into artefacts to see what’s in place
diff between versions
Kushal Pisavadia (@KushalP), How we ship software at GOV.UK
Software developer, GDS
History of GDS
embedded inside Cabinet office, inside HMG
civil service - 464000, google 55000, BBC 20000
GDS started 18 months ago
developers
designers
writers
policy
comms
operations
Tiny govt dept + web agency + creative agency
“Digital services so good that people prefer to use them”
rather than paper, phone, etc
GDS own the UX end-to-end
focus on user need
not government need
ship fast
measure everything
Martha Lane Fox’s report “Revolution, not evolution”