Software Development From the Outside In

[fa icon="calendar'] 1/5/14 12:31 AM / by Alnoor Pirani

Campaign Delta at Launch Academy included acceptance testing and outside-in development, a follow-up to unit testing and rounding out my knowledge of test-driven development. I expect this organized approach to application development to reduce a lot of the anxiety and frustration around software development that I’ve experienced in the past.

outside_in_development.png

Check for Doneness

When learning to code, a natural tendency is to directly go from a user requirement to implementation and then worry about how the user will see the result at the end. But how do you know when you’ve satisfied the requirement? Without an objective test, the requirement can become a moving target that leads to wasted time without improving business value for the customer. Acceptance tests anchor the requirements and provide confidence that the requirement has been met.

Fix Broken Telephone

The customer and user of your software are unlikely to be developers themselves. As such, user requirements are provided in plain english and are intended to provide business value. Writing an acceptance test translates the user story into a language that all developers can understand and leads to code that can provide the business value sought after. The methodology of acceptance testing ensures that the translation occurs at high fidelity to reduce errors during implementation.

Quick Release

Time is the most expensive resource for the both the developer and customer. The faster a customer can get their solution, the faster they can realize their business value. The faster a developer can complete a project, the faster they can move on to the next project to the keep the business going. Having confidence that the user story has been implemented without errors reduces the likelihood of revisions and leads to faster time to release.

The TDD techniques I’ve learned over the past four weeks have transformed my approach to software development by providing a systematic approach and language with which to turn a user story into a final product that rapidly provides business value.