Blogs about Jazz

Blogs > Jazz Team Blog >

DevOps Culture – Managing friction

Tags: ,

Friction

In a previous post about retrospectives and continuous improvement I described how we track “pain points” which are issues that block or hinder our ability to develop a specific development capability. Another way to think of pain points is that they are sources of friction.

In physics, friction is a force that impedes movement. If you roll a ball along a flat and level surface it will eventually stop as a result of rolling friction.  A ship sailing through a body of water is slowed by friction caused by the movement of the hull in the water.  An aircraft flying through the air is slowed by the friction of air resistance. There’s also the idea that friction can impede teams and projects. In his book, On War, Prussian military strategist, Carl von Clausewitz, wrote, in a chapter entitled Friction in War:

“Everything is very simple in war, but the simplest thing is difficult.  The difficulties accumulate and end by producing a kind of friction that is inconceivable unless one has experienced war…
Countless minor incidents – the kind you can never really foresee – combine to lower the general level of performance, so that one always falls far short of the intended goal…
Friction is the only concept that more or less corresponds to the factors that distinguish real war from war on paper….
Friction, as we choose to call it, is the force that makes the apparently easy so difficult.”

General von Clausewitz was making the point that in war, even the most simple of tasks can be difficult due to a multitude of small unaccountable things which can be collectively referred to as “friction.” So friction can hinder or block progress and the execution of plans. In software development there are many potential sources of friction. There’s social friction that can occur when people don’t work well together. There’s friction in processes when there are too many rules or approval required to perform a task. There’s friction in tooling when different tools don’t work well together or a workflow is too complicated or bug-ridden. When we encounter the friction only once, it might not be such a big deal but when many people have to perform a task repeatedly, like running a build many times a day, even a little bit of friction can result in a huge amount of pain across a project.

Not enough friction is bad too

If you’ve ever tried to walk on ice without spikes or any other special traction aids under your footwear, you’ll know that it’s quite difficult to do. Furthermore, it’s also quite easy to fall over. You may also know that sometimes if you fall one way,  let’s say forward, that in an effort to regain your balance you may unintentionally over-correct and find yourself falling backwards. In an effort to then correct that fall you may again over-correct and find yourself falling forward again and so it goes on until you end up in the air and then flat on the ice. The problem here is that there’s not enough friction and that can lead to problems like the “hunting” that has you going back and forth trying to find the solution to a problem. A similar example is when there’s a bug and someone fixes the bug but there’s no friction in the process that requires their code changes to be checked by anyone else or certain kinds of tests to be run. Let’s say they fix the bug but in the course of doing so they create another bug. They then try to fix that and create another bug and so forth. That’s an example of “hunting.”

What’s interesting about friction is that while it generally creates difficulties when present in large quantities, eliminating it entirely can create a whole different set of problems.  While rolling friction will slow down a rolling ball, without static friction, the ball would slide and not roll at all.  Adhesive friction between tires and the surface of a road allows the tires to maintain traction on the road, thus giving the driver the ability to accelerate, slow down and negotiate turns.  Without traction, the wheels would spin and the vehicle would go nowhere.  Static friction ensures that objects such as those sitting on your shelves and your desk don’t slide off surfaces that aren’t perfectly level.  Static friction also allows athletes to run or any of us to walk by converting a backwards push of feet along the ground into forward motion.  Without that friction people would fall over as if they were walking on ice.

So the trick, in many cases, is to achieve just the right amount of friction. In some cases you may be able to eliminate the source of friction but sometimes that can be a bad thing.

Managing friction

Managing friction is not only a long-term effort but an ongoing one of continuous improvement.

  1. Identify sources of friction. If you’re trying to achieve agility across your entire project throughout all phases of the development cycle, you’re sure to find many, many sources of friction.
  2. For each source of friction, decide whether it should be eliminated entirely or just reduced. As you improve over time, use some kind of metric to measure improvement.
  3. Be organized about this effort. It definitely helps to use work items or something similar to track the effort, identifying the issues and then the various work efforts to address each issue.

Good luck in your quest to make things move more smoothly in your project!

Adrian Cho
Program Director, Continuous Delivery Evangelist
IBM Rational
Author of The Jazz Process: Collaboration, Innovation, and Agility