Figure 1: A navigation map for strategic distillation [1]

Strategic Distillation

When developing systems with complex domains, how do we tackle the central problem without being distracted by secondary issues? A layered architecture helps by separating domain concepts from technical logic, but in a large system even the isolated domain layer may be unmanageably complex.

One of the essential lessons to be learned from Domain-Driven Design (DDD) is defining and focusing on the core domain. This process is known as distillation. Distilling means separating the components of a mixture in order to extract its essence. In software design, this translates to the…


Figure 1: A navigation map for model integrity patterns [1]

Strategic Design

Domain-Driven Design (DDD) tackles software complexity at different levels. Strategic design is the subset of DDD that operates at a higher level. Its main goal is to help dealing with large models, and its challenge is to achieve modularity without compromising the benefits of integrating different business operations. Because in large systems such design decisions must be negotiated between teams, strategic design does not take into account only technical considerations, but it often becomes the intersection between design and politics.

Defining explicit context boundaries is not only one of the…


According to the dictionary, trade-off is “A balance achieved between two desirable but incompatible features; a compromise.” Put in other words, it means we must sacrifice something in order to gain something else. Trade-offs are limitations imposed by reality — they are reality saying to us: “You can’t have your cake and eat it too! You have to make a choice!”

Trade-offs are present in a wide variety of disciplines. One of the fields in which trade-offs are most applied is economics. In economic science, trade-offs are often expressed in terms of opportunity cost, which is the “The loss of…


Domain-Driven Design, also known as DDD, is an approach to software development that separates the whole big project unity into smaller and simpler projects, each representing a distinct domain — “domain” being the particular field of knowledge for which the software is being built. By extension, it also tends to separate the general development team into smaller teams, each working on the respective domain for which it is responsible. To better understand the concept of Domain-Driven Design, first we need to ask why we should apply it instead of any different software development approach.

Suppose DDD is not being applied…


Kanban is a project management methodology that aims at extracting maximum result from the development process, while being as precise as possible and avoiding waste. It is often (incorrectly) seen as just a board where cards are put. It is much more than that. Kanban is a set of principles, and it even has its own manifesto.

The Lean-Kanban Manifesto states which items are preferable over others, the first one being explicit conversations over intuitive abilities. This means that everyone must be clear in declaring what they want and expect, and no one should try to guess what has to…


O Manifesto Ágil é a declaração dos princípios que constituem o desenvolvimento ágil de software. Em Engenharia de Software, o conjunto desses princípios é uma proposta de processo de desenvolvimento cujos objetivos são qualidade e velocidade na entrega de produtos de software, garantindo assim a satisfação do cliente.

O manifesto destaca 4 itens principais, e em cada um deles faz uma comparação entre duas questões indicando qual é preferível de acordo com as metodologias ágeis. O primeiro desses quatro itens é o foco mais em indivíduos e interações do que em processos e ferramentas. De nada adianta o projeto ser…

Rafael Ritter

Software Architect at ilegra

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store