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

Strategic DDD and Context Mapping for Architects

Conway’s law says the structure of our organisation guides how we build software and this holds specially true today as we build distributed software services rapidly and at scale. So how do we map business domains, technology services, engineering teams, communication patterns, dependencies as enterprise architects and integration domain architects? The problem 1. Growing disconnect…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

Understanding Error Handling in Integrated Solution: Making things robust

Integration engineering regardless of the architectural style (EAI, microservices, SOA, accident etc) must ensure the end solution is robust and reliable. These are two key attributes of any solution and rely on handling scenarios when things do not go exactly as planned when two systems talk to each other over a network Planning for unexpected…More

Software Monoliths

Companies need to modernize software and engineering to scale to reach new customers. Many find it increasingly hard to deliver outcomes safer and faster in a rapidly changing business ecosystem because of internal complexity from existing practices, systems and integrations. One cause is “shared” collaboration of resources between teams and in this post we explore these monoliths and monolithic practices More

Asynchronous Communication Patterns: Not all events are the same

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

Domain Service Design and Patterns

Domain services implement core logic for a business domain and are a relied upon by experience and consumer services. Domain services can be self contained and store the business logic and state or rely on an external provider system (translating from a “raw system format” to a “canonical” domain format) In this post we look…More

Salesforce Integration: Context and Patterns

Integrating with Salesforce be in a Marketing or Customer management context is the norm these days. Salesforce offers a lot of flexibility for information exchange, storage and for capturing events on change This post lists the interaction patterns we observe with Salesforce, the usage contexts, issues and best-practise Salesforce Inbound Patterns How do we create…More

How to build APIs with the right abstraction: SOAP, REST, ODATA

Leaky abstractions can be bad, especially in the context of APIs we expose to the world. Here are some thoughts on how to be less leaky and achieve more self-service with the APIs you build Modern software is built over the network with systems hooked-up either privately within the internal enterprise eco-system or with a…More

Common Service Caching Patterns

Caché implies to hide something. In a technology context this is “some service hides some data for a period of time (minutes to years)” A cache is a bit of information we stash away to better serve the clients using our service. Some of the questions cache implementers face are: Cache expiry and invalidation Mechanism…More

The difference between Open APIs and an Open API Specification

RESTful APIs can be internal (your company’s only) or public facing (Twitter). Thus internal APIs are called “Private APIs” and open to the public APIs are called “Open APIs” Now, while building an API accelerator for our clients I was asked by a well meaning colleague if this was an Open API; the intent was…More

From Project to Product Teams: Implementing the Inverse Conway Move for better Software

Modern software engineering techniques within organisations deliver “distributed features” using agile techniques. These features are distributed across different systems and integrated to provide an end-to-end experience. Traditional project delivery brings in  members from different system oriented teams to deliver these features in a loose and ad-hoc fashion and dis-bands the team after a project is…More