Folding Together DDD and Agile
After a decade of heavy process, the Agile revolution of the late ’90s threw off the dead hand of big upfront design. The bloody purge that followed was needed! There were unintended consequences. Too many teams interpret “Agile” as a permit to not think about design. But if they have ambitious goals, Agile teams need more than standup meetings and iterations. Many teams get off to a quick start, building lots of features in early iterations, but end up with a “Big Ball of Mud”. Without clear and well-structured code, they cannot sustain their pace and also put themselves at risk of, one day, encountering a critical feature they simply cannot deliver. Without the common understanding between developers and stakeholders that is forged in domain analysis, one of the greatest benefits of iteration, the deepening communication about what the software should do and how it should do it, is never realized. We must not return to the “Analysis Paralysis” but interpreting “Do the Simplest Thing” as “Do the Easiest Thing” doesn’t work either. This talk will consider ways of incorporating modeling and design into the iterative process in a lightweight way that increases communication with stakeholders and decreases the likelihood of painting ourselves into corners, without returning to the dead-hand of the analysis phase.