Interfaces and Models

Posted 9 months, 2 weeks ago | Originally written on 14 Dec 2021

We all want happy customers but more than that we want high quality even when the customers are yet to beat down our door. There are two avenues where quality lives: front office and back office. Your customers never see your back office but they feel its effects through the front office. If the back office is organised and everything runs smoothly then the chances of your customers enjoying the front office experience are vastly improved. All this to the extent that the front office is in line with delivering a good experience.

In effect, there are two main types of users: front office users and back office users. Back office users deliver products and services in a way to ensure front office users receive quality. Quality is all that matters and there are many ways to do this. You don't have to know them all as long as your customers are satisfied. That's a long story for another day.

Both the front and back office users interact with some part of your system and it is these components which you should put all your efforts into.

  • Front office users interact with interfaces. Interfaces are points where use happens.
  • Back office users also interact with interfaces but coupled to models. Models are mental representations of the internal components of your system.

These two element - interfaces and models - are the heart of design. You want easy to use interfaces throughout. Interaction between system components happens exclusively at interfaces and operations are build around models.

Good interfaces serve the users right where they are; they don't need to dramatically modify their current state of knowledge. In fact, they go one step further: they augment the user's current understanding of the domain.

Models capture domain knowledge for action. Good models are immune to moderate changes in the domain but make use of verbs and nouns in the domain. They capture both the declarative and interactive relations between the domain entities in a consistent way.

Everything else is implementation detail.