Skip to main content

Relationships Between The DevOps Handbook and Systems Thinking

I've recently finished reading The DevOps Handbook, and Thinking in Systems, and have just started reading The Fifth Discipline. Below are a few of my thoughts after reading them.

The DevOps Handbook is a really great book and I highly recommend anyone participating in software development to give it a read. In the book, the authors describe the Three Ways (aka principles):
  1. Flow
  2. Feedback
  3.  Continual Learning and Experimentation

The first way focuses on getting software through the work stream, the second way focuses on getting feedback, and the third way focuses on organization learning. 

The DevOps Handbook's visualization of the 3 ways reminds me of systems diagrams in Thinking in Systems by Donella Meadows. 


Stuart Rimell has a nice 2 part post on systems thinking in software development, that draws on ideas in Thinking in Systems (Part 1, Part 2)

After reading The DevOps Handbook and Thinking in Systems, I got curious about systems thinking, and how that applies to software development, and more broadly how it applies to business. 

I did a bit of research, and found The Fifth Discipline by Peter Senge. So of course I ordered a copy. I'm only halfway through, but it seems to me The DevOps Handbook is the application of The Fifth Discipline to software development. 


The 5 disciplines are
  1. Personal Mastery - Personal mastery is a discipline of continually clarifying and deepening our personal vision, of focusing our energies, of developing patience, and of seeing reality objectively
  2. Mental Models - Mental models are deeply ingrained assumptions, generalizations, or even pictures of images that influence how we understand the world and how we take action.
  3. Building Shared Vision - Building shared vision - a practice of unearthing shared pictures of the future that foster genuine commitment and enrollment rather than compliance.
  4. Team Learning - Team learning starts with dialogue, the capacity of members of a team to suspend assumptions and enter into genuine thinking together.
  5. Systems Thinking - The Fifth Discipline that integrates the other four.
Principle 4, Team Learning, seems like the most difficult principle of them all. Dialogue here refers to David Bohm's idea of dialogue. Bohm identifies three basic conditions necessary for dialogue:
  1. All participants must "suspend" their assumptions, literally to hold them "as if suspended before us"
  2. All participants must regard one another as colleagues
  3. There must be a "facilitator" who "holds the context" of dialogue
In my experience, being able to put ideas out there to be examined without the conversation eroding into attacks / defensiveness is very difficult. Maybe the ability to do this is what makes a great team.

The Fifth Discipline might be one of the best business books I have ever read. It ties together lean manufacturing concepts with systems thinking. I'm adding Systems Thinking to my ever growing list of topics to study.

Peter Senge: Introduction to Systems Thinking


It seems to me that the learning organization lies at the heart of truly successful software companies, and DevOps practices as laid out the the DevOps Handbook foster the kind of learning necessary for success.

Two other books I've read are somewhat related to the link between DevOps and Systems Thinking

Holacracy: The New Management System For a Rapidly Changing World by Brian Robertson
Holacracy is a revolutionary management system that redefines management and turns everyone into a leader.
Holacracy distributes authority and decision-making throughout an organization, and defines people not by hierarchy and titles, but by roles. Holacracy creates organizations that are fast, agile, and that succeed by pursuing their purpose, not following a dated and artificial plan.
This isn't anarchy it's quite the opposite. When you start to follow Holacracy, you learn to create new structures and ways of making decisions that empower the people who know the most about the work you do: your frontline colleagues.
Reinventing Organizations: A Guide to Creating Organizations Inspired by the Next Stage of Human Consciousness by Frederic Laloux.
In this groundbreaking book, the author shows that every time humanity has shifted to a new stage of consciousness in the past, it has invented a whole new way to structure and run organizations, each time bringing extraordinary breakthroughs in collaboration. A new shift in consciousness is currently underway. Could it help us invent a radically more soulful and purposeful way to run our businesses and nonprofits, schools and hospitals? 
Both Holacracy and Reinventing Organizations are about designing organizations to tap into the potential of the people, to bring humanity and compassion to the workplace. Companies organized in this way are referred to as Teal Organizations. Is this not another application of systems thinking?

Comments

  1. That is very interesting; you are a very skilled blogger. I have shared your website in my social networks! A very nice guide. I will definitely follow these tips. Thank you for sharing such detailed article.
    Devops Online Training

    ReplyDelete

Post a Comment

Popular posts from this blog

Generating Java Mixed Mode Flame Graphs

Overview I've seen Brendan Gregg's talk on generating mixed-mode flame graphs and I wanted to reproduce those flamegraphs for myself. Setting up the tools is a little bit of work, so I wanted to capture those steps. Check out the Java in Flames post on the Netflix blog for more information.

I've created github repo (github.com/jerometerry/perf)  that contains the scripts used to get this going, including a Vagrantfile, and JMeter Test Plan.

Here's a flame graph I generated while applying load (via JMeter) to the basic arithmetic Tomcat sample application. All the green stacks are Java code, red stacks are kernel code, and yellow stacks are C++ code. The big green pile on the right is all the Tomcat Java code that's being run.


Tools Here's the technologies I used (I'm writing this on a Mac).
VirtualBox 5.1.12Vagrant 1.9.1bento/ubuntu-16.04 (kernel 4.4.0-38)Tomcat 7.0.68JMeter 3.1OpenJDK 8 1.8.111linux-tools-4.4.0-38linux-tools-commonBrendan Gregg's Fla…

Multi Threaded NUnit Tests

Recently I needed to reproduce an Entity Framework deadlock issue. The test needed to run in NUnit, and involved firing off two separate threads. The trouble is that in NUnit, exceptions in threads terminate the parent thread without failing the test.

For example, here's a test that starts two threads: the first thread simply logs to the console, while the other thread turfs an exception. What I expected was that this test should fail. However, the test actually passes.

readonly ThreadStart[] delegates = { () => { Console.WriteLine("Nothing to see here"); }, () => { throw new InvalidOperationException("Blow up"); } }; [Test] public void SimpleMultiThreading() { var threads = delegates.Select(d => new Thread(d)).ToList(); foreach (var t in threads) { t.Start(); } foreach (var t in threads) { t.Join(); } }
Peter Provost posted an article that describes how to make this test fail. It works…

Basic Web Performance Testing With JMeter and Gatling

Introduction In this post I'll give a quick way to get some basic web performance metrics using both JMeter and Gatling.

JMeter is a well known, open source, Java based tool for performance testing. It has a lot of features, and can be a little confusing at first. Scripts (aka Test Plans), are XML documents, edited using the JMeter GUI.  There are lots of options, supports a wide variety of protocols, and produces some OK looking graphs and reports.

Gatling is a lesser known tool, but I really like it. It's a Scala based tool, with scripts written in a nice DSL. While the scripts require some basic Scala, they are fairly easy to understand and modify. The output is a nice looking, interactive, HTML page.
Metrics Below are the basic metrics gathered by both JMeter and Gatling. If you are just starting performance testing, these might be a good starting point.

Response Time – Difference between time when request was sent and time when response has been fully received

Latency –…