Skip to main content

Domain-Driven Design: A Strategic Path to Legacy Banking Platform Modernisation

An Initial Reflection

The adoption of technology as a competitive advantage in banking is not a one-time effort but an ongoing process dependent on the social interactions of various stakeholders (Bijker, 1993), demonstrating that successful business transformation goes beyond simply adopting new technologies or platforms, but requires employing acquired technologies to deliver value to customers (Furr and Shipilov, 2019; Kane et al., 2019; Tabrizi et al., 2019). Therefore, the problem for incumbent banks is not the acquisition of technology, but the effective use of it (Sajić et al., 2017).

1. Overview

1.1 Problem Statement

The modern banking industry stands at a critical juncture, grappling with an accelerating pace of change driven by evolving customer expectations, disruptive FinTech innovations, and an increasingly stringent regulatory landscape. At the heart of this challenge often lies a complex tapestry of legacy core banking systems – monolithic architectures burdened by decades of technical debt, intricate interdependencies, and a profound resistance to change. These systems, while once foundational, now impede agility, inflate operational costs, and stifle the rapid innovation essential for competitive advantage. Consequently, the imperative to modernise, or to build anew, is no longer a strategic option but a fundamental requirement for survival and growth. Therefore, the appropriate question is no longer why modernisation is necessary, but rather how to achieve it.

1.2. Introduction to Domain Driven Design

Domain-Driven Design (DDD) is applicable to a broad spectrum of banking use cases. It supports legacy modernisation for banks adopting a phased approach, extending the lifespan of legacy systems while enabling core functionalities through standardised API endpoints. Additionally, DDD can facilitate the complete replacement of core banking solutions, helping institutions avoid vendor lock-in and implement a multi-core strategy that leverages different core platforms tailored to specific product and service specialisations. By focusing on the strategic identification of core domains and the tactical implementation of rich domain models, DDD promises not just technical elegance, but tangible business benefits. It facilitates faster time-to-market for new products and services, reduces the risk associated with large-scale transformations, enhances regulatory compliance through clearer domain boundaries, and ultimately empowers banks to become more adaptive, customer-centric, and resilient in a rapidly changing financial ecosystem. This paper focuses exclusively on the role of DDD in legacy modernisation, with the broader topic of complete core banking transformation to be addressed separately.

1.3. Setting the Foundation for Domain Driven Design

The foundation of DDD lies in defining the core boundary and developing a capability model that identifies the essential business functions the core must encompass. It is crucial to limit the definition of the core to only the absolute core capabilities required by the organisation. Establishing a clear and precise core boundary is not only fundamental for successful implementation but also critical for ensuring efficient future maintenance. Although the interpretation of 'core' capabilities can be subjective and institution-specific, the BIAN Service Landscape offers an excellent foundational reference, as its framework is designed to adapt to each bank's specific context.

A well-defined core boundary facilitates domain separation, allowing for the selective adoption of capabilities that are most relevant to the bank’s needs without mandating the utilisation of all available features. Once the core capabilities are clearly identified, the remaining non-core functionalities can either be migrated to a separate platform—though this often involves significant untangling of dependencies and complex restructuring—or logically separated within the existing legacy platforms. The latter approach is frequently adopted as it provides a more practical and less disruptive path to modernisation while maintaining operational continuity.

1.3.1. The Value it brings-in

Hollowing Out the Legacy Core: The ultimate strategic benefit of this approach is the ability to "hollow out" the legacy core and move towards a thin core banking solution. As business capabilities are identified, encapsulated in domain models, and exposed via the new API layer, the underlying legacy components that implement these capabilities can be systematically extracted and replaced with modern, purpose-built services.

Strategic API Layer for Decoupling and Core Abstraction: The identified business capabilities and their associated domains form the natural blueprint for a new, strategic layer of APIs. These APIs are not merely technical interfaces; they are business-centric APIs that encapsulate specific business functions and domain logic. This layer is strategically positioned on top of the existing legacy core banking system. Due to its very inherent characteristics, the domain service layer significantly reduces the tight coupling that often characterises monolithic systems, where changes in one part can have unpredictable ripple effects across the entire ecosystem.

Incremental Modernisation & Targeted Replacement: This API layer enables a phased, incremental approach to modernisation. New features and services can be built against these stable, business-aligned APIs, rather than directly interacting with the brittle legacy internals. This allows for the gradual replacement or enhancement of legacy components behind the API facade, without disrupting existing consumers. It's a strategy of 'strangling the monolith' – progressively migrating functionality out of the legacy system and into new, domain-aligned services. This process allows banks to strategically prioritise which parts of the legacy system to modernise first, based on business value, risk, and technical feasibility. Instead of a risky 'big bang' replacement, it becomes a series of smaller, more predictable transformations.

Reduced Complexity: Each extracted capability reduces the complexity and footprint of the legacy system. Over time, the legacy core shrinks, becoming a much smaller, more manageable entity that primarily handles only the most fundamental, often immutable, ledger-based functions.

Agility and Innovation: With a thinner, more focused core and a rich ecosystem of domain-aligned services, the bank gains unprecedented agility. New products, services, and regulatory requirements can be addressed by developing or modifying specific domain services, rather than attempting to untangle the entire legacy monolith.

2. Key Activities - Domain Driven Design Approach

Domain-Driven Design (DDD) is not merely a technical implementation but a strategic, iterative journey that necessitates meticulous and focused planning. It represents a fundamental shift in how an organisation perceives and models its business capabilities, moving beyond superficial technical concerns to deeply understand the core domain.

This comprehensive journey cannot be executed as a single, monolithic task. Instead, it is best approached by breaking it down into a series of interdependent activities. Each step builds upon the insights and outcomes of the previous one, ensuring a cohesive and robust design. This structured approach, underpinned by careful consideration and strategic foresight, is crucial for developing a well-thought-out domain design that truly reflects the business's complexities and objectives, ultimately leading to more resilient, adaptable, and maintainable systems.

Skip to description

Figure 1: Chain of Tasks – Domain Driven Design

3. Three Key Pillars of Domain Driven Design

When approaching Domain-Driven Design (DDD), three key aspects demand meticulous consideration to ensure a successful and future-proof implementation:

Three Key Pillars of Domain Driven Design
Three Key Pillars of Domain Driven Design

Defining the Core Boundary

Crafting Granular Domain Services

Standardised & Future-Proof Payload Design

Rationale:
Business capabilities are fundamental, technology-independent building blocks of a bank's functions, which can be decomposed for clear functional responsibility. A rigorous analysis is required to distinguish essential core capabilities from those that can be externalized, leading to the identification of a ‘Thin Core’.

Intent:

  • To define and structure business capabilities hierarchically.
  • To establish clear functional responsibility and bounded contexts.
  • To rigorously distinguish between core and externalizable capabilities.
  • To identify the ‘Thin Core’ - critical, irreducible functionalities.
  • To reduce complexity and foster agility.
  • To prevent vendor lock-in by enabling external support for non-core functions.

 

 

 

 

 

 

 

 

 

 

 

Rationale:
Designing granular domain microservices, acting as an abstraction layer, is crucial for achieving loose coupling, independent deployability, and enhanced maintainability, thereby insulating consumers from core banking complexities and changes.

Intent:

  • To Design granular domain microservices.
  • To Establish these services as the sole integration point and abstraction layer for the core banking system.
  • To Break down capabilities into fine-grained, autonomous services.

Principles:

  • Must provide absolute granular banking operation functions
  • Each domain microservices must be exposed from the lowest level of capabilities.
  • Each microservice must provide non-overlapping unique functionality.
  • Same Microservice can be used across different products but with separate API endpoint promoting reusability

 

 

 

 

Rationale:
Careful design of data payloads and robust, standardized domain service contracts are critical for microservices to ensure seamless accommodation of changes and new functionalities, achieve interoperability, and safeguard against future architectural shifts.

Intent:

  • To carefully design data payloads for these domain microservices.
  • To establish robust, standardized domain service contracts.
  • To define the interfaces and data structures that services use to communicate.
  • To adopt a futuristic approach to contract design, including considerations for versioning and extensibility.
  • To ensure seamless accommodation of changes to underlying systems or the introduction of new functionalities without disrupting existing consumers.

 

4. Use Case: Legacy Modernisation – Untangling the Monolith

Consider a well-established retail bank that has been operating for decades using one or more legacy core banking systems. These systems, built over time and often reliant on outdated technologies, have evolved into a complex, "spaghetti-like" architecture, where business logic, data access, and presentation layers are tightly interwoven. Adding new features, integrating with FinTech partners, or complying with new regulations takes an inordinate amount of time and resources, often introducing unintended side effects across the entire system. The bank faces a critical dilemma: the cost and risk of a "big bang" replacement are prohibitive, yet the current system severely hampers its ability to innovate and compete.

4.1. Rationale for Applying DDD

In this scenario, DDD provides a strategic roadmap for incremental, low-risk modernisation, transforming the monolithic beast into a more agile ecosystem.

  • Strategic Decomposition and Bounded Contexts:

DDD's emphasis on identifying Bounded Contexts is paramount. Instead of attempting to understand and refactor the entire monolith at once, the bank can use DDD principles to identify natural seams and logical groupings of business capabilities within the existing system. For example, 'Customer Onboarding', 'Loan Origination', 'Payment Processing', and 'Account Management' might emerge as distinct bounded contexts, even if they are currently deeply coupled within the legacy code.

  • Creating Unique, Non-Overlapping Domain Services:

Once these bounded contexts are identified, the bank can begin to design and implement unique, non-overlapping domain services that encapsulate the logic and data for each specific business capability. These services are built on top of the legacy core, acting as an abstraction layer. Initially, these services might simply call (pass-through) into the legacy system, but they provide a clean, domain-aligned API.

  • Increased Standardisation and Ubiquitous Language:

DDD mandates the creation of a Ubiquitous Language – a shared vocabulary between business experts and technical teams. This ensures that business concepts are consistently understood and represented across all aspects of the system, from requirements to code. This standardisation is crucial for large-scale banking systems, where misinterpretations can lead to significant financial and regulatory risks. It also simplifies onboarding for new team members and reduces communication overhead.

  • Seameless Integration:

With clearly defined domains and bounded contexts, integration points become explicit and well-governed. Each domain service exposes a clean, business-oriented API, making it straightforward to integrate with other internal systems, external partners, or FinTech solutions. This avoids the "point-to-point" integration nightmares often seen in systems built without a clear architectural vision. The focus is on integrating business capabilities, not just data.

  • The "Strangler Fig" Pattern:

This approach naturally lends itself to the "Strangler Fig" pattern. As new features are required, or existing legacy functionality needs to be enhanced, the bank develops new, modern domain services that implement these capabilities. These new services gradually "strangle" the corresponding functionality within the legacy monolith. For instance, a new 'Customer Onboarding' service might be built, taking over the responsibility from the legacy system. Over time, the legacy code for customer onboarding can be retired or refactored, reducing the monolith's footprint.