If you always write perfect code, know how to predict the future and don’t care how your money is spent, you don’t need to read this. The rest of you need to know this stuff.
What is a feedback loop?
A feedback loop is the path your assumptions travel before they are validated or invalidated. Naturally you will have different feedback loops for different assumptions. In this post we will discuss three levels of feedback loops that should be easily recognizable. They are:
The unit test loop
Your assumption is that the code you have written does work. A fast way to validate this is to have a harness of units test that can give you this feedback fast.
The functional test loop
The functional test loop helps you verify that the implemented solution fulfils the tasks acceptance criteria. This is traditionally done by testers working their way through test scripts, but as the tools are getting better there are ways to automate this as well.
The from idea to validated learning loop
This is the loop surrounding the whole of your product/project. If you have validated that your solution works as intended, the only thing you need to worry about is that the intention solves a problem worth solving. This loop is addressed in the Lean Startup methodology.
Why should feedback loops be optimized?
Ok, now we have identified three types of feedback loops and will look into reasons for optimizing them. Optimization of a feedback loop usually means making it shorter in time, that way you will learn faster, but it’s up to you to figure out what optimization means for your loops. From my experience with facilitating team retrospectives in the past 5 years it always, without exception, emerge some kind of frustration from the team that can be related to long feedback loops.
The unit test loop
The obvious reason, that most developers realized a long time ago, is that it´s much cheaper to correct errors while you are sitting there working on the problem and not several weeks later. That’s why we love TDD, right?
The functional test loop
As humans we are extremely bad at predicting the future. That´s why the time from specification to implemented solution should be as short as possible. We all know that changes are bound to happen, so why not prepare for them by limiting the possibility of changes ruining the gold plated specification you spent months documenting.
The from idea to validated learning loop
From an investors perspective I want to optimize this loop because I need to have enough information to decide if we should keep founding or kill this product, project or function.
- And don’t forget the Lean principle of optimizing the whole. You need to spend your resources optimizing the right feedback loop(s). Spending all your money on 99% unit test coverage makes no sense if you are solving a problem not worth solving.
How to optimize feedback loops?
By now we all agree that feedback loops should be optimized. Now we will discuss some techniques to help you get there.
The unit test loop
- TDD (Test Driven Development) to get yourself ready for fast feedback.
- Use automated unit test tools to make your code base ready for giving you fast feedback.
- Set up a continuous integration server to run your tests on commits to make sure your system gives you fast feedback.
The functional test loop
- Focus on “old fashion” collaboration and communication in cross functional teams and make sure your customer is present.
- Use Kanban with WIP limits to help your team focus on throughput.
- Use BDD (Behavior Driven Development) to write acceptance criteria as runnable tests.
- Read up on the concept of flow in software development by Tom Bang.
The from idea to validated learning loop
- Lean Startup methodology will help you here. It suggest that you verify that you have a problem worth solving before you write a single line of code. When you finally start developing your product, make sure you deploy the MVP (minimum viable product) first. An MVP is the minimal amount of functionality you need to get more quantitative feedback, and even more important… Get paid.
- When improving your product use small Build-Measure-Learn cycles and evolve from there.
“The only way to win is to learn faster than anyone else.” – Eric Ries
“The only way to learn faster is to have more efficient feedback loops than anyone else.” – Rune Larsen
To get there you need to recognize your loops, and have an understanding of why and how they can be more efficient. Good luck!