Mart n Ferrari: Tales from the SRE trenches: Dev vs Ops
This is the second part in a series of articles about SRE, based on the talk I gave in the Romanian Association for Better Software.
On the first part, I introduced briefly what is SRE. Today, I present some concrete ways in which SRE tried to make things better, by stopping the war between developers and SysAdmins.
Dev vs Ops: the eternal battle
So, it starts at looking at the problem: how to increase the reliability of the
service? It turns out that some of the biggest sources of outages are new
launches: a new feature that seemed innocuous somehow managed to bring the
whole site down.
Devs want to launch, and Ops want to have a quiet weekend, and this is were the
struggle begins. When launches are problematic, bureaucracy is put in place to
minimise the risks: launch reviews, checklists, long-lived canaries. This is
followed by development teams finding ways of side-stepping those hurdles.
Nobody is happy.
One of the key aspects of SRE is to avoid this conflict completely, by
changing the incentives, so these pressures between development and operations
disappear. At Google, they achieve this with a few different strategies:
Have an SLA for your service
Before any service can be supported by SRE, it has to be determined what is the
level of availability that it must achieve to make the users and the company
happy: this is called the Service Level Agreement (SLA).
The SLA will define how availability is measured (for example, percentage of
queries handled successfully in less than 50ms during the last quarter), and
what is the minimum acceptable value for it (the Service Level Objective, or
SLO). Note that this is a product decision, not a technical one.
This number is very important for an SRE team and its relationship with the
developers. It is not taken lightly, and it should be measured and enforced
rigorously (more on that later).
Only a few things on earth really require 100% availability (pacemakers, for
example), and achieving really high availability is very costly. Most of us are
dealing with more mundane affairs, and in the case of websites, there are many
other things that fail pretty often: network glitches, OS freezes, browsers
being slow, etc.
So an SLO of 100% is almost never a good idea, and in most cases it is
impossible to reach. In places like Google an SLO of "five nines" (99.999%)
is not uncommon, and this means that the service can't fail completely for more
than 5 minutes across a whole year!
Measure and report performance against SLA/SLO
Once you have a defined SLA and SLO, it is very important that these are
monitored accurately and reported constantly. If you wait for the end of the
quarter to produce a hand-made report, the SLA is useless, as you only
know you broke it when it is too late.
You need automated and accurate monitoring of your service level, and this
means that the SLA has to be concrete and actionable. Fuzzy requirements that
can't be measured are just a waste of time.
This is a very important tool for SRE, as it allows to see the progression of
the service over time, detect capacity issues before they become outages, and
at the same time show how much downtime can be taken without breaking the
SLA. Which brings us to one core aspect of SRE:
Use error budgets and gate launches on them
If SLO is the minimum rate of availability, then the result of calculating 1 - SLO is what fraction of the time a service can fail without failing out
of the SLA. This is called an error budget, and you get to use it the way you
want it.
If the service is flaky (e.g. it fails consistently 1 of every 10000 requests),
most of that budget is just wasted and you won't have any margin for launching
riskier changes.
On the other hand, a stable service that does not eat the budget away gives you
the chance to bet part of it on releasing more often, and getting your new
features quicker to the user.
The moment the error budget is spent, no more launches are allowed until the
average goes back out of the red.
Once everyone can see how the service is performing against this agreed
contract, many of the traditional sources of conflict between development and
operations just disappear.
If the service is working as intended, then SRE does not need to interfere on
new feature launches: SRE trusts the developers' judgement. Instead of
stopping a launch because it seems risky or under-tested, there are hard
numbers that take the decisions for you.
Traditionally, Devs get frustrated when they want to release, but Ops won't
accept it. Ops thinks there will be problems, but it is difficult to back this
feeling with hard data. This fuels resentment and distrust, and management is
never pleased. Using error budgets based on already established SLAs means
there is nobody to get upset at: SRE does not need to play bad cop, and SWE is
free to innovate as much as they want, as long as things don't break.
At the same time, this provides a strong incentive for developers to avoid
risking their budget in poorly-prepared launches, to perform staged
deployments, and to make sure the error budget is not wasted by recurrent
issues.
That's all for today. The next article will continue delving into how traditional tensions between Devs and Ops are played in the SRE world.
Comment
Measure and report performance against SLA/SLO
Once you have a defined SLA and SLO, it is very important that these are
monitored accurately and reported constantly. If you wait for the end of the
quarter to produce a hand-made report, the SLA is useless, as you only
know you broke it when it is too late.
You need automated and accurate monitoring of your service level, and this
means that the SLA has to be concrete and actionable. Fuzzy requirements that
can't be measured are just a waste of time.
This is a very important tool for SRE, as it allows to see the progression of
the service over time, detect capacity issues before they become outages, and
at the same time show how much downtime can be taken without breaking the
SLA. Which brings us to one core aspect of SRE:
Use error budgets and gate launches on them
If SLO is the minimum rate of availability, then the result of calculating 1 - SLO is what fraction of the time a service can fail without failing out
of the SLA. This is called an error budget, and you get to use it the way you
want it.
If the service is flaky (e.g. it fails consistently 1 of every 10000 requests),
most of that budget is just wasted and you won't have any margin for launching
riskier changes.
On the other hand, a stable service that does not eat the budget away gives you
the chance to bet part of it on releasing more often, and getting your new
features quicker to the user.
The moment the error budget is spent, no more launches are allowed until the
average goes back out of the red.
Once everyone can see how the service is performing against this agreed
contract, many of the traditional sources of conflict between development and
operations just disappear.
If the service is working as intended, then SRE does not need to interfere on
new feature launches: SRE trusts the developers' judgement. Instead of
stopping a launch because it seems risky or under-tested, there are hard
numbers that take the decisions for you.
Traditionally, Devs get frustrated when they want to release, but Ops won't
accept it. Ops thinks there will be problems, but it is difficult to back this
feeling with hard data. This fuels resentment and distrust, and management is
never pleased. Using error budgets based on already established SLAs means
there is nobody to get upset at: SRE does not need to play bad cop, and SWE is
free to innovate as much as they want, as long as things don't break.
At the same time, this provides a strong incentive for developers to avoid
risking their budget in poorly-prepared launches, to perform staged
deployments, and to make sure the error budget is not wasted by recurrent
issues.
That's all for today. The next article will continue delving into how traditional tensions between Devs and Ops are played in the SRE world.
Comment
1 - SLO is what fraction of the time a service can fail without failing out
of the SLA. This is called an error budget, and you get to use it the way you
want it.
If the service is flaky (e.g. it fails consistently 1 of every 10000 requests),
most of that budget is just wasted and you won't have any margin for launching
riskier changes.
On the other hand, a stable service that does not eat the budget away gives you
the chance to bet part of it on releasing more often, and getting your new
features quicker to the user.
The moment the error budget is spent, no more launches are allowed until the
average goes back out of the red.
Once everyone can see how the service is performing against this agreed
contract, many of the traditional sources of conflict between development and
operations just disappear.
If the service is working as intended, then SRE does not need to interfere on
new feature launches: SRE trusts the developers' judgement. Instead of
stopping a launch because it seems risky or under-tested, there are hard
numbers that take the decisions for you.
Traditionally, Devs get frustrated when they want to release, but Ops won't
accept it. Ops thinks there will be problems, but it is difficult to back this
feeling with hard data. This fuels resentment and distrust, and management is
never pleased. Using error budgets based on already established SLAs means
there is nobody to get upset at: SRE does not need to play bad cop, and SWE is
free to innovate as much as they want, as long as things don't break.
At the same time, this provides a strong incentive for developers to avoid
risking their budget in poorly-prepared launches, to perform staged
deployments, and to make sure the error budget is not wasted by recurrent
issues.
That's all for today. The next article will continue delving into how traditional tensions between Devs and Ops are played in the SRE world. Comment
TLDR: With the help of Helmut Grohne I finally figured out most of the bits
necessary to unshare everything without becoming root (though one might say
that this is still cheated because the suid root tools
The 12 member nations of the Trans-Pacific Partnership pact have
agreed to prohibit demands that companies reveal software source
code*, a step that appears aimed at curbing efforts by China to
gain access to this sensitive information, The Yomiuri Shimbun
has learned.
Source code is the confidential information for software and is
a blueprint embedded in many commonly used products, such as
vehicles, mobile phones and home appliances. Source code is
usually tightly guarded because it conatins commands that make
using the software easier.
China requires foreign companies operating there to hand over
source code, a move that has sparked sharp criticism from many
countries. Observers believe the decision by TPP participants
to ban demands to reveal this code is intended to restrain
China's move.
The TPP's electronic commerce chapter in principle prohibits the
12 member nations from demanding access to source code for
mass-produced software. According to the Economy, Trade and
Industry Ministry, the Japan-Mongolia economic partnership
agreement signed in February contains a stipulation banning
demands for such information, but there are very few other
examples around the world.
Japan, the United States and other nations that are home to many
information technology companies want to make the stipulation
effectively a global standard, and they are considering whether
to incorporate such a condition in economic partnership
agreements that will be inked in the future.
Source code is an important corporate secret for development
firms.
*Source code A software program written in a language a computer
understands. As well as containing expert details about the
unique functions of the product, the software is essential for
fixing glitches and making improvements. Hackers have attempted
to access source code because gaining this information would make
it easier to create viruses that could exploit any software
defects. In the software business, it is rarely made public, as
it is considered a corporate secret.
Following up on
I rarely watched TV online when I was located in the UK, but now I've moved to Finland with appalling local TV choices it has become more common.
The biggest problem with trying to watch BBC's iPlayer, and similar services, is the location restrictions.
Not a huge problem though:
One of the packages that got





Note: 2015/10/16: I need to add some links but I won t delay this more, posting now, will edit later.
Summer ended long time ago, but believe me, I m still catching up with all the things that I began in June/July, all the things I left in August when I went holidays, and more things that appeared in August and September.
This is a long overdue post, I hope you bear with me for waiting so long, and writing (now) so long too!
June
In June, I was 100% sure that I would not attend 
Now that the tsunami that followed my
In particular do I want to answer to two blogs: Lars Wirzenius
What happened in the