I originally posted this on our development blog over at MSNBC.
Are you familiar with feedback loops? A feedback loop is a loop in which information encountered by the system is fed back into the system, and the system can then respond to it. You’ve probably seen a diagram similar to this:
Feedback loops are very important for a system since they allow the system to evolve and adapt to change. A great example of this seen in nature is the human body’s temperature regulation:
Without feedback, the body would have no way of making the minor adjustments it needs.
Feedback loops turn out to be extremely valuable in software development as well. Agile development practices all relate to the notion of a feedback loop:
- Unit tests
- Pair Programming
- Stand-up meetings
- Code reviews
You may notice something about these practices; The feedback loops are very fast. Feedback loops that are slow are of little value, because by the time you respond to one set of feedback, the next may have already arrived, which would render your initial response meaningless.
In the example of body temperature regulation, it’d be pretty useless to have the body react with sweat hours after a temperature change occurs.
We want feedback loops to be as fast as possible so that we can find out whats working, whats not working, and what needs to change right now.
- Change something
- Find out how it went
- Learn from it and adjust
- Rinse and repeat
Automation is a great way to achieve our feedback loop goals in software development. In addition to the agile practices above, we can also try to implement the following whenever possible:
- Continuous integration
- Increasing the frequency at which code is released
- Automated acceptance tests
- Automated code analysis
A set of tight feedback loops like these can allow us to respond to change rapidly. Every time someone checks in code, the automation can tell us immediately whether we are in a healthy state, which will allow us to immediately correct any problems if they occur.