Why Attend?

This course addresses design from a micro level through to microservices utilising Test-Driven Development. The course teaches teams how to design software that is both responsive to changing requirements and new functionally, while avoiding some of the pitfalls that lead to legacy code.

This course teaches software development teams how to:

  • Design techniques that can be applied to real-world situations
  • Derive a microservices architecture from business requirements
  • Maintain clean design as the application grows and business requirements change
  • Build software that is technology agnostic

This course is designed for software development teams that:

  • Have at least two years of commercial software development experience
  • Familiar with a minimum of one Object-Oriented language, such as Java, C#, or C++
  • Comfortable using TDD to build software
  • Understand mock objects and how to use a mocking library
  • Have a general understanding of different architectural styles, including microservices
Course Content

Principles of:

  • The two main styles of Test-Driven Design (Classicist and Outside-In)
  • Object-Oriented Design (OOO)
  • Domain-Driven Design (DDD)
  • Interaction-Driven Design (IDD)
  • Balanced Abstraction Principle (BAP)


  • Writing unit tests that express intent, not implementation
  • Emergent design through classicist TDD
  • Using TDD as a design tool with the Outside-In style of TDD
  • Commands, Queries, and Open/Close Principle compliance
  • Differences between layers, hexagons, features, and components
  • Structure projects in a way that express what the application does and what it is about
  • Modeling behaviour using Outside-In Design
  • Identifying services from business rules
  • Expressive design and architecture in code, but keeping your domain clear
  • Understanding Impact Mapping and how a services architecture can be derived from it

We strongly recommend that software development teams take Crafting Code before attempting this course. This is not an introductory Test-Driven Development course, and those users without a solid understanding may struggle with the material.


  • Bring their own laptop
  • Using TDD regularly on projects
  • Able to create projects, tests, and code and run them in their local environment
  • A distributed version-control system such as Github is preferable

Software craftsman, author, Co-Founder of Codurance, and Founder of the London Software Craftsmanship Community (LSCC). Sandro has been coding since a very young age, but only started his professional career in 1996. He has worked for startups, software houses, product companies, international consultancy companies, and investment banks.

During his career Sandro has had the opportunity to work on a variety of projects, spanning different languages, technologies, and industries. Sandro has a lot of experience in bringing the Software Craftsmanship ideology and Extreme Programming practices to organisations of all sizes. Sandro is internationally renowned for his work on evolving and spreading Software Craftsmanship. His professional aspiration is to raise the bar of the software industry by helping developers become better at their craft.

You're in good company

Asos logo Aspect Capital logo Flextrade logo M&G Investments logo Moonpig logo Societe Generale logo Roche logo Vistaprint logo Schibsted logo Siemens logo lastminute_logo

Let's discuss your training needs

We are excited to learn more about your business. Find out how Codurance’s training courses can power your technology teams.