In the earlier posts in this series, I introduced Complex Adaptive Systems (CAS), and contrasted Scrum and Kanban from a CAS perspective. I also briefly touched on the idea of heuristics; in this post, I’ll expand on these ideas and explain why heuristics are advantageous for decision-making in complex systems like software development teams.
A heuristic is a guide that aids decision-making. It is not a set rule, but it is a rule of thumb. I use a simple set of heuristics at my local grocery store to accelerate my checkout process. If I have a basket of items, I will use the self-checkout. If I have a cart, I’ll look for the checkout line that has the least number of people in it. If two lines have the same number of people, I’ll choose the one with the fewest items. These guidelines are simple heuristics and we all use techniques like these, even if we’re not always aware we’re doing so.
Heuristics are powerful because they accelerate the process of making decisions. We don’t have to spend time assessing all the potential options, performing a cost-benefit analysis, and ranking alternatives. Instead, we employ a specific set of guidelines to quickly arrive at what we believe to be the best option.
Heuristics in Complex Systems
Why is this important and how does it relate to complex systems? In an earlier post, I noted how CAS are extremely sensitive to context. The specific ways in which the individuals in the system interact and the constraints that act upon them vary; the nature of these interactions also change over time, altering behavior within the system and its potential for change. This makes complex systems dynamic. To operate within them effectively, flexibility is needed.
Heuristics offer the necessary flexibility. Because heuristics are not set rules, they can be quickly tailored to specific contexts. I can adjust my grocery store heuristics based on circumstances. If I’ve got a bottle of wine in my basket, for example, I might opt for a checkout line over the self-checkout because I know that a cashier will be able to check my age and validate I’m over 21 faster than the attendant overseeing the self-checkout machines. If children are with me, I may look for the line with no candy, regardless of its length. Because I’m using heuristics, I remain sensitive to context and can tailor my decisions quickly and easily.
That’s the power of heuristics. They inform decisions without substituting for them. Heuristics enable human judgment by rapidly framing the problem and allowing our minds to focus on the specifics of the situation. This leads to quick decisions that factor invaluable contextual information without overly complicated and unnecessary rules.
Heuristics in Agile
What’s this got to do with Agile software development? Agile software teams make decisions every day. How can those teams ensure that these decisions happen rapidly and align with their overall goals? One way is to make sure they’re made collaboratively. If teams regularly talk about their work and the impediments they’re facing (like in the daily standup), then their collective knowledge and experience will be brought to bear. However, many decisions are made outside of those collaborative sessions. How can we ensure they’re made rapidly and reflect the team’s objectives?
Heuristics are the answer. By explicitly developing heuristics to guide their decisions, teams can make decisions more rapidly, ensure the outcomes align with their objectives, and leave room for individual judgment and creativity. An excellent heuristic at work in software development is the “rule of three,” a simple heuristic that suggests code can be copied twice, but should be refactored into a new procedure the third time it is used. Another common heuristic builds on the Agile principle emphasizing face-to-face conversation: whenever you have a question, ask it face-to-face; if that’s impossible, use a video conference; and if that’s not available, use the phone.
Try Them Out!
Explicitly defining heuristics can accelerate the decision-making in Agile teams. Because they are sensitive to context, heuristics can adapt to a variety of different circumstances; they won’t age and become obsolete like “agreements” or “rules.” Teams employing heuristics can make decisions more rapidly and be more confident that day-to-day decision-making aligns with their goals. By allowing team members to utilize their knowledge and skill, heuristics foster greater engagement and morale. They fit perfectly into a view of software development as a complex adaptive system.
Try defining some heuristics and see how they can improve the effectiveness of your team! Next in this series, I’ll write more about how you can improve the work of Agile teams by employing ideas from complexity.