Full-day workshop:

Software Architecture

Why this workshop?

An architect has no simple, clean decision to take. Everything is a trade-off with pros and cons to evaluate within the constraints of the project. But only after a decision is made, the real struggle starts – everyone in the team must learn HOW to apply it in their daily work and understand the WHY behind it to be capable to adjust that decision if the problem constraints shift. Join this deep dive into the mainstream backend architecture styles, understand pros and cons of typical design decisions, and learn how to gradually evolve your architecture to support your growing complexity.

The training day starts with the foundational design principles, overviews key Domain-Driven Design tactics, assembles the classic Layered Architecture and shows what Evolutionary Architecture means in practice. At the end of the day, we will review the classic Concentric Architectures (Hexagonal-, Clean-, Onion-), explaining common pragmatic simplifications. To bring these concepts to life, we will refactor a simple Java application, keeping our focus on architectural decisions and how they align with the fundamental design principles and values.

Unconference sessions

Why attend this workshop

Develop a firm understanding of the core architectural principles

Learn to analyze tradeoffs of design decisions

Master the state-of-the-art backend architectural styles

Implement architectural changes incrementally, without large, risky rewrites

Who is it for?

developers who want to become an architect

architects or technical coaches that wants an update on current trends in architectures

you are looking to debate emerging design practices you observed

Technical requirements:

IntelliJ + JDK 17 + access to GitHub & Maven Central (mind your VPN)

What will you learn?


  • Coupling and Cohesion
  • SOLID Principles Quick Overview
    1. Documenting Architectural Decisions (ADR)

The Domain Model:

  • - Ubiquitous Language and Bounded Context (Domain-Driven Design)
  • - Supple Domain Model with Value Objects
  • Incremental and iterative approach
  • - Rich Domain Model with behavior and constraints
    1. - Debate: is ORM a friend or a foe?
- Exercise: refactoring Domain Model from ‘anemic’ to ‘rich’

Exposing an API

  • - Contract- vs Code-first API
  • - The Fallacy of Automatic Mappers
    1. - Command-Query Responsibility Segregation (CQRS) overview)
- Task-Based UI

Consuming an API

  • - Adapter Pattern and Dependency Inversion Principle
  • - Enforcing boundaries with architectural fitness functions
    1. Exercise: extract infrastructure code into an Adapter

Layered Architecture

  • - Definition and Flavors
  • - Façade Pattern and Separation by Levels of Abstraction (SLAb) Principle
    1. - Split complexity via Application Services (DDD)
  • Exercise: push complexity down in Domain Services
  • Concentric Architectures

    • - Hexagonal Architecture (aka Ports-and-Adapters)
    • - Onion Architecture
      1. - The 5 Rules of a Clean Architecture
    - Pragmatics: Use-case-optimized query, self-mapping DTOs, inline controllers
  • Exercise: Refactor to onion/hexagonal (aka Ports-and-Adapters)
  • Finding Microservice/Module Boundaries - heuristics

    • - Technical vs Functional partitioning, the Screaming Architecture (aka Ports-and-Adapters)
    • - Split by Data vs by Business Capability
      1. - When are Microservices required?
  • Exercise: Identify subdomains of an e-shop
  • Wrap-up: Quiz & More Debates



    Who is the trainer?

    Victor Rentea


    Java Champion

    Victor Rentea Consulting

    Victor is a Java Champion with two decades of experience, and the founder of European Software Crafters Community, the world’s largest developer group around architecture, refactoring, and testing. Over the past 9 years, Victor helped over 100 companies in Europe turn their developers from good to great via consultancy, coaching, and training workshops. You can find many conference talks, a blog, and his training catalog on victorrentea.ro.


    Stay up to date

    * indicates required

    We use Mailchimp as our marketing platform. By clicking above to subscribe, you acknowledge that your information will be transferred to Mailchimp for processing. Learn more about Mailchimp's privacy practices here.

    You can change your mind at any time by clicking the unsubscribe link in the footer of any email you receive from us, or by contacting us at [email protected]

    Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut elit tellus, luctus nec ullamcorper mattis, pulvinar dapibus leo.