3 days / 40+ speakers
12 workshops

May 17-19, 2017 | Vilnius, Lithuania
Wix, Israel

Shai Yallin

Shai is a software engineer and engineering manager, serving as Head of Backend Engineering at Wix.com. He has been a coder since the age of 13 and has learned software engineering practices the hard way, by making many mistakes as well as living to maintain and amend the results of these mistakes and eventually becoming an avid TDD practitioner. Shai has written software using TDD as his guide in Scala, Java, Javascript and TypeScript and has spent the last 6 years at Wix leading software projects and engineers at Web scale.

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.


TDD: Cultivating a Beginner’s Mind

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.