Back to training

Crafting Design

Join Sandro Mancuso to learn design principles and techniques that lead not just only to well-crafted code but also well-crafted solutions!


This is a hands-on course for developers that are comfortable writing code but want to be better at designing software.  In this course about software design, you will learn to:

  • design well crafted solutions
  • produce software that is responsive to changing requirements and new functionality
  • avoid the pitfalls that lead to legacy code

Who should attend

This course is designed for software developers that:

  • have experience in developing software commercially
  • are familiar with at least one Object Oriented Language (such as Java and C#)
  • are able to understand Java (the codebase and exercises are in Java)
  • are comfortable using TDD to build software
  • understand mock objects and know how to use a mocking library

Why attend

You should attend if you want to:

  • Learn design techniques applied in successful projects
  • Use TDD as a design tool, applying Outside-In TDD
  • Drive out a flexible design
  • Build software that is not bound to a specific technology or framework by keeping them at the boundaries of your system
  • Express your business domain in every facet of your entire application, not just methods and classes
  • Keep your design clean as your application grows and requirements change
  • Let your architecture emerge, rather than designing a rigid and unchangeable structure up-front

Expected outcomes

  • Learn how to design better solutions
  • Keep not just your code, but also your design, clean using Test-Driven Development
  • Become comfortable in mapping business requirements to software components
  • Build software that reflects business requirements

Topics covered

  • Four elements of simple design
  • Mapping and visualising business concepts in code
  • SOLID principles
  • Testing and refactoring legacy code to express business domain
  • Expressing design and architecture in code
  • Outside-in TDD
  • Interaction Driven Design (IDD)
  • DDD and supporting architecture types (i.e. layered, hexagonal and event driven)


Developers must:

  • Bring their own laptops
  • Have a development environment consisting of: Java 8, favourite IDE, maven 3.x, a unit testing framework
  • Be able to create projects, build source code and run test cases in their development environment

In addition, a distributed version control system such as Git is desirable.

Practical details

  • Included: welcome coffee, lunch and coffee breaks
  • Training language: English
  • Attendees will receive a certificate of participation

Need more information? Contact us and we’ll help you choose the right course for you.