So, I liked Don’s “Agility and the Big Dog” post.

I wanted to selfishly hijack the content to talk about something else though. The question to me is that as we start thinking about messages and services is it really all about the message? What do customers actually model?

To be clear… the point I am really curious about is how will our customers model the elements in their domain when services and process abound? I can naively think of a few options:

1: Customers still drive for domain models of their existing systems and then expose messages that are projections of the elements of the models.

2: Customers try and “boil the ocean” with enterprise-wide canonical schemas and then systems have projections of the canonical schema as their internal models. The interaction between a system and another system is represented by a message that also expressed in terms of projections of the canonical schema.

3: Customers just model the messages that are meaningful to a process and write logic that acts on the messages. There is no internal model for an application except the implicit model which is the aggregate of messages upon which it acts.

Of these options I like option 1 the best (or do I like 3 best I am confused). I have talked about entity aggregation in the past and about the virtues and troubles of canonical schemas. I still think entity aggregation is a good thing as are canonical schemas but I think that trying to define enterprise-wide schemas is a large undertaking for those with the strongest of constitutions. I prefer to think of a composition and projection story for models. I think that systems can define internal models in the manner that best suits their needs… I argue that these, at least for the near-term, will still look much like traditional domain models. I think that composite systems exist on top of these systems and they compose reference and activity data from multiple systems… in fact what they actually do is compose messages from these lower systems wherein the messages encapsulate reference and activity data which are projections of the internal models to suit the concern specific perspective of the composite app. The internal model for the composite app is in turn the aggregate model from the messages that it consumes (whoops beginning to sound like option 3). Yet another composite application may consume messages from the first composite app and will indeed now have a model based on the messages that it consumes which are indeed projections of the previous model.

I guess I still need to do some thinking and reading around this...