Upcoming Domain-Driven Design (DDD) Immersion classes

22. July 2011

Domain Language

I wanted to let everyone know I will be teaching two of the public DDD Immersion classes for Domain Language between now and the end of this year, one in Denver and one in New York. Seats are still available for these classes, but likely to go fast. The early bird discount for the September class in Denver is still available at this time.

Go to http://www.domainlanguage.com/training to register.

Here is the schedule:

Sept 20, Denver, CO
DDD Immersion
Instructor Paul Rayner
$2790 $2090 if booked by 8/12

 

Nov 29, New York, NY
DDD Immersion
Instructor Paul Rayner
$2790 $2490 if booked by 10/21

 

For those of you who are perhaps not familiar with the DDD Immersion, it is a 4 day deep-dive into creative domain modeling, combining hands-on coding with group modeling exercises for a truly immersive learning experience. I attended the class in February in NYC in Feb of last year, and wrote in detail about my experience. Since then I have become a certified DDD Immersion instructor.

 

Here is what a typical class looks like:

Day 1: Model Exploration and Ubiquitous Language

  • Domain-driven design overview
  • Making implicit concepts explicit
  • Ubiquitous Language

Afternoon: Jumping in with code

  • Brainstorming models
  • Expressing a model in software
  • Building-block patterns (entities, value objects, repositories, etc.)
  • Test-first development as a modeling process

Day 2 Morning: Modeling with Domain Experts

  • Techniques and pitfalls of bringing about a creative collaboration.
  • Modeling out loud

Day 2 Afternoon: Supple Design

  • Patterns and techniques to tighten models and their connection to code.
  • Making code obvious, easier to use and change
  • Modeling for transactional integrity and distributed systems

Day 3: Strategic Design

Morning: Context Mapping

  • Pragmatic approach to dealing with diverse models and designs on real projects
  • Relationships between subsystems/ relationships between teams

Afternoon: Distilling the Core Domain

  • Distinguishing the core from the mass
  • Ways of focusing effort
  • Clarifying a shared vision
  • Setting up a project for success

Day 4: Bringing it Together

  • Design/code challenge - model supple design with context map
  • Round-table discussion of SOA and enterprise frameworks with DDD
  • In-depth discussion and Q&A, relating all topics to each other and to your own work
Your class was a great experience on many levels…of course what I learned about DDD - fabulous - but also how you taught the class and the interactive nature of it is just wonderful.
Julie Lerman, Author of Programming Entity Framework.
Unlike some trainings and courses I’ve experienced, I don’t think anyone left this course without a very solid understanding of how they can better pursue DDD in their own environments.
Brian Donahue, May 2010

There is also another Denver public class scheduled for January - for those who like sunshine with their Winter snow!

 

Jan 17, Denver, CO
DDD Immersion
Instructor Paul Rayner
$2790 $2090 if booked by 12/2

I should also mention that Domain Language can also provide DDD Immersion classes and DDD consulting onsite for your team.

 

Don’t give your customers what they ask for

21. July 2011

Cucumber Workshop  Workbook

Give them what they need

There is a pairing exercise participants experience in my BDD with Cucumber workshop where one person describes a commonplace activity to the other. The challenge is describing it without being able to use certain common words. You need to attend the workshop to see what this looks like, and how much fun it is (I'll post a short video of participants soon).

One thing I have noticed, no matter where I have run this exercise, is that very few people actually explain why this activity should even be done. They typically spend all the time describing the mechanics of how to do it, but don't explain why, and the listener usually doesn't think to ask. I contend that as technologists we do the same thing to our customers all the time.

The critical piece here is asking "why?"

Ask your customers, "why do you need this?" "How will it help you?" "What problem does having this feature solve?"

And then ask "why?" a few more times. Failure to do this will lead to a mechanical understanding of the need rather than the type of creative collaboration that might lead to deep insights about the true problem being addressed. I think it is this lack of deeper questioning that explains how many user stories lack a clear statement of the benefit returned by implementing the feature described by the story.

I really enjoyed reading Tom Preston-Werner's post Ten Lessons from GitHub’s First Year. Tom says it better than I ever could:

Adapt to Your Customers

Here’s a seemingly paradoxical piece of advice for you: Listen to your customers, but don’t let them tell you what to do. Let me explain. Consider a feature request such as “GitHub should let me FTP up a documentation site for my project.” What this customer is really trying to say is “I want a simple way to publish content related to my project,” but they’re used to what’s already out there, and so they pose the request in terms that are familiar to them. We could have implemented some horrible FTP based solution as requested, but we looked deeper into the underlying question and now we allow you to publish content by simply pushing a Git repository to your account. This meets requirements of both functionality and elegance.

In another post Tom points out how "building the right system" always trumps "building the system right":

I hear a lot of talk these days about TDD and BDD and Extreme Programming and SCRUM and stand up meetings and all kinds of methodologies and techniques for developing better software, but it's all irrelevant unless the software we're building meets the needs of those that are using it. Let me put that another way. A perfect implementation of the wrong specification is worthless.

Producing working software frequently is necessary but insufficient. Producing valuable working software frequently is what matters.


Some Reflections on Uberconf

15. July 2011

If you do development on the JVM and you did not attend Uberconf this week then you really missed out. This is the second year of Uberconf in Denver, and it just keeps getting better and better.

Even though I was not able to attend the entire conference, I feel like I come away from my time there with new friends, new knowledge and some great memories.

BDD_Cucumber_workshop3.JPG

Some takeaways

Thanks to all those that attended my sessions. I was also very impressed by the level of questions and attendee participation. In particular, my BDD with Cucumber was packed, and most attendees hung around for the second half. One person told me she attended the conference mainly because of this workshop, so that was a nice thing to hear. As a side note, it doesn't matter how much you check your class materials, it only takes one faulty USB key to throw a wrench in the works. Presenters beware!

The group exercises I use in my BDD with Cucumber workshop (thanks to Richard Lawrence for letting me use them!) have been great ways to clarify the material for attendees and get everyone interacting with each other and having fun. I was aiming for it to be the funnest workshop at the conference - hopefully I came close!

I now know about some especially  cool ways to improve my developer experience on OSX that I will be trying out in the weeks to come, such as Brew, MacVIM, Solarized and oh-my-zsh. Thanks especially to @arthurkalm for all the tool-foo sharing. Man, that guy knows his stuff.

Use ant -emacs to have Cuke4Duke output code snippets more cleanly. Thanks Howard Ship!

If you attended the workshop (or any of my sessions) then I would love to hear any feedback you might have, especially if you try implementing any of the things I talked about.

If you ever have the chance to attend a workshop by Venkat, don't miss it! He turns live coding into a performance art. Seriously.

Thanks to Jay Zimmerman, Ben, NFJS and staff of the Westin hotel for making Uberconf such a great event.

Workshop 2