DevOps Blog

Get the RSS Feed

A Personal Reinterpretation Of The Three Ways

A note from Gene Kim:

Last year, I got an email from Tim Hunter that blew me away.  Among many brilliant things, he sent me a rewrite of The Three Ways, which are intended to be a set of principles from which you can derive all the observed DevOps patterns from.

When I read what he wrote, my jaw dropped.  It was like having a poet rewrite your dissertation thesis.  I’ve incorporated his language of Flow, Feedback and Continual Experimentation and Learning into all my talks now, and it will be incorporated into the next printing of “The Phoenix Project.”

I hope you all enjoy this as much as I did!

Hi! My name is Tim Hunter, known as @Thorrsson on Twitter (and just about everywhere else) and I would like you to join me on a bit of a journey. This journey brings us to my current state in IT and reveals bits about how I came to this reinterpretation of  the Three Ways that Gene Kim and the team on the Phoenix Project defined.

I have worked in various facets of IT since the 90’s, starting off in a dialup ISP, building and selling systems, working with the sysadmins on our internal servers and helping people who had no idea why they wanted to be on the internet get onto the internet. This was my first taste of the Flow of Value. The faster we got our custom built $3000 PCs out the door, the more money we made, etc.

Next I spent a good deal of time working on, and then helping run a call center for a large company. Our ‘value’ was realized at the end of a call when the systems were working again, our Work In Progress was the call itself, we had 3 to 20 minute cycles on average. At one point, the company signed an agreement to support a Food Chain’s Servers and Point of Sale terminals. Apparently, we decided that our SLA was 7 minutes for every call (decided by some sales person).

This should have been OK, as some calls were resolved quickly, others not so much, but we could probably average it out to 7 minutes. Unfortunately the customer had just deployed an extremely buggy back end system ‘upgrade’ that coincided with our takeover of support. Our cycles were averaging 40 to 50 minutes! We had a backlog at almost all times, and there was no way we could average that down to 7 minutes (we eventually got to know the bugs, and could resolve them much faster, but I don’t think we brought our average below 15 minutes).

As a company, we paid penalties like mad for this, and eventually the customer took support back internally. This particular position made me realize that even if your pipelines are sized appropriately, Flow is affected by many different factors.

Now I will jump to the last couple of positions in my career (ya.. there was a bunch between this call center and now, but not as relevant as these next two)

I took a job as a network admin for an automation company — we built robots… (ya I know.. cool isn’t it?) Our robots were self-contained assembly lines most of the time. They had their own networking gear, they had raw material inputs and something cool came out the other end. The really neat part was watching the Toolers and the Developers working together to get the Value Flow just right inside of each of these machines. They would build the machine to spec, write the PLC code to make it do what it needed to, and then they spent a long time tuning the systems to address bottlenecks and constraints, to make sure that the Inputs didn’t back up at any time, and that we had the right input and output rates. Flow and Feedback were king, and no one silo or team was elevated over the other, everyone worked together to get it right.

Next I joined a pure Development company, a 7 year old start up working in Knowledge Graphs (Interest graphs… 7 years ago!) We had a Disruptive product that already had some time to mature, until the market realized that personalization and interest graphs were going to be our Next Web Technology. Then we needed to increase our Flow rates. It was with this company that I started trying to break down the silos and move past the Way of Flow. When I started Development was Development and Ops were the guys who said ‘No’ and worried about stability. QA was the gateway to OPs and we spent hours troubleshooting deployments. With a lot of hard work from all of our teams we brought deployments down from most of a day to under 30 minutes. (There were some edge cases that were faster or slower… but on average…). We recognized our constraints and elevated them to the best of our abilities, near the end of my time with this company, we had OPs attending the Devs Standups, we (Ops) knew about infrastructure affecting changes before they were checked in, and had an environment ready to support those changes. Our Developers and Business folks were all on the appropriate mailing lists to know about outages when they happened. We were continuously deploying 2 separate environments (Not prod though) and iterating much faster on our experiments.

When the Phoenix Project was about to release, I received the preview of the book from IT Revolution Press, and found myself thinking (on numerous occasions) “I have been Bill in this situation before” or “I remember <Name of Co-Worker> going through something just like this”. A couple of days before the release(if memory serves), Gene gave a Webinar for BMC (and a free Kindle version of the book!), and I came to the realization that the takeaways from this book mirrored things that I had learned along the way, and that I needed to know everything I could about the Three Ways. I stalked Gene for a bit, finding all of the articles I could that referenced the Three Ways. I found presentations he gave at various conferences and articles written for IBM, I even found the skeleton pages for the detailed posts on the Second and Third Ways that had not been written yet :D. Every single one of these rang true, so I reached out to Gene, and introduced myself. Giving a similar, if not more detailed, account of what I have been through in my career and asking if he had anything else on the Three Ways that I could read. After a couple of emails back and forth and I was consuming even more about the Three Ways.

It was at that point that I decided that I needed to socialize this with the company I was working for, and started writing a summary of the Three Ways in my own words, with my own past influencing the descriptions. I iterated on this document for a month or so, coming back to it and tweaking it, and then shared it with Gene, asking if he could sanity check it in case I was off base anywhere. Now, Gene had just released a bestseller, and was running around promoting it, so it took a while before he got to it, though when he did, I found some amazing tweets about the doc (I will just post the public one here):

During this time, I decided to take a new job, and move my family 3800 miles from home, but I still found a bit of time to spend chatting with Gene about this document. We hacked at it a little, and Gene asked if I would like to post it here in a guest blog post, so here we are.

If you made it this far, awesome.. the best part is coming up now. Here is the (barely) modified Three Ways that I sent to Gene in February and we cleaned up a bit in May.

The Three Ways: A Reinterpretation

The Three Ways describe values that define process and procedures as well as interactions. From learning The Three Ways we can adjust our interactions and our philosophies to help the entire organization win.

 

The First Way: Flow

The First Way is the way of Flow.

It places Dev as the business representative and Ops as the customer representative, with the value flowing in one direction (from the business to the customer). When we can think as a system we can focus clearly on the business value that flows between our Business, Dev, Ops and the end users. We can see each piece as it fits into the whole, and can identify its constraints. We can also properly define our work and when we can see and think in terms of the Flow of our system, we see the following benefits:

  • increased value flow due to the visibility into what it takes to produce our end product

  • our downstream step always gets what they need, how they need it, when they need it

  • faster time to market

  • we bring Ops in earlier in the development process, letting them plan appropriately for the changes that Dev will be making (because we know that all changes can affect how our product is delivered) which leads to less unplanned work or rushed changes

  • because work is visible, Ops can see the work coming and better prepare
  • We can identify and address constraints or bottleneck points in our system

  • We don’t let a defect get passed discovery, we ‘stop the line’ and do not push that problem forward.

 

The Second Way: Feedback

The Second Way is the way of Feedback.

It adds a backward facing channel of communications between OPs and Dev. It enforces the idea that to better the product, we always need to communicate. Dev continually improves as an organization when it better sees the outcomes of it’s work. This can be small (inviting the other Tribes to our stand ups) or it can be larger (Including Dev in the on-call rotation, tools development, architecture planning and/or incident management process) But to truly increase our Flow and improve the business value being delivered to the customer our Tribes need to know ‘what happens’, ‘when it happens’. When we increase our Feedback and create a stable Feedback loop we see the following benefits:

  • Tribal knowledge grows, and we foster a community of sharing

  • With sharing comes trust and with trust comes greater levels of collaboration. This collaboration will lead to more stability and better Flow

  • We better understand all of our customers (Ops as a customer, Dev as a Business, but especially our end users, to whom we deliver value.)

  • We fix our defects faster, and are more aware of what is needed to make sure that type of problem doesn’t happen again

  • We adapt our processes as we learn more about the inner workings or our other Tribes

  • We increase our delivery speeds and decrease unplanned work

 

The Third Way: Continual Experimentation And Learning

The Third Way is the way of Continual Experimentation and Learning.

When we have achieved the first Two Ways we can feel comfortable knowing that we can push the boundaries. We can experiment, and fail fast, or achieve greatness. We have a constant feedback loop for each small experiment that allows us to validate our theories quickly.

When we increase our Experimentation and Learning we see the following:

  • we fail often and sometimes intentionally to learn how to respond properly and where our limits are

  • we inject faults into the production system and early as possible in the delivery pipeline
  • we practice for outages and find innovative ways to deal with them

  • we push ourselves into the unknown more frequently and become comfortable in the uncomfortable

  • we innovate and iterate in a ‘controlled’ manner, knowing when should keep pushing and when we should stop

  • our code commits are more reliable, and production ready

  • we test our business hypotheses (at the beginning of the product pipeline), and measure the business results

  • we constantly put pressure into the system, striving to decrease cycle times and improve flow

  • Paul Ryan

    Great statement on the “Three Ways”. Thanks for the reinterpretation I find in helpful to see it put so succinctly.

    I think the part that really stands out for me is the way you’ve described the interaction in the third way beyond just a traditional software agile perspective but rather as a team experimentation methodology that feels so much like lean analytics. It’s making me go back and think that maybe there’s a key metric for the business value that could be driven from this experimentation.

    Again thanks for the great post.

  • Don Stringham

    This explanation or re-casting of the “Three Ways” is excellent. Met Gene at Velocity and the principles he teaches is helping us transform DevOps at FamilySearch.org.

  • Manisha Arora

    Very clear and simple explanation of the concept. What I have found through my years of interaction with enterprise dev and ops is that while there is good intention to implement this, the institutional process of roll-out, which involves rolling out big across all slows things down. There are very few enterprises which pick a small project/product and decide to apply the new principles. Wish more took this approach…

  • Rob

    Can you give a hypothetical example of a company that has mastered the First Way, but not the Second Way? What specifically does the Second Way company do that the First Way company doesn’t do? What problems do the First Way company encounter that the Second Way company is immune to?

    Bonus points if you can also do this exercise with the Second and Third Way.

    Thanks! :)

Sign up for the IT Revolution Newsletter and get our whitepaper,
The Top 11 Things You Need To Know About DevOps.

We won’t share, sell or spam you. –Gene Kim