Workshops

Upcoming Public Events

Announcing the Distilled Tour, February – July 2017: Netherlands, Phoenix, Sao Paulo, San Jose, NYC, Seattle

See all the latest on IDDDWorkshop.com and follow @IDDDWorkshop on Twitter

New Online Training: Distilling Domain-Driven Design by Vaughn Vernon

Implementing Domain-Driven Design 3-Day Workshop

The 3-day Workshop that rapidly unlocks the secrets to implementing DDD, both strategically and tactically. This Workshop is specially designed for mid-level and senior software developers and architects.

Day 1: Getting Started, Strategic Design, and Architecture

Getting Started with DDD

Understand the essence of DDD. Form the right mentality for powerful software modeling. Develop a Ubiquitous Language for your project. Learn how to use a test-first approach to craft intention-revealing interfaces. All this lays a foundation for moving forward with DDD.

Domains, Subdomains, and Bounded Contexts

Grasp the core concepts of DDD strategic modeling, and put them to use. Learn to vigorously gather core concepts and separate irrelevant ones. Learn why strategic design is so essential. Develop the ability to determine when your domain models are composed correctly and when they required more rigorous design.

Context Mapping

Learn how to integrate with other systems using DDD and straightforward design techniques. Context Maps are not just drawings. Use them as a project thinking, learning, planning, and integration tool.

Architectures that Support DDD

See how seven architecture styles and patterns can be used to support your DDD projects. We will look at the following: Layers; Dependency Inversion Principle; Hexagonal; SOA; REST; CQRS; Event-Driven Architecture for Pipes and Filters, Long-Running Processes, and Event Sourcing; Actor Model.

Day 2: Tactical Design

Entities

There will almost always be at least some Entities in your domain models because of the need to manage change over the life cycle of mutable objects. Understand how to properly employ this necessary modeling tool, but also why you should use these less often than you may think. Rather than overusing Entities, learn how to best use them only when a domain concept must change over time.

Value Objects

Embrace this invaluable, functional modeling tool, which you should use as often as possible. You will learn the Value Object characteristics and why using Values where possible is a safer way to design. Using a test-first approach you will learn by modeling several different concepts as Values.

Aggregates

Demystify effective aggregate designs with the use of a set of simple rules. Learn how to design objects for correct transactional consistency, performance, and high scalability.

Domain Services

Add powerful stateless operations to your model when its use is appropriate. The modeling techniques cover both domain-specific services and those of a more technical nature, often used for integration.

Domain Events

Learn how to model, publish, and consume the facts of what happened in a domain model. You will see how Domain Events have far reaching impact on your designs across the enterprise. Here you will gain an understanding of how to publish and consume Events using both REST and messaging.

Modules

Understand the importance of and techniques for organizing concepts within a single domain model. Why go to all the trouble to carefully craft domain objects but without proper modularization using your Ubiquitous Language?

Factories

See when and how to use factories to support the creation of domain objects.

Day 3: Aggregate Persistence, Integrating Bounded Contexts, Application

Repositories and Event Sourcing

Consider two primary approaches to persisting and reconstituting your domain objects. You will see how to persist and retrieve your aggregates using both SQL and NoSQL databases. Examples include those for O-R Mapping, Grid, and MongoDB.

Integrating Bounded Contexts

Employ RPC, REST, and messaging to realize your Context Maps in code as you integrate multiple Bounded Contexts of enterprise applications. Understand the complexities and challenges of distributed computing environments, and how to deal with them. An important lesson that is reemphasized is to model each Bounded Context cleanly and separately from those with which you integrate.

Application

Learn how the components that surround your domain model comprise a whole application. Consideration is given to User Interface strategies and the Application Programming Interface (API) using Application Services.

Managing Domain-Driven Design 1-Day Workshop

Short lectures, exercises, and innovative game-play lead you to a clear understanding of how to leverage DDD, putting it to use on your Agile project. It’s a class that is well balanced for business experts and technical stakeholders alike.

What to Expect With DDD

Explore the business value of using DDD, and become well informed about when to use DDD and when not to use it. Learn to participate in a DDD project as a domain expert by helping to develop a Ubiquitous Language. Understand how to find the right domain expert(s) and the need to support developers in their efforts as a close-knit team. Learn about the importance of proper software test when using DDD, and how agile development can work on a DDD project.

Taking a Strategic Approach to Developing Business Solutions

Here we will look at common legacy and other project situations that can challenge your ability to succeed, and why using a strategic approach is so important. This module weaves in the business vision and why it is vital to follow the course that is most important to the business initiative. Techniques are presented as tools for recognizing where the pre-existing and supporting software is, and how to leverage it to develop your core business vision. Discussed is how to prioritize software as core, supporting, and generic, and where to allocate developer resources based on abilities.

Managing a DDD Project

Every project manager knows the urgency of staying on task and on time. What techniques and tools can be used to accelerate your DDD effort? How will your developers choose their architectural mechanisms? How will they provide project estimates that you can count on? How will the team time box domain modeling efforts? How frequently will domain experts need to participate in design discussions with with developers, and how much time will it require at various stages in the project? How can you use a common agile project management framework to keep the project moving forward at the correct pace, but without stifling the creativity of the domain modeling effort?

Common Problems that You Will Face, and How to Overcome Them

Every software development project faces the challenges of the real demands of the business and business stakeholders that do not align with the goals of the development team. This module addresses the need to get buy-in from the business and to heavily weight the team developing the core DDD product(s) with the proper capabilities in order to ensure their success. Here we probe various common business challenges and how to work around them.

Moving Forward With DDD

We wrap up this workshop by reviewing the big picture of DDD and how you can succeed with it by ensuring that your priorities are focused on the business.