Shai is a founding member of Underscore, the Israeli Scala user group, and has co-organized the 2013 and 2014 Scalapeno Israeli Scala conference. He spends his spare time making music, baking bread and cooking.
Even though Agile has been around for more than 15 years, many software organizations still practice Big Design Up Front. A lot of focus is put on the initial development aspect, before the first delivery, and little attention is given to the maintenance phase of the software system. With more and more organizations shifting to SaaS models, creating long-lived Internet systems that aren’t forgiving to downtimes or cumbersome data migrations, maintenance becomes much more important and critical to the overall design of the system than the initial development.
Agile offers a different, Emergent method to design software, with small iterations that, when combined with continuous delivery and learning, results in a design that’s much more adaptive to changing requirements. Taken to the extreme, we shorten the initial development phase to a minimum and focus mostly on iterative maintenance steps.
However, the conditions required to facilitate Emergent Design require that the development team refrain from over-engineering and YAGNI violations – two problems that are prevalent in the software industry, especially with less-experienced engineers. Outside-In Development is a methodology that helps us focus on the Semantics rather the Mechanics of our software, protect us from YAGNI violations, and thus facilitate Emergent Design. Practicing TDD helps us implement this methodology in the scope of a commercial software project, by helping us cultivate a Beginner’s Mind towards software design.