January 21st, 2010 Comments Off
I know it’s absolutely insane to try to reduce Eric Evans’ amazing book into just a few pages, but stupidity won. I think it’s still useful as a “next to the coffee mug on your desk thing” if you’re just starting off with DDD. So download the free Domain Driven Design Reference Card at http://refcardz.dzone.com. Small warning: it’s not useful unless you’ve read Eric’s and/or Jimmy’s book or have attended a DDD course.
I’ve tried to keep it true to the book. I’ve aslo added a reference to a couple of additional patterns right at the end, after some quick chats with Eric and Jimmy. Given the space constraints, I decided to leave out the CQRS work. It feels better anyway, since this meant as a cheat sheet for people starting out.
December 7th, 2009 §
Last week on the factor10 DDD course in Cape Town, the question of reusability came up again. It’s the same old object orientation promise of “Just do OO and you get phenomenal reuse for free”. Today, I was refactoring some code with another developer at a client and I extracted some lines into a few private methods just to clean up a really fat loop. The initial reaction from the other developer was “That’s an overkill because you won’t reuse that method”. My spontaneous reaction was “Readability is the real reusability”.
It’s true, the method won’t be reused. It’s also true that most us were taught in some Programming 101 course that you should create a method, function, procedure only if you are going to call it more than once, otherwise just leave it all inline. I value ubuntu coding, and so I have learned to unlearn that naive rule. When I make my code more readable, I get more reuse out of it. The reuse I value is not really about the number of repeated method calls or number of inherited classes. I value the increased reusability that is achieved when more developers are able to read my code and walk away understanding my intention, clearly and unambiguously.
Let me put it another way. Your code is a representation of your model. Your model should be used to drive all collaborative discussions about the solution. That’s where you get the real reuse in your model. If people can’t understand your model, then your model can’t be re-used for further discussions.
October 8th, 2009 Comments Off
In a couple of weeks I will be at the OOPSLA conference in Orlando, USA. I am absolute OOPSLA nOOb but am already excited about it. I’ve heard lots of nice things from the OOPSLA “veterans” at factor10 and now I can’t really wait to get there.
I will be giving a tutorial on using AOP to solve some domain problems, not just removing the infrastructural noise from your domain models. Also, I’ve been invited to be part of a panel on my best-loved-hated subject … modularity. I will also take part in the Cloud Computing Design workshop.
There’s also an amazing line up for the other tutorials and OOPSLA still has a “Pay for 3 and attend 4″ promotion going on. Take advantage of it. If you already signed up for 3, then just sign up for the 4th. If you’ve signed up for 2, then pay for the third and register for the 4th too.
So much happening in just a short week. But, it will be lot’s of fun and worth the 24 hour travel time from Cape Town.
September 21st, 2009 Comments Off
Trust has popped up in so many of my conversations recently. It came up at home, at a new school that Lia will be starting next term, in the DDD course that I gave earlier in the month, in Peter Hundermark’s scrum master certification course. And I got a one line email that said this.
The entire world lives on trust. Every aspect in life moves with trust.
The more I think about situations in life that will prove this statement false, the more it seems to hold true. Even in design it holds true. Your most fundamental architectural decisions are based on trust and the implementations of that architecture work because of trust.
It’s true for code too. If you don’t trust the code on which you build or depend, then you might as well write everything yourself, and give up your place on your team.
I was thinking about the AOP with DDD tutorial that I will be giving at OOPSLA this year, and this trust thing came up. Here again, aspects and the classes into which they get woven, need a trust relationship. It may seem like a stretch to make that statement, but I think it holds true again.
So, how do you gain trust? I am not sure, but I think you have give up something first. Maybe you need to show your vulnerability first, then it becomes easier to let someone into your space. Then, perhaps, they will let you in to their space too. When ego walls are erected, then trust finds it hard to grow. By ego, I don’t mean arrogance, I mean awareness of your self that you hide from others for fear. Perhaps, it is only when you show your true interface, that the other will worry less about hidden agendas.
In code, trust lies in interfaces and types, not in implementations. It’s really about trusting the implementation that makes types worthy. When you trust the type and send it a message and it behaves as expected, then you trust it. If you request something of an abstract type and the message was received by an instance of a subclass, then you expect the subclass to behave like the abstract type. You don’t hope that it does behave consistently, you trust that it does!
Trust is tied in with ubuntu too. You can’t be part of a community nor allow yourself to be defined and shaped by the people around you, if you can’t trust them. I think ubuntu coding needs trust as one of it’s values. It’s already a value in XP, and Scrum, and families. It needs to be in teams, and organisations, and communities and nations too.
August 12th, 2009 Comments Off
I finally got out of neutral and pulled together the first public offering our Domain Driven Design courses in Cape Town, South Africa. Normally we give these courses on-site with people on the same development team but I thought it may be fun and inspiring to open it up to everyone for a change. Now I’m all excited again and really looking forward to a diverse mixture of people. Hopefully, I will see some old faces and lots of new people.
The one thing I can tell you is that the course is a very immersive experience. I really hate lecturing but I enjoy probing conversations and that’s how I give the course. I don’t have answers to the practical work and concerns are addressed as we go along. As a result, the day takes unexpected turns and routes. But in the end I get you to the right destination. Come along; you will leave exhausted, but inspired!
Take the Fast Track to Domain Driven Design
about the course / course contents / should you attend? / register for the course
factor10 has expanded its services in South Africa to include our advanced and
expert level courses aimed for the software professional. On September 8-9, 2009,
we will be offering a fast track to DDD for Architects at the BMW Pavilion in
Cape Town.

Who should attend?
This course is for software professionals that want to take the right steps towards
advanced and expert levels in their careers. Register for this course if you want to …
- learn more than just another syntax and set of tools
- write software for large, long living systems
- increase the quality and maintainability of your design
- design high quality models and use code to represent those models effectively
- develop applications with a good APIs
- add a design edge to your skill set

Why should you learn DDD?
More and more developers and architects realise that learning every detail of a new
API just isn’t the way to deliver the best business value. It’s such a tough balancing
act; focus on the solving the business problem and focus on building working software
with your frameworks.
One way of taking a big leap in the right direction is to learn and apply domain driven
design. It is definitely not abstract and fluffy; it deals a lot with the code also. DDD
leads us to focus on understanding and to communicate that understanding very well;
in language, in design and in code. You will shift your focus away from designing for a
technology, and you will learn to design for the business domain; to the core of the
problems and solutions. Those are the most interesting parts and what your users
and customers really care about.
about the course / course contents / should you attend? / register for the course