Sustainability as a key Software Architecture Choice

As an architect my day-to-day involves helping my clients solve wicked problems while delighting their customers and staying profitable and sustainable as a business. I do this by obsessively reasoning about software architecture and design choices. As an architect circa 2021 growing climate crisis has me concerned especially as the software industry and the solutions…More

The Domain Stories Series: Search Story

A common story we often hear is related to searching for information. This is a powerful capability to provide through your technology services as the user is keen to interact with your offering and the richer and performant it is, the more value the consumer draws from this. Google it! When analysing the search story,…More

Domain Model != Data Model

One of the smells when practicing DDD (Domain Driven Design) is when you are presented with a Data Model (extracted from an existing set of tables or constructed through rigorous but confirmed hypotheses) and asked to consider this as your Domain Model Domain Model is not the same as a Data Model This is an…More

Business Services and APIs: 101

Business oriented service design and implementation is becoming increasing popular with organisations looking to move beyond traditional systems integration led services. This top-down approach needs to start with business domain owners and their processes, documenting the core and supporting business capabilities they present to their customers so that they can be analysed to produce technology…More

DDD Anti-patterns: 5 things you are doing wrong when doing Domain Driven Design

As a software architect I have been using various design techniques including Domain Driven Design (DDD) which has been incredibly useful for building APIs and Microservices and for strategic architecture consulting engagements requiring discovery/mapping of socio-technical organisation structure and in documenting an API strategy I have also been training architects across organisations to understand and…More

5 Reasons Businesses need an API Catalogue

As a systems integration engineer and architect, I have been part of many successful systems deliveries for internal and external use cases and one of our key deliverables is a service registry. This service registry contains a list of implemented services which is populated by automated delivery pipelines for each environment the service and its…More

Mapping Business Capabilities to Services

One of the key questions around API strategy we get asked is how do we map business capabilities to services. An approach is to use domain driven design and build domain services, in this post we will look at what this looks like Capabilities Businesses domains offer capabilities. Given domains are classified into core, supporting…More

Iterative Domain Model Design: How to stay autonomous

One key question that I hear with Domain Modelling is how do you know if you have your transaction boundary right (so that you build the right aggregate)?  Hidden in this is another question – what if we got our domain aggregate wrong? We can take this further and ask In an agile world, given change…More

Ubiquitous Internet of Things: How ESP32s are changing the game

I have been tinkering with IoT devices for over 10 years now, starting with micro controllers with ethernet ports (later bulky wifi-shields) that were cumbersome to scale out and put onto things. For a true internet of things, we needed low-cost, connectivity enabled, sensor packed devices we would attach to things easily and then read…More

Domain Driven Design (DDD): Core concepts and Enterprise Architecture

If you are building or designing APIs, Microservices or integrating systems then Domain Driven Design (DDD) offers a valuable design technique for mapping business domains to build software services of value Using DDD is incredibly useful when designing services because it helps you rationalise the granularity of your software, the ownership boundaries and model interactions…More

Single view of Customer from Distributed Software: Part II

In the previous post we discussed how to identify some of the challenges around a single view of the customer. In this post we look at some of the ways we manage customer contacts in the enterprise systems and relate them to Domain Driven Design context mapping Patterns 1. Separate ways: We all have our…More

DDD Context Mapping By Example: Customer Management and Customer 360

In the continuation from the previous post, here we look at how to do context mapping from sample real-world examples. In this post we look at how to model Customer Management from a customer support perspective and how Customer 360 would look like as a context map With this post, I hope to give you…More

DDD Context Mapping by example: Policy Management

DDD context mapping can be confusing without real-world examples. In this post we will model sample implementations for two scenarios using bounded context maps and learn to analyse the relationships from the maps. With this post, I hope to give you a fair idea of how to do apply DDD into build good distributed features…More

Single view of Customer from Distributed Software: Part I

Customers are at the heart of every business model and industry. It is therefore no surprise that throughout my journey as a consultant I have witnessed initiatives eventually lead to one trying to get a single, unified view of the customers at they appear in various IT systems The challenge is when technology implementations focus…More

User Journey, User Story vs Domain Story: What’s the difference?

While running DDD workshops with clients, I have had this question come up several times – “What is the difference between a Domain story vs a User Story?” Here is a quick look at differences: User journey story: Is a technique for describing how the user interacts with our business (and business systems) over time…More

Recognising Software Monoliths: 7 key types

A monolith in software architecture a term used to describe some service that is large, complex and shared across different business functionalities. Changing any aspect of this can be daunting not just from an engineering standpoint but from a testing, delivery and release standpoint as well As teams look to decompose monolithic software into domain…More

3 Key Asynchronous Communication Patterns: Ways to talk offline

When integrating systems we often end-up writing asynchronous messaging interfaces for mostly system-to-system communications. This conversation technique is great because it does not require the sender and receiver to stay connected to each other in a session at the same instance in time, is non-blocking and you can make it reliable through message persistence, incremental…More