1. Cynefin & Complexity Thinking
    1. Cynefin for Developers (Liz Keogh)
    2. How To Organize a Children's Party (Dave Snowden) - Video
  2. What is it
    1. Continuous, incremental design
      1. "mastering incremental design demands being equally prepared to improve or degrade the design at any time, depending on whether it's possible to incrementally improve" (Kent Beck)
      2. "every iteration advances the software's features and design in equal measure." (James Shore)
        1. 3 steps
          1. Create a simple design that solves only the problem you face at the moment,
          2. incrementally add to it as the needs of the software evolve
          3. continuously improve the design by reflecting on its strengths and weaknesses.
    2. Breakthroughs
      1. the design tends to improve in bursts
  3. Reasons to do this crazy thing
    1. design insights come from implementation
      1. "No matter how much design we did on its own, as soon as we began to express it in code, the design needed to change. We expressed it as the code telling us what the design wanted to be." (Ron Jeffries)
      2. "you cannot understand the full extent of the problem until you've implemented a nontrivial portion of the entire thing. . By deferring important architectural and design decisions until the last responsible moment, you can prevent unnecessary complexity from undermining your software projects." (Neil Ford)
  4. How can this work?
    1. enabling, complementary practices
      1. "[XP's] enabling practices of continuous integration, testing, and refactoring, provide a new environment that makes evolutionary design plausible." (Martin Fowler)
    2. Safe, small steps (Kent Beck)
      1. 1. Transmute risk into time
      2. 2. Optimize time
    3. harvesting "idiomatic patterns"
      1. One of the primary enablers of emergent design is the ability to see and harvest idiomatic patterns: processes, structures, and idioms that repeat in nontrivial ways within your code base (Neil Ford)