Clean Code – Design Principles Kata


DATE: Wednesday 8th of November 2017

LOCATION: Cariplo Factory, Via Bergognone 34, Milan

“Software must be Well-Designed”. But what is a “Good” Design? This workshop follows a Kata approach where, starting from a focused but realistic specification, each step addresses a different challenge by applying Design Principles that make applications easier to implement, change & understand.

Take a look at the Special Package:
“1 Workshop + Conference Ticket”: we offer 15% DISCOUNT on the total price!
Click here to know how to obtain these discounts.



The workshop is full-day (8 hours) from 9:00 to 18:00, with one hour lunch break.

CHECK IN: 8:30 – 9:00

Every 8 hour workshop ticket is fixed:
– to 180 € from the beginning of sales till the 28th of September;
– to 220 € from the 29th of September till the 19th of October;
– to 260 € from the 20th of October till the 2nd of November;
– to 280 € from the 3rd of November till the end of sales.

Take a look at the Special Package:
“1 Workshop + Conference Ticket”: we offer 15% DISCOUNT on the total price!
Click here to know how to obtain these discounts.


Carlo’s passion for Software began with a C128, then grew with Linux, Java/JavaScript, web & enterprise apps, and now cloud & security. After a PhD and research experience at the University of Genova and the CNIT National TLC Research Consortium, and an exciting time at startup Eptamedia, he’s now a Solution Architect and Senior Trainer at NIS s.r.l.. His personal communication style as an architect and trainer, both technically precise and able to present in an engaging way complex topics to an heterogeneous audience has been appreciated online and at many events from Devoxx to Codemotion.

Most developers agree that “Software must be Well-Designed”. But what is a “Good” Design? This workshop presents a core set of Design Principles that will help you make your application easier to implement, change and understand. Starting from a focused but realistic specification, we will practice with a Kata where each step introduces a challenge that can be solved by applying different Principles & Patterns.

What is Software Design? what is a “good” Design?
– up-front vs continuous design
– Design vs Agile
– Evolutionary vs Emergent Design
– Modeling vs Design

Why is it important?
– the two bottlenecks of Software Development: learning and communication
– Essential vs Accidental Complexity

Key ideas from Event Storming & Domain Driven Design
– Ubiquitous Language
– focus on the Domain
– “Big Picture” vs local consistency (Bounded Contexts)

Key forces in Software Design
– Cohesion
– Coupling
– Impact of Change
– fragile vs robust designs

The Travel Expenses Kata
– what is a Kata?
– overview of the Kata
– basic requirements

Single Responsibility Principle for methods
– Primitives vs orchestrators
– if you have to do 3 things, make 4 functions
– Steps vs Flow

LAB: Parsing the Expenses Reimbursement Request

Single Responsibility Principle for Classes

What is a Responsibility
– reason to change
– what if…
– looks similar vs changes for the same reason

LAB: Validating the overall monthly total amount

Single Responsibility means splitting …
– UI from logic
– Logic from persistence
– I/O from logic
– Sync from Async
– Intent from implementation

LAB: Generating the Validation Report

How to start?
– Separation of Concerns in practice: ask yourself questions!
– make it smaller
– top down vs bottom up
– mock steps vs Walking Skeleton

LAB: Validating Expense limits per category

Reviewing your Design
– naming
– model out loud
– validate with examples
– what if this changes?
– the Open / Closed Principle

LAB: Validating Monthly constraints per category

Collaborating with other classes
– Prefer Composition to Inheritance
– Dependency Injection

LAB: Validating Expense limits per day

Generalizing the model
– making the implicit explicit
– Levels of abstraction vs Levels of implementation
– breakthroughs
– Emergent Design

LAB: Making Validation Rules configurable

Incremental development and Evolutionary Design
– the need for a continuous chain of small, safe steps of design &
– how to do everything incrementally
– incremental implementation: in-application Mocks & the Walking Skeleton approach
– the Expand and Contract pattern

How to continue by yourself: references for further learning
– improving our design
– practice, practice, practice and continuous / daily improvement (Kaizen)
– Principles of Package Design
– More on TDD: Test-friendly vs Well-designed

Through the workshop you will learn to:
– understand the basic dynamics of a complex Software system, and key Design concepts such as Cohesion, Coupling, Abstraction and Impact of Change.
– apply core Design Principles to improve the structure of your applications
– balance the pros & cons of alternative Design choices

Basically, to all developers! Independently from the language / platform you are developing on, this workshop is for you if:

– you are moving from implementing a detailed specification to designing new features and application
– you are interested in improving your Software Design approach and skills
– you want to develop more robust and maintainable applications with more productivity

– Working knowledge and practical experience in one programming language (you should be able to write/compile/test/debug by yourself a program which reads and parses input and presents output either on the command line or in a simple GUI).
– Good knowledge of Object Oriented concepts (Class, Interface, Method, Variable Scope and Visibility) and ability to “read” them from a sketch/diagram
– Basic knowledge of HTTP

– Laptop
– Web Browser (Chrome or Firefox)
– Text Editor (Sublime, Atom, Visual Studio Code,…)
– IDE (Eclipse, NetBeans, Intellij, Visual Studio,.. )
– Pen and Paper

Seats are limited.
The workshop will be held only if the minimun number of attendees is reached.

Take a look at the Special Package:
“1 Workshop + Conference Ticket”: we offer 15% DISCOUNT on the total price!
Click here to know how to obtain these discounts.

Back to workshops list

Main Sponsor