Modern Control Systems – The Secret to Understanding Agile
We make a simple promise to you, read and understand this overview of modern control theory and you will understand how agile software development works, in a profound way. You will understand it better than many people who lecture on Agile techniques at conferences.
Open Loop Systems
We begin with a simple description of open loop systems. An open loop system is a modern control system without feedback. “What is that?” you ask. Fortunately, it is easy to understand, it is as easy as making toast.
A modern control systems can be described in three simple parts:
Part 1: Desired Output
You begin with an idea of a specific output you desire to create. If you are creating a piece of toast then you being with an image of what a perfect piece of toast may look like to you.
Having the idea of the desired output is the first part in modern control theory. You need some idea of what you want so you can discover a way to create it. That leads us to:
Part 2: Process
After you have a desired output you create a process to give you that desired output. If we want to make a process to give us the perfect piece of toast it will likely contain the following steps:
1. Acquire bread, remove from package.
2. Put bread into toaster.
3. Set desired darkness.
4. Press down control lever lowering toast into toaster and engaging heating elements.
5. Wait until toast pops up.
6. Remove toast.
You implement this process to create your desired output, having the desired output in mind helped us describe this process.
[Desired Output] →[Process]
Simple, even a child can do it. In fact, making toast is one of those childhood delights.
That leads us to:
Part 3: Desired Output
At the end of the toasting cycle we removed the perfect piece of toast and enjoy. Our entire process looks like the following:
[Desired Output] →[Process]→[Actual Output]
In modern control systems we call this an “Open Loop” control. It is perhaps better described as a “No Loop” control. No loops because there is no feedback in this system. You set the controls, wait, and whatever you get is whatever you get. Hopefully, the actual output is close to the desired output and you have the perfect piece of toast.
Burnt Toast
Sometimes, however, the actual output looks more like this:
What happens if you accidentally create a piece of toast that looks like this?
Well, you can try to do additional processing and scrape the burnt part off in the sink. But that doesn’t create a very compelling piece of toast. The typical solution is to toss the toast into the trash and start the whole process all over again, setting the darkness knob on the toaster to a slightly lighter level.
The process we outlined for making toast contains no feedback (no loops). Step 1, led to step 2, led to step 3,… and so on.
1. Acquire bread, remove from package
2. Put bread into toaster
3. Set desired darkness control
4. Press down control lever lowering toast into toaster and engaging heating elements
5. Wait until toast pops up
6. Remove toast
Closes Loop Systems
Nowhere in the previous system do we use information while the toast is toasting to understand how well our process is working. What might it look like if we try to gather information while our toast is toasting?
What do you do? You ADD A FEEDBACK LOOP to prevent your toast from burning.
How do you do this? You start peering into the top of the toaster to see how your toast is doing!
If the toast is getting too dark, you pop it out! Even children know how to do this. You get FEEDBACK by looking at the toast. You COMPARE what you OBSERVE with your idea of your desired output and you adjust the toaster CONTROLS to try to force the toaster to give you a perfect piece of toast. The steps look something like this:
2. Put bread into toaster
3. Set desired darkness control
4. Press down control lever lowering toast into toaster and engaging heating elements
In control theory these steps are labeled observe, compare, and control:
Observe: Watch the toast with your eyes