Domain-Driven Design by Eric Evans, ISBN 0321125215

Reviewed by: Howard Carson, January 2005, send e-mail
Published by: Addison Wesley Professional, go to the web site
Requires: N/A
MSRP: US$49.99, CAN$75.99

A serious title this is. The fundamental issues at the heart of software design are shifting with every new technology implementation. As Tom Kappel suggested in his Kickstartnews review of Agile Project Management: Creating Innovative Products the basic assumptions on which many new software projects are founded sometimes look more like shifting sand than solid ground. So too with rational domain-driven models in the realm of original software design. Software developers have the ability to express rich functionality and translate it into a program that directly serves the needs of the end users for which its intended. It's a laudable goal certainly, and one which is achieved far too infrequently. That's what Domain-Driven Design is all about.

Domain modeling is one of the fundaments of software design these days. In fact, Object-Oriented Programming (OOP) is at the core of most of the domain modeling used on a daily basis on every platform. But the essence of successful domain modeling and domain-driven design is by definition embedded in the experiences of end users, not the theoretical or empiric estimates of engineers. What that means for software companies is simply that without effective end user research and focus group studies, and without seriously robust databases containing reports from end users about flaws (or at least perceived flaws) in software, domain-driven design often becomes something more akin to witchcraft than intelligent and thoughtful planning meant to truly encompass the needs of end users. The foregoing mouthful is brought to you by someone who has lived successfully on both sides of the software design fence. Too often, OOP and its necessary tangents, user interface engines, rendering engines and other things which pre-exist in any established software company's inventory get short shrift during the planning of new products and new versions of existing products. Without project management essentials such as peer review of code, general standards for coding and development and a variety of other rules, programmers may wander in all sorts of directions and into all sorts of trouble. Eric Evans' Domain-Driven Design is written to provide a structured set of ineluctable reminders about all the things needed to make domain-driven OOP worthwhile and powerful.

Evans is no rookie and it shows. His basic demand that all programmers need to buy into the common ground of the lifecycle of domain objects, the need for a plan to write combinable code at every legitimate opportunity, the application of analysis patterns, the need for all programmers to be speaking the same planning and coding language, and finding ways of creating predictability within the confines of complex code is an important lesson. It's also a demand that is lost on even the most experienced programmers too often these days. They tend to forget or at least lose sight of 'the rules' while they're working in highly pressurized development environments. Shortcuts abound, and individual programmers are left to fend for themselves too often as well, even when working on elements which will materially affect security and stability in the final version of the software. Is this sort of weak point in the design and project planning processes one of the reasons that Microsoft products have invited such an incredible onslaught of security breaches and attacks? Would longer product lifecycles built on slightly longer domain-driven design mandates make Microsoft products temporarily less competitive but more reliable and secure? And would greater reliability and security eventually make Microsoft products more competitive and more trusted?

My own experience with complex, non-Microsoft development projects is that more often than not any failure to build into the project the flexibility needed to accommodate dynamic changes is usually the weakest link in the chain. The moment that a product manager comes up in mid-project with a new feature or function that suddenly must be present in order to compete effectively in the marketplace, the design and planning of the entire project is sorely tested. Truly comprehensive project management combined with thorough domain-driven design should unite in such situations to effectively meet that product manager's legitimate needs without unduly stressing everyone into massive coronaries. Forget about enormous entities like Microsoft for a moment because this lesson applies to almost every software company out there.

All of the 'lessons' in the book come at a price which many software developers believe they cannot afford. At the end (of any development project) though, the advantages of coming to market on time with a robust and stable product after a slightly longer development cycle almost always outweigh the ephemeral advantage of arriving in the market early with a buggy pile of code. For example, hardware OEMs want to bundle the most stable and consistently reliable software, not the most feature-ridden less stable versions. Eric Evans seems to also understand that hard-driven programmers who have burned through bad planning, code objects that are nowhere near as versatile as they should be, and endless rounds of bug fixing aren't going to hang around for the next crusade driven by yet more shortsighted and inflexible product and development planning.

Evans stresses directly and by implication that all design must be driven by a clear understanding about how the completed software project will be applied by end users. To my way of thinking, any software architect who truly understands the most common range of end user needs and the potential changes or evolution in those needs, is by implication solidly in touch with the product's lifecycle and, by direct association, domain object lifecycles as well. That knowledge, along with the market realities imposed on the project manager and product manager, provides a secure framework in which domain-driven design can effectively take place. That's what Evans deals with and that's why this book is a good read.

Cons: Although it's readily apparent that Evans directs the book well and has really written it for programmers, Addison Wesley Professional should also be marketing the book at project and product managers.

Pros: Aside from his technical, planning and design skills, Eric Evans can write. The book is well organized, with clear statements of intent, practical and theoretical result comparisons, practical and metaphorical illustrations and examples, and lots and lots of code. Seat-of-the-pants programming is acknowledged as a necessary evil but Evans clearly demonstrates the situations in which even high-speed, short-term projects benefit from at least a few moments of careful domain-driven design. For programmers, project managers, software architects, planners and product managers, this book is a must-read. Every member of your development team, including the project and product managers, will benefit from reading some part of the book. Highly recommended.

Letters to the Editor are welcome and occasionally abused in public. Send e-mail to:





© Copyright 2000-2006 All rights reserved. legal notice
home | previous reviews | forums | about us | search | store | subscribe


Forums Search Home Previous Reviews About Us Store Subscribe