Walking the architecture/design highwire
Donald Rumsfeld was right: it's the unknown unknowns that are the real killers in software development. Design decisions made too early amount to speculation without facts. But you must have architecture into account before you can do anything. Neal Ford's session at W-JAX 2013 talks about the tension in between architecture and design in agile projects, discussing two key elements of emergent design (Utilizing the load responsible moment and harvesting idiomatic patterns) and how to “de-brittlize” your architecture so that you can play nicely with others. This talk includes both proactive (test-driven development) and reactive (refactoring, metrics, visualizations, tests) approaches for discovering design, and discusses the use of custom attributes, DSLs, and other techniques for Utilizing them. The goal of this talk is to provide nomenclature, strategies, and techniques for allowing design to emerge from projects as they proceed, keeping your code in sync with the problem-domain.