Avanscoperta
Software Crafting Programme Workshop

Software Crafting Programme Workshop

The must-do learning journey in socio-technical practices and principles

Are you working in teams that struggle to build sustainable, maintainable software?

Writing and maintaining fragile, bug-ridden code can be frustrating and draining, slowing down progress and increasing technical debt.

Mastering the principles of technical excellence isn’t just about writing better code—it’s about reducing complexity, increasing confidence, and driving continuous improvement. When you develop a deep understanding of software craftsmanship, you gain the tools to build scalable, high-quality solutions while fostering a culture of excellence within your team.

The Software Crafting Programme Workshop will equip you with the techniques and mindset to write clearer, more testable, and sustainable code—while also helping you take on more technical leadership within your team.

If you’re ready to move from Developer to Software Crafter, the Software Crafting Programme Workshop is for you.

Trainerscopertina agile technical practice distilled libro

The Software Crafting Programme is led by Alessandro Di Gioia and Marco Consolaro from Alcor Academy.

The course is the result of their hands-on experience in software development and design using XP practices and Domain-Driven Design.

Their expertise is also extensively shared in the book Agile Technical Practices Distilled, co-authored by Marco Consolaro, Alessandro Di Gioia, and Pedro M. Santos, and in Cronache di Domain-Driven Design, published by Avanscoperta.

Target Audience

The program is designed to accelerate technical skills in software development and help technical teams apply effective engineering practices. It is specifically aimed at:

  • Individuals who develop software professionally and want to improve their engineering skills to become Tech Leads.
  • Scale-ups or companies rapidly hiring tech people aiming to create a quality-focused engineering culture.
  • Teams working on a new project looking to modernize existing systems while avoiding the pitfalls that harmed previous ones.
  • Software Developers, QA, Software Engineers, and Freelance Software Developers looking to take the next step in their careers.

Topics

  • Test-Driven Development Classic
  • Test-Driven Development from the London School
  • Object-Oriented Design
  • Object Calisthenics
  • Refactoring
  • Code Smells
  • SOLID Principles
  • Cohesion and Coupling
  • The 4 Elements of Simple Design
  • Test Doubles
  • Hexagonal Architecture
  • Behaviour-Driven Development
  • Acceptance Test-Driven Development
  • Outside-in Mindset
  • Software Teaming (Mob Programming).

Programme

The course consists of 10 sessions lasting 3.5 hours each and is structured with a mix of discussions, theory, and group work. The training program is highly practical and participatory.

Each lesson is built around the practice of Software Teaming (Mob Programming) with the goal of maximizing learning and honing collaborative skills in software development through advanced technical communication.

Agenda

Module 1: Good habits of Classic TDD

  • What is TDD: origin of the technique and possible benefits.
  • The TDD cycle: red/green/refactor, understanding the steps and their distinctions.
  • Advancement techniques: Triangulation, Fake Implementation, Obvious Implementation.
  • Test checklist: a fundamental tool to clarify goals and maintain focus during development.
  • Properties of a good test: what properties a test must demonstrate to be considered good.
  • Anti-patterns: common problems in tests and how to solve them.
  • Mob Programming Exercise: String Calculator using Classic TDD.

Module 2: Object Calisthenics

  • Object Calisthenics: 10 simple rules to immediately improve your Object-Oriented Design.
  • Declarative and Encapsulated Object Code.
  • Using the Type System to make invalid state unrepresentable.
  • Mob Programming Exercise: Developing a Tic-Tac-Toe game using Classic TDD and Object Calisthenics rules.

Module 3: Code Smells

  • Common anti-patterns that make code harder to maintain.
  • How to use code smells as feedback to improve your design.
  • Improving code reviews through systemic analysis of code smells.
  • Group Exercise: Analyzing code full of code smells in a Tic-Tac-Toe application and identifying them.

Module 4: Refactoring

  • Main techniques of automatic refactoring using IDE.
  • Making the most of the refactoring cycle of Classic Test Driven-Development.
  • Applying the Pareto principle in refactoring.
  • Refactoring priority sequence.
  • Mob Programming Exercise: Refactoring the previous lesson’s application, following the correct priority sequence.

Module 5: SOLID Principles++

  • Single Responsibility.
  • Open/Closed principle.
  • Liskov Substitution.
  • Interface Segregation.
  • Dependency Inversion.
  • Balanced Abstraction.
  • Least Astonishment.
  • Mob Programming Exercise: Implementing the Mars Rover kata using Classic TDD and applying the Open/Closed principle.

Module 6: Coupling & Cohesion

  • Categories of Cohesion: Class Cohesion and Method Cohesion.
  • Categories of Coupling: Interaction Coupling and Inheritance Coupling.
  • Systemic Cohesion and Coupling.
  • Minimizing coupling through public method design.
  • Mob Programming Exercise: Completing the implementation of the previous lesson’s Mars Rover kata using Classic TDD and applying the Open/Closed principle.

Module 7: Test Doubles

  • Test Doubles Taxonomy: Conceptual distinction between Mock, Stub, Fake, Spy, and Dummy objects.
  • Command-Query Separation principle.
  • Heuristics for choosing the correct Test Doubles.
  • Using Test Doubles to verify object collaboration correctness.
  • When not to use Test Doubles, favoring Classic TDD.
  • Common anti-patterns in Test Doubles usage.
  • Mob Programming Exercise: Character Copier using Classic TDD and collaboration tests. Implementing the solution using both Mock and Stub, and Fake and Spy.

Module 8: The 4 Rules of Simple Design

  • Simple design: what is meant by simple design and how to achieve it.
  • Applying the 4 Rules of Simple Design.
  • Introduction to Hexagonal Architecture with Ports and Adapters.
  • Identifying where and which Test Doubles to use within a Hexagonal Architecture.
  • Little Design Upfront Exercise: Given a scenario and an acceptance criterion, we will do an “idealized design” exercise to have a starting point for story implementation.

Module 9 and 10: Outside-In Mindset, London School TDD, Applied Outside-In Development

  • Learn the double cycle of Acceptance Tests Driven Development.
  • Apply Behaviour-Driven Development by defining an automated acceptance criterion.
  • Use the outside-in mindset to implement a story in the style of the London School, correctly using mocks and stubs in your tests.
  • Final Mob Programming Exercise: Implementing the scenario and acceptance criterion using the agreed-upon design from the previous lesson, starting with an Acceptance test like a real London School team.

Learning Objectives

By the end of this course, you will be able to:

  • Write tests that serve as living documentation.
  • Utilize the type system to make erroneous states unrepresentable.
  • Collaborate with other developers using a professional technical vocabulary.
  • Conduct high-value code reviews that encourage design improvement.
  • Identify defects that increase maintenance costs.
  • Use good design principles to simplify code and achieve modular architecture.
  • Communicate with the business to deliver valuable software quickly.
  • Reduce feedback loops to develop software incrementally and promote continuous experimentation.
  • Use the Outside-In mindset to write code that focuses on user needs.

F.A.Q.

Are there minimum requirements to participate in this course?
Basic experience in writing Unit Tests is required.
Furthermore, active participation during the sessions and attendance at at least 80% of the entire program is required.

Are there activities outside of course hours and homework?
It is recommended to dedicate at least an hour of time between one module and another to carry out homework and further study.

What language will the exercises be?
The exercises will be in Java or .NET, but don’t worry about the programming language! All the exercises will be done using Mob Programming, so the language won’t be a blocker!

How can I prepare to take the course? Recommended readings? Other?
With the purchase of your course ticket, you will be provided with a code to download a digital copy of the Agile Technical Practices Distilled book (written by the course authors).
We also recommend you read the book The Five Dysfunctions of a Team by Patrick Lencioni.

Is there anything I must do before I buy a ticket for this online workshop?
If you have a computer/tablet, a stable connection (at least 20 Mbps in download and 10 Mbps in upload), earphones, a microphone, and a webcam, then you’re ready to join the workshop.
Check out your connection’s speed.

N.B.

This workshop will be confirmed upon reaching the minimum number of participants. We’ll send an official confirmation to all registered attendees 10-15 days prior to the workshop dates.

About the workshop

Language: English.
Maximum number of participants: 16 participants
Tools and Workstation: The workshop will take place on Zoom.

Book it for your company

Contact us using the form at the bottom of this page if you wish to arrange a private custom edition of the Software Crafting Programme.

Testimonials…

It’s been five intense weeks in which we explored the principles of good programming, from the “classics” SOLID to the hexagonal architecture.
It wasn’t just a series of lessons but a hands-on and engaging learning experience.
In fact, we worked in Mob Programming mode, all contributing together to writing the code. The common thread was TDD, a technique which, if applied properly, allows you to write “bomb-proof” code!
Heartfelt thanks to Marco and Alessandro for accompanying and guiding us throughout the journey.Alessandra Turolla

An excellent workshop for those who are starting to develop complex architectures and want to understand how to write good code in an agile team.Daniele Ferrari

A truly unique course. It combines theory and practice, gives you lots of ideas and leaves you with the desire to improve your code and your work.Emilio Palmerini

This programme is a real eye-opener! Not only about test-driving your code, but also for writing well-designed software.Vetle Horpestad

The course is very interactive and all participants are included in the learning and discovery.Linh Nguyen

Marco Consolaro

Software crafter, technical coach, book author, international speaker, systems thinker, symmathecist, and philosopher.

Alessandro Di Gioia

Author of the book Agile Technical Practices Distilled, trainer, software consultant and developer.

About us

Avanscoperta is a growing community of professionals learning together, exchanging experiences and ideas, exploring uncharted territories.

We carefully select the most relevant topics and the best trainers and thought leaders worldwide with an eye to the most engaging teaching techniques.
Are you ready to learn with us?

Are you interested in this course?

If you have any specific questions, or if you want to receive more information on dates, content or offers about this course, drop us a line. We'll gladly get back to you!







    NEWSLETTER

    Get exclusive content from experts in software development, technology, business and design!



    SUBSCRIBE TO OUR NEWSLETTER!
    :-)

    Subscribe to our newsletter!