You are viewing details from a past event. Please check our upcoming event schedule if you are looking for current content.

Paul Rayner

Founder and Owner at Virtual Genius LLC

Paul is a seasoned design coach and leadership mentor, helping teams ignite their design skills via Domain-Driven Design (DDD) and Behavior-Driven Development (BDD). He gets teams unstuck through intensive coaching workshops and hands-on pair programming, combined with focused one-on-one leadership mentoring. His company Virtual Genius, provides training and coaching in collaborative design for agile teams. Paul actively serves the community: teaching classes in BDD and DDD, contributing to OSS, and co-leading the DDD Denver Meetup group.

Look for him speaking at user groups and at local and international conferences. Paul is from Perth, Australia, but chooses to live, work and play with his wife and two children, in Denver, Colorado. He tweets with an Australian accent at @ThePaulRayner and blogs at thepaulrayner.com

Presentations

Domain-Driven Design (DDD) Workshop

9:00 AM MDT

Build your awareness of the basic concepts and value of Domain-Driven Design (DDD) in one day through group exercises, paired code walkthroughs, lecture and games.

Understand what DDD is and when and why it is valuable to software intensive organizations. Overview the basic principles and processes needed develop the useful sort of models, tie them into implementation and business analysis, and place them within a viable, realistic strategy.

Topics Introduced

Morning

  • What is DDD and how is modeling useful?
  • Developing a shared modeling language to enable effective collaboration
  • Using reference scenarios to guide modeling
  • What makes a model useful to a software project?
  • Architectural options for implementing DDD
  • Aggregate design - applying effective aggregate design for both relational and NoSQL solutions
  • Domain events - decoupling, scaling and modeling chronology in distributed systems

Afternoon

  • Prioritizing sophisticated design for where it will have the greatest impact
  • Clarifying a shared vision
  • Mapping the terrain of your systems to enable effective modeling and design
  • Integrating agile with rigorous design
  • Succeeding with DDD and avoiding common adoption pitfalls

Domain Modeling Using Domain-Driven Design (DDD)

9:00 AM MDT

This presentation seeks to provide a solid introduction to the fundamentals of DDD. Learn why modeling a complex business domain in software is so advantageous to your business and ways in which your team can go about delivering software models to give your business a competitive edge.

The philosophy of domain-driven design (DDD) – first described by Eric Evans in his book [of the same name – is about placing our attention at the heart of the application, focusing on the complexity that is intrinsic to the business domain itself. We also distinguish the core domain (unique to the business) from the supporting sub-domains (typically generic in nature, such as money or time), and place appropriately more of our design efforts on the core.

Domain-driven design consists of a set of patterns for building enterprise applications from the domain model out. In your software career you may well have encountered many of these ideas already, especially if you are a seasoned developer in an OO language. But applying them together will allow you to build systems that genuinely meet the needs of the business.

The premise of domain-driven design is two-fold:

  • For most software projects, the primary focus should be on the domain and domain logic; and
  • Complex domain designs should be based on a model.

Domain-driven design is not a technology or a methodology. It is a way of thinking and a set of priorities, aimed at accelerating software projects that have to deal with complicated domains.

Note: Laptops are not required - there is no hands-on coding for this workshop.

Strategic Design Using DDD

10:45 AM MDT

Not every part of a software system will be well-designed. How do you know where to put the time and effort to refine the design, or refactor existing code? Learn how strategic Domain-Driven Design (DDD) patterns can show you how to know which parts of your system matter most to your business and how to focus your team's design efforts most effectively.

Context mapping and Core Domain are key concepts in DDD, providing valuable techniques and insights into where to focus your design attention, yet most developers have never heard of them. This session will introduce the tools of strategic DDD and show you how they can shine a light on your design challenges.

Using DDD Patterns for Supple Design

1:30 PM MDT

Come on a guided tour of how applying Domain-Driven Design (DDD) building block patterns can make your code cleaner, more expressive, and more amenable to change. We cover examples of DDD patterns such as entities, value objects, closure of operations and side-effect-free functions. We will focus particularly on how implementing value objects can lead to more supple design.

When good design really matters, DDD building block patterns enable your design to model the business domain you are working with more richly. They allow you to collaborate with domain experts to build deep, useful models of the domain in your code that solve difficult business problems with elegance and simplicity.

This is a highly interactive modeling session which walks through diagrams and code samples to demonstrate how the application of these patterns to modeling can make writing and reading coding fun again, while improving the effectiveness of the code you write. Come prepared to think, ask and answer questions, and learn how to write the best code where it matters most.

Aggregate-Oriented Modeling with DDD and NoSQL

3:15 PM MDT

Many of the problems encountered in scaling, parallelizing and distributing systems that tend to be addressed in ad-hoc ways are actually deeply connected with the manner in which the business domain has been modeled. Domain-Driven Design (DDD) has rich modeling resources for tackling concurrency, transactional and distribution boundary issues within the domain model itself, enabling teams to be more effective in dealing with business complexity and change.

Learn about how aggregates can enrich your domain models, improve system performance and loosely couple your systems. We will give examples of how aggregate design choices are manifested in NoSQL data schemas, focusing particularly on MongoDB, and the consequences of making these choices for domain modeling, performance, and scaling.