Sunday, March 20, 2016

OO Bootcamp: Day 4 + 5

The Cynefin Framework

Dave Thomas created this framework to as a way of classifying different types of problems and the approach to finding solutions to those problems. We know that different problems require different approaches. What's unique about this framework is that Dave buckets all problems into one of four main types: obvious, complicated, complex, and chaotic.



We went through each type, discussed the characteristics and approaches as well as used examples of real problems that fit that type. 

Obvious
  • Cause and effect in this system is well defined. The approach to solving these problems is to understand what the problem is, categorizing the problem, and then responding by using a best practice associated with that problem. 
An example of a problem that is obvious is how to convert celcius to farenheit. The rules for performing such a conversion is well defined. It's just an equation and one in which the causes and effects are clear. Each input produces a unique output. 

Complicated
  • The cause and effect in this system is complex and requires analysis by an expert. We can understand the problem but it requires analysis to understand what solutions are appropriate. There is no clear best practice because because the set of solutions depends on the analysis. Instead, there are good practices.
Building a ordinary house. There is no one way to build a house. Someone with expertise needs to assess the environment and offer a number of solutions. Given the solutions, it's usually clear what the effects are even though they may not be very obvious. 

Complex
  • The causes may be defined but it's not clear what the effects are in advance. The best we can do is to probe the system to look for patterns. Once the problem is identified, we can move towards devising solutions for it. Even with the solutions, the effects are not defined. 
Netflix recommendation engine. How do you know if person A will like the movie you recommend based on the new recommendation algorithm? You don't. There's no guarantee. The same is true for stock picking. Which stock will yield the highest return this quarter? Given any solution, the effects (gain? loss?) cannot be predicted consistently.

Chaotic 
  • We don't know what the problem is. The problem can be anything. It's unforeseen and unexpected. Causes are not clear and the effects are not clear. Our only option is to act when the problem occurs in the system and then respond.
Emergency and crisis situations. When a power plant blows up, there may be a million different problems. Our job is to do what must be done and then work on identifying the problems that need to be addressed. 

Fred argues that most software projects are of the complex type because we're ultimately writing software for people to use. People change. Not only that, but the use often occurs in some business domain which often comes with a great degree of uncertainty. 

The software development approach that best exemplifies the probe-sense-respond approach that Dave argues is best suited for complex problems is the task cycle. By keeping design and coding short, we're able to iterate quickly and learn a lot about a domain. This is the world of A/B testing. Because we're able to ship rapidly and change rapidly, we are more likely to approach a moving target than if we just spend a huge amount of time upfront (waterfall model) with the design and then implementing it in one go. That's treating software projects like complicated or obvious problems, which Fred argues is ineffective.  




No comments:

Post a Comment