Software patterns were the revolution of the '90s, and Agile methods and reefactoring appear to be the key idea of the current decade. This book stands squarely at the intersection.

Kerievsky observes that the early Patterns literature has a bias in favor of classical Design First methodology, and many people assume that patterns need to be carefully planned and designed before a product is implemented. This book argues the opposite case: patterns can emerge naturally through incremental refactoring. Kerievsky shows how refactoring steps can move gradually and safely from complex and arbitrary code to implement even such high-design methods as Visitor and Composite.

Like the ideas in Fowler's valuable Refactoring, Kerievsky's refactorings sometimes seems obvious. That's one of the points about refactoring: it takes a practice that everyone has always performed unconsciously and, by naming it, makes it visible. We've always had intuitive approaches, for example, to dealing with a large and complex hunk of procedural code that works today, and that needs a new feature. The Refactoring literature names the practices and so lets us think about them. We know we can do this; now, we can reflect on whether we can do it well.

More fundamentally, it's interesting to see how modern understanding of emergent complexity has moved from applied mathematics to engineering; in a real sense, Kerievsky's work recalls the spread of Darwin's ideas in 19th century engineering, literature, and art.