# DDD

Published articles for DDD.

This is one page of public article previews, not the complete archive. Follow Next page to continue. Summaries are not the original full articles.

## Fragments: June 16

DevFeed: [Fragments: June 16](<https://devfeed.tech/articles/fragments-june-16-4429.md>)

Original publisher: [Read original article](<https://martinfowler.com/fragments/2026-06-16.html>)

Author: Martin Fowler (martin@martinfowler.com)

Published: 2026-06-16T12:44:00Z

Content type: article

Language: en

Sources: [Martin Fowler](<https://devfeed.tech/sources/martin-fowler.md>)

Topics: [Domain-driven design (DDD)](<https://devfeed.tech/topics/domain-driven-design.md>), [Large Language Model](<https://devfeed.tech/topics/llm.md>), [context window](<https://devfeed.tech/topics/context-window.md>), [Programming](<https://devfeed.tech/topics/programming.md>)

Tags: [conference](<https://devfeed.tech/tags/conference.md>), [context-window](<https://devfeed.tech/tags/context-window.md>), [ddd](<https://devfeed.tech/tags/ddd.md>), [event](<https://devfeed.tech/tags/event.md>), [llm](<https://devfeed.tech/tags/llm.md>), [programming](<https://devfeed.tech/tags/programming.md>)

### AI overview

This article fragment discusses how large language models are changing the experience of programming and argues that Domain-Driven Design may remain useful or become more important. It also highlights managing an LLM context window and using distinct conversation registers for exploring, brainstorming, deciding, and implementing.

### Source excerpt

"Prag Dave" Thomas (co-author of the outstanding "Pragmatic Programmer") has loved programming since he was young. Programming was how I could express myself. I wasn't an artist. When I sing, dogs howl. When I draw, friends say, "Very nice. What is it?" I didn't connect particularly well with people, even though I wanted to. And yet, when I wrote my first program, I discovered a medium which let me convert thought into action. All the ideas that were bottled up behind a wall of frustration suddenly had an outlet. The LLM revolution worried him. Would they remove all that fun stuff? Happily he found it was the opposite. Like Kent Beck and others have told me, programming with LLMs is more fun than ever. His post lists reasons why: removing drudgery, speeding up feedback loops, reviving long abandoned projects, and exploring new technologies. ❄ ❄ ❄ ❄ ❄ I've spent a few days at the DDD Europe conference, which was a very enjoyable event. With all the changes to programming due to LLMs, I suspect Domain-Driven Design is going to be one of those things that will continue to be useful, indeed may become even more important. The highlight of the conference was the opening keynote by Eric Evans, who gave a fascinating description of some of his experimentation with LLMs over the last couple of years. Once the video for that talk becomes available, I'll link to it - hopefully it won't be too long. I also particularly enjoyed talks from Violetta Pidvolotska, Kiran Prakash, Tom de Wolf, and Chelsea Troy. Gien Verschatse interviewed Eric Evans and me for an hour so so - again I'll pass that link on when the video gets published. One snippet that stood out to me was from Chelsea Troy. The main thrust of her talk was managing the context window of LLMs so that it was kept in a healthy state. Much of what she said was familiar, but one thing I hadn't thought about was her thoughts about the different registers of conversations with LLMs. These registers are different styles of con

## Building a Global, Event-Driven Platform: Our Ongoing Journey, Part 1

DevFeed: [Building a Global, Event-Driven Platform: Our Ongoing Journey, Part 1](<https://devfeed.tech/articles/building-a-global-event-driven-platform-our-ongoing-journey-part-1-20442.md>)

Original publisher: [Read original article](<https://vinted.engineering//2026/01/09/building-global-event-driven-platform-part-1/>)

Author: Dejan Menges

Published: 2026-01-09T00:00:00Z

Content type: article

Language: en

Sources: [Vinted](<https://devfeed.tech/sources/vinted.md>)

Topics: [event driven](<https://devfeed.tech/topics/event-driven.md>), [Domain-driven design (DDD)](<https://devfeed.tech/topics/domain-driven-design.md>), [Latency](<https://devfeed.tech/topics/latency.md>), [Software](<https://devfeed.tech/topics/software.md>), [Development](<https://devfeed.tech/topics/development.md>)

Tags: [architecture](<https://devfeed.tech/tags/architecture.md>), [ddd](<https://devfeed.tech/tags/ddd.md>), [development](<https://devfeed.tech/tags/development.md>), [distributed](<https://devfeed.tech/tags/distributed.md>), [domain-driven-design](<https://devfeed.tech/tags/domain-driven-design.md>), [event-driven](<https://devfeed.tech/tags/event-driven.md>), [latency](<https://devfeed.tech/tags/latency.md>), [patterns](<https://devfeed.tech/tags/patterns.md>), [scale](<https://devfeed.tech/tags/scale.md>), [software](<https://devfeed.tech/tags/software.md>)

### AI overview

Vinted describes why its growing platform outgrew a monolithic architecture, citing regional latency, unpredictable load, large failure domains, and tangled responsibilities. The article outlines the use of Domain-Driven Design to identify domains and guide team and architecture restructuring, followed by a move toward event-driven communication and sagas.

### Source excerpt

A few years ago, our platform reached a point where the way we'd always built software simply wasn't enough anymore. The monolith that powered our early success had served us well, but as the business expanded across the continent, it started showing real limits. Global growth forced us to confront problems we couldn't ignore: latency across regions, unpredictable load patterns, and an architecture that didn't match the scale of the company. We needed to rethink how the entire system worked, from the shape of our data to the boundaries between teams.

## Deployment-Driven Development

DevFeed: [Deployment-Driven Development](<https://devfeed.tech/articles/deployment-driven-development-22995.md>)

Original publisher: [Read original article](<https://bravenewgeek.com/deployment-driven-development/>)

Published: 2024-11-11T22:57:13Z

Content type: article

Language: en

Sources: [Brave New Geek](<https://devfeed.tech/sources/brave-new-geek.md>)

Topics: [Deployment](<https://devfeed.tech/topics/deployment.md>), [Domain-driven design (DDD)](<https://devfeed.tech/topics/domain-driven-design.md>), [software-architecture](<https://devfeed.tech/topics/software-architecture.md>), [Platform Engineering](<https://devfeed.tech/topics/platform-engineering.md>), [Testing](<https://devfeed.tech/topics/testing.md>), [Tech Debt](<https://devfeed.tech/topics/tech-debt.md>), [sdlc](<https://devfeed.tech/topics/sdlc.md>)

Tags: [architecture](<https://devfeed.tech/tags/architecture.md>), [ddd](<https://devfeed.tech/tags/ddd.md>), [deployment](<https://devfeed.tech/tags/deployment.md>), [deployment-driven-development](<https://devfeed.tech/tags/deployment-driven-development.md>), [development-process](<https://devfeed.tech/tags/development-process.md>), [devops](<https://devfeed.tech/tags/devops.md>), [domain-driven-design](<https://devfeed.tech/tags/domain-driven-design.md>), [konfigurate](<https://devfeed.tech/tags/konfigurate.md>), [platform-engineering](<https://devfeed.tech/tags/platform-engineering.md>), [qa](<https://devfeed.tech/tags/qa.md>), [sdlc](<https://devfeed.tech/tags/sdlc.md>), [security](<https://devfeed.tech/tags/security.md>), [tech-debt](<https://devfeed.tech/tags/tech-debt.md>)

### AI overview

The article introduces Deployment-Driven Development as a complement to Domain-Driven Design, focusing on delayed feedback and delivery obstacles that affect software architecture, testing, security, compliance, and production readiness.

### Source excerpt

Most people use "DDD" to refer to Domain-Driven Design, which is a useful tool for thinking about API boundaries and system architecture. It provides a way to map a business problem into software. At Real Kinetic, we regularly help our clients utilize Domain-Driven Design as well as other strategies to architect their systems, avoid some of the pitfalls of DDD, and build an effective foundation for designing software. But this DDD only speaks to one small aspect of building and shipping software.

## Introduction to Domain-Driven Design and Domain Models

DevFeed: [Introduction to Domain-Driven Design and Domain Models](<https://devfeed.tech/articles/from-database-to-domain-elevating-software-development-with-ddd-introduction-30792.md>)

Original publisher: [Read original article](<https://devblog.kogan.com/blog/from-database-to-domain-ddd-introduction>)

Author: Renlester De Guzman

Published: 2024-02-27T05:18:38Z

Content type: tutorial

Language: en

Sources: [Kogan.com](<https://devfeed.tech/sources/kogan-com.md>)

Topics: [Domain-driven design (DDD)](<https://devfeed.tech/topics/domain-driven-design.md>), [Databases](<https://devfeed.tech/topics/databases.md>), [Architecture & Design](<https://devfeed.tech/topics/architecture-design.md>)

Tags: [architecture](<https://devfeed.tech/tags/architecture.md>), [database](<https://devfeed.tech/tags/database.md>), [ddd](<https://devfeed.tech/tags/ddd.md>), [domain-driven-design](<https://devfeed.tech/tags/domain-driven-design.md>), [leadership](<https://devfeed.tech/tags/leadership.md>), [process](<https://devfeed.tech/tags/process.md>)

### AI overview

An introduction to Domain-Driven Design (DDD), covering its focus on business models, core domain-model concepts, and the contrast between domain-level and database-level business logic.

### Source excerpt

In the complex landscape of software development, aligning design methodologies with business needs is crucial. Domain-Driven Design (DDD) emerges as a key approach in addressing this alignment, especially in projects characterized by intricate business rules and processes. This methodology stands in contrast to traditional practices, such as embedding business logic within databases, offering a more adaptable and business-focused perspective. Section 1: Understanding Domain-Driven Design Definition and Focus DDD is centered around developing software that intricately reflects the business models it aims to serve. It emphasizes a deep understanding of the business domain, ensuring that the software development process is driven by this knowledge, thereby facilitating a common language between developers and business stakeholders. History and Evolution Pioneered by Eric Evans, DDD has grown from a set of principles into a comprehensive approach, widely recognized for its ability to tackle complex business challenges through software. Aligning Design with Business Needs The essence of DDD lies in its focus on business-relevant software development, a principle that aligns closely with the need for software to be adaptable and directly linked to business objectives. Section 2: Core Concepts of Domain-Driven Design In DDD, concepts like Entities, Value Objects, Aggregates, Domain Events, Repositories, and Bounded Contexts form the foundation of a robust domain model. Entities and Value Objects: Entities are defined by their identity, playing a crucial role in maintaining business continuity, while Value Objects add depth and integrity to the domain model. Domain Model vs Database-Level Logic The decision to embed business logic in the domain model rather than in the database is pivotal. Traditional database-centric approaches can lead to scalability challenges and obscure the business logic from the development team. A domain-centric approach, as proposed by DDD, enhanc

## jOOQ DAOs, CRUD Access, and the N+1 Query Problem

DevFeed: [jOOQ DAOs, CRUD Access, and the N+1 Query Problem](<https://devfeed.tech/articles/to-dao-or-not-to-dao-28968.md>)

Original publisher: [Read original article](<https://blog.jooq.org/to-dao-or-not-to-dao/>)

Author: lukaseder

Published: 2023-12-06T13:41:52Z

Content type: opinion

Language: en

Sources: [jOOQ](<https://devfeed.tech/sources/jooq.md>)

Topics: [CRUD](<https://devfeed.tech/topics/crud.md>), [SQL](<https://devfeed.tech/topics/sql.md>), [Domain-driven design (DDD)](<https://devfeed.tech/topics/domain-driven-design.md>), [Transactions](<https://devfeed.tech/topics/transactions.md>), [account](<https://devfeed.tech/topics/account.md>)

Tags: [account](<https://devfeed.tech/tags/account.md>), [api](<https://devfeed.tech/tags/api.md>), [crud](<https://devfeed.tech/tags/crud.md>), [dao](<https://devfeed.tech/tags/dao.md>), [data](<https://devfeed.tech/tags/data.md>), [ddd](<https://devfeed.tech/tags/ddd.md>), [developers](<https://devfeed.tech/tags/developers.md>), [join](<https://devfeed.tech/tags/join.md>), [jooq](<https://devfeed.tech/tags/jooq.md>), [jooq-in-use](<https://devfeed.tech/tags/jooq-in-use.md>), [optimisation](<https://devfeed.tech/tags/optimisation.md>), [repository](<https://devfeed.tech/tags/repository.md>), [sql](<https://devfeed.tech/tags/sql.md>), [transactions](<https://devfeed.tech/tags/transactions.md>)

### AI overview

This opinion article examines jOOQ's DAO API and the tendency to use DAOs or repositories for quick CRUD access. It argues that this approach can obscure query design and lead to inefficient patterns such as N+1 queries, while showing how explicit SQL and bulk operations can improve query structure and performance.

### Source excerpt

jOOQ's DAO API is one of jOOQ's most controversial features. When it was first implemented, it was implemented merely: There's a strong hint about the third bullet given how popular Spring Data's repository "pattern" is. A lot of developers just want to quickly fetch and store data, without giving individual queries much thought. A fun ... Continue reading To DAO or not to DAO ->

## Pleasant debugging with GDB and DDD

DevFeed: [Pleasant debugging with GDB and DDD](<https://devfeed.tech/articles/pleasant-debugging-with-gdb-and-ddd-21492.md>)

Original publisher: [Read original article](<https://begriffs.com/posts/2022-07-17-debugging-gdb-ddd.html>)

Published: 2022-07-17T00:00:00Z

Content type: article

Language: en

Sources: [Joe Nelson](<https://devfeed.tech/sources/joe-nelson.md>)

Topics: [debugging](<https://devfeed.tech/topics/debugging.md>), [configuration](<https://devfeed.tech/topics/configuration.md>), [Terminal](<https://devfeed.tech/topics/terminal.md>), [Linux](<https://devfeed.tech/topics/linux.md>), [Scripting](<https://devfeed.tech/topics/scripting.md>), [Text-based user interface](<https://devfeed.tech/topics/tui.md>)

Tags: [article](<https://devfeed.tech/tags/article.md>), [configuration](<https://devfeed.tech/tags/configuration.md>), [ddd](<https://devfeed.tech/tags/ddd.md>), [debugger](<https://devfeed.tech/tags/debugger.md>), [debugging](<https://devfeed.tech/tags/debugging.md>), [gdb](<https://devfeed.tech/tags/gdb.md>), [linux](<https://devfeed.tech/tags/linux.md>), [scripting](<https://devfeed.tech/tags/scripting.md>), [terminal](<https://devfeed.tech/tags/terminal.md>)

### AI overview

This article presents configuration and scripting techniques for making GDB debugging more pleasant on Linux and BSD systems. It compares several interface-customization approaches and focuses on using the Data Display Debugger (DDD), including workarounds for its compatibility problems with recent GDB versions and its remote SSH support.

### Source excerpt

2022-07-17 GDB is an old and ubiquitous debugger for Linux and BSD systems that has extensive language, processor, and binary format support. Its interface is a little cryptic, but learning GDB pays off. This article is a set of miscellaneous configuration and scripting tricks that illustrate reusable principles. It assumes you're familiar with the basics of debugging, like breakpoints, stepping, inspecting variables, etc. Table of contents By default, GDB provides a terse line-based terminal.

## Implementing Equality in Ruby

DevFeed: [Implementing Equality in Ruby](<https://devfeed.tech/articles/implementing-equality-in-ruby-1442.md>)

Original publisher: [Read original article](<https://shopify.engineering/implementing-equality-in-ruby>)

Author: Denis Defreyne

Published: 2022-05-26T14:00:01Z

Content type: tutorial

Language: en

Sources: [Shopify Engineering](<https://devfeed.tech/sources/shopify-engineering.md>), [Shopify Engineering - Shopify Engineering](<https://devfeed.tech/sources/shopify-engineering-shopify-engineering.md>)

Topics: [Ruby](<https://devfeed.tech/topics/ruby.md>), [Programming](<https://devfeed.tech/topics/programming.md>), [Domain-driven design (DDD)](<https://devfeed.tech/topics/domain-driven-design.md>), [Rails](<https://devfeed.tech/topics/rails.md>), [Object-relational mapping](<https://devfeed.tech/topics/orm.md>)

Tags: [ddd](<https://devfeed.tech/tags/ddd.md>), [identity](<https://devfeed.tech/tags/identity.md>), [model](<https://devfeed.tech/tags/model.md>), [models](<https://devfeed.tech/tags/models.md>), [orm](<https://devfeed.tech/tags/orm.md>), [programming](<https://devfeed.tech/tags/programming.md>), [ruby](<https://devfeed.tech/tags/ruby.md>)

### AI overview

This article explains how equality works in Ruby, including the roles of #==, #eql?, #equal?, and #===. It presents general implementation patterns for entities, whose identity is based on an explicit ID, and value objects, whose identity is determined by their complete value. It also relates these patterns to domain-driven design and Ruby on Rails ActiveRecord models.

### Source excerpt

Ruby is one of the few programming languages that get equality right. I often play around with other languages, but keep coming back to Ruby. This is because Ruby's implementation of equality is so nice. Let's walk through all forms of equality in Ruby and how to implement them.

## Памятка начинающего программиста

DevFeed: [Памятка начинающего программиста](<https://devfeed.tech/articles/article-30403.md>)

Original publisher: [Read original article](<https://www.mdubakov.com/posts/rookie-programmer>)

Published: 2016-11-09T09:12:28Z

Content type: opinion

Language: ru

Sources: [Blog by Michael Dubakov](<https://devfeed.tech/sources/blog-by-michael-dubakov.md>)

Topics: [ASP.NET](<https://devfeed.tech/topics/aspnet.md>), [Domain-driven design (DDD)](<https://devfeed.tech/topics/domain-driven-design.md>), [Artificial Intelligence](<https://devfeed.tech/topics/ai.md>)

Tags: [ai-ml](<https://devfeed.tech/tags/ai-ml.md>), [asp-net](<https://devfeed.tech/tags/asp-net.md>), [ddd](<https://devfeed.tech/tags/ddd.md>)

### AI overview

A Russian-language advice article for programmers with a few years of experience. It recommends seeking responsibility early, following industry trends, learning English, blogging, studying broader software concepts, building personal projects, and avoiding prolonged outsourcing work.

### Source excerpt

Я часто получаю резюме от программистов. Возьму на себя смелость дать несколько конкретных советов тем, кто в профессии пару лет. Конечно, советы только для тех, кто хочет стать отличным программистом. 1. Первую работу найти непросто. Раньше было очень непросто, сейчас, конечно, все гораздо легче. Но если у вас получится, постарайтесь не попасть сразу в огромную корпорацию. В таких местах слишком много формализма, устаревших процессов и мест, где можно не напрягаться. И нет ничего хуже для новичка быть в расслабленной атмосфере на задворках аутсорса. Лучше выбрать стартап с маленькой зарплатой и большой неопределенностью, пока вы можете себе это позволить. Там у вас будет больше ответственности и развитие будет идти гораздо быстрее. Год за два :) 2. Всеми правдами и неправдами избегайте старых технологий. ASP.NET, O/R mappers, ExtJS, MSSQL, Oracle, Windows -- оставьте вот это все ветеранам. Вам может быть пока сложно понять, куда все двигается, но постарайтесь интересоваться трендами отрасли. Не все новое одинаково полезно, но со временем вы научитесь выбирать и лучше поймете, чего вы хотите и что вам интересно. 3. Учите английский. Вы как минимум должны научиться свободно читать техническую литературу. Без этого крайне сложно стать хорошим программистом. 4. Заведите блог. Вам кажется, что вам не о чем писать. Конечно же, это не так. Любое новое знание, усвоенное вами и выраженное письменно с учетом ваших личных переживаний и мыслей, может быть полезно другим. Напишите 100 постов. Потом можно решить, продолжать или нет. 5. Не зацикливайтесь на книгах о технологиях. Конечно, у вас есть явная потребность углубиться в ASP.NET на работе, но разбавляйте такие книги более абстрактной литературой. Почитайте про ООП и ФП, почитайте про дизайн систем, почитайте о разных концепциях (микросервисы, конкурентность, DDD, AI/ML). 6. Программируйте дома. Начните свой проект. Неважно какой. Простое мобильное приложение. Движок для сайта. Трекер расходов. Выбор следующего фильма для п

## Eric Evans in the house

DevFeed: [Eric Evans in the house](<https://devfeed.tech/articles/eric-evans-in-the-house-31992.md>)

Original publisher: [Read original article](<https://tech.finn.no2015/03/10/eric-evans-in-the-house/>)

Author: Nicolai Høge

Published: 2015-03-10T14:37:49Z

Content type: article

Language: en

Sources: [Finn.no](<https://devfeed.tech/sources/finn-no.md>)

Topics: [Domain-driven design (DDD)](<https://devfeed.tech/topics/domain-driven-design.md>), [Architecture & Design](<https://devfeed.tech/topics/architecture-design.md>), [Enterprise Architecture](<https://devfeed.tech/topics/enterprise-architecture.md>)

Tags: [architecture](<https://devfeed.tech/tags/architecture.md>), [course](<https://devfeed.tech/tags/course.md>), [ddd](<https://devfeed.tech/tags/ddd.md>), [domain-driven-design](<https://devfeed.tech/tags/domain-driven-design.md>), [enterprise-architecture](<https://devfeed.tech/tags/enterprise-architecture.md>), [workshop](<https://devfeed.tech/tags/workshop.md>)

### AI overview

FINN.no invited Eric Evans for a week of strategic Domain-Driven Design courses, workshops, and a presentation. The article describes the organization's effort to move from a monolith toward a more flexible and scalable architecture.

### Source excerpt

In our continuing quest to break up our old monolith and create a more flexible and scalable architecture, we have realized that we need to look at some new tools and methods. One of the more promising approaches was Domain Driven Design, a term coined by Eric Evans in his Big Blue Book Quite a few people in FINN has read (at least parts of) the Domain-Driven Design book, and we did some preliminary efforts to map our domains and look at our bounded contexts. We quickly realized that this was a very complex exercise, even with highly motivated tech and product people present. We figured we needed some help to get us on the right track. If you need help and information about DDD, why not get it straight from the horse's mouth? So we got Eric Evans to visit us for a week at the end of February. We needed to make the most of our time with Eric, so we set up a rather extensive agenda: Day Subject Attending Monday Strategic Domain Driven Design Course FINNs CTO, our functional product directors, the members of our enterprise architecture group including our Chief Enterprise Architect, several key developers and a couple of our international friends from Schibsted Classified Media Tuesday Strategic Domain Driven Design Course cont'd Same as Monday Wednesday Workshop: Ad concept and our miscellaneous vertical Chief Enterprise architect, EA group, Functional Product Director, Product Owner, Lead Developers Thursday Workshop: Job vertical and company profile Chief Enterprise architect, EA group, Functional Product Director, Product Owner, Lead Developers Friday Presentation for everyone in FINN.no, plus workshop: Communications Chief Enterprise architect, EA group, Functional Product Director, Product Owner, Lead Developers The course on Monday and Tuesday was extremely helpful in getting everyone up to speed on the terms and method of strategic domain driven design. The workshops the rest of the week focused on understanding the challenges involved in each area, and trying

## Modelling Is Everything

DevFeed: [Modelling Is Everything](<https://devfeed.tech/articles/modelling-is-everything-13616.md>)

Original publisher: [Read original article](<https://mechanical-sympathy.blogspot.com/2011/09/modelling-is-everything.html>)

Author: Martin Thompson (noreply@blogger.com)

Published: 2011-09-02T18:23:00Z

Content type: opinion

Language: en

Sources: [Mechanical Sympathy](<https://devfeed.tech/sources/mechanical-sympathy.md>)

Topics: [Domain-driven design (DDD)](<https://devfeed.tech/topics/domain-driven-design.md>), [systems](<https://devfeed.tech/topics/systems.md>), [Development](<https://devfeed.tech/topics/development.md>), [Code](<https://devfeed.tech/topics/code.md>), [Cache](<https://devfeed.tech/topics/cache.md>), [cpu](<https://devfeed.tech/topics/cpu.md>), [Network](<https://devfeed.tech/topics/network.md>)

Tags: [code](<https://devfeed.tech/tags/code.md>), [ddd](<https://devfeed.tech/tags/ddd.md>), [design](<https://devfeed.tech/tags/design.md>), [development](<https://devfeed.tech/tags/development.md>), [domain-driven-design](<https://devfeed.tech/tags/domain-driven-design.md>), [modelling](<https://devfeed.tech/tags/modelling.md>), [performance](<https://devfeed.tech/tags/performance.md>), [systems](<https://devfeed.tech/tags/systems.md>)

### AI overview

The article argues that modelling what needs to be implemented is the most important step in software development, especially when building high-performance systems. It connects Domain-Driven Design with modelling the problem domain and explains that understanding CPU, memory, storage, cache, and network behavior can improve correctness and performance.

### Source excerpt

I'm often asked, "What is the best way to learn about building high-performance systems"? There are many perfectly valid answers to this question but there is one thing that stands out for me above everything else, and that is modelling. Modelling what you need to implement is the most important and effective step in the process. I'd go further and say this principle applies to any development and the rest is just typing :-) Domain Driven Design (DDD) advocates modelling the domain and expressing this model in code as fundamental to the successful delivery and ongoing maintenance of software. I wholeheartedly agree with this. How often do we see code that is an approximation of the problem domain? Code that exhibits behaviour which approximates to what is required via inappropriate abstractions and mappings which just about cope. Those mappings between what is in the code and the real domain are only contained in the developers' heads and this is just not good enough. When requiring high-performance, code for parts of the system often have to model what is happening with the CPU, memory, storage sub-systems, or network sub-systems. When we have imperfect abstractions on top of these domains, performance can be very adversely affected. The goal of my "Mechanical Sympathy" blog is to peek at what is under the hood so we can improve our abstractions. What is a Model? A model does not need to be the result of a 3-year exercise producing UML. It can be, and often is best as, people communicating via various means including speech, drawings, illustrations, metaphors, analogies, etc, to build a mental model for shared understanding. If an accurate and distilled understanding can be reached then this model can be turned into code with great results. Infrastructure Domain Models If developers writing a concurrent framework do not have a good model of how a typical cache sub-system works, i.e. it uses message passing to exchange cache lines, then the framework is unlikely to

## Code Refurbishment

DevFeed: [Code Refurbishment](<https://devfeed.tech/articles/code-refurbishment-13611.md>)

Original publisher: [Read original article](<https://mechanical-sympathy.blogspot.com/2011/08/code-refurbishment.html>)

Author: Martin Thompson (noreply@blogger.com)

Published: 2011-08-20T16:02:00Z

Content type: opinion

Language: en

Sources: [Mechanical Sympathy](<https://devfeed.tech/sources/mechanical-sympathy.md>)

Topics: [Refactoring](<https://devfeed.tech/topics/refactoring.md>), [Code](<https://devfeed.tech/topics/code.md>), [Code quality](<https://devfeed.tech/topics/code-quality.md>), [Test-driven development](<https://devfeed.tech/topics/tdd.md>)

Tags: [code](<https://devfeed.tech/tags/code.md>), [code-quality](<https://devfeed.tech/tags/code-quality.md>), [ddd](<https://devfeed.tech/tags/ddd.md>), [refactoring](<https://devfeed.tech/tags/refactoring.md>), [refurbishment](<https://devfeed.tech/tags/refurbishment.md>), [tests](<https://devfeed.tech/tags/tests.md>), [unit-tests](<https://devfeed.tech/tags/unit-tests.md>)

### AI overview

The article distinguishes refactoring from broader structural redevelopment. It defines refactoring as behavior-preserving changes that improve code structure, quality, and maintainability, while noting that larger changes may reuse existing code without being a complete rewrite.

### Source excerpt

Within our industry we use a huge range of terminology. Unfortunately we don't all agree on what individual terms actually mean. I so often hear people misuse the term "Refactoring" which has come to make the business in many organisations recoil in fear. The reason for this fear I've observed is because of what people often mean when misusing this term. I feel we are holding back our industry by not being disciplined in our use of terminology. If one chemist said to another chemist "we are about to perform titration", both would have a good idea what is involved. I believe computing is still a very immature science. As our subject matures hopefully we will become more precise and disciplined in our use of terminology and thus make our communication more accurate and effective. Refactoring is a very useful technique for improving code quality and clarity. To be precise it is a behaviour preserving change that improves a code base for future maintenance and understanding. A good example would be extracting a method to remove code duplication and applying this method at every site of the duplication, thus removing the duplication. Refactoring was first discussed in the early 1990s and became mainstream after Martin Fowler's excellent "Refactoring" book in 1999. Refactoring involves making a number of small internal changes to the code structure. These changes will typically not have any external impact. Well written unit tests that just assert externally observable behaviour will not change when code is refactored. If the external behaviour of code is changing when the structure is being changed then this is not refactoring. Now, why do our business folk recoil in fear when this simple and useful technique of "refactoring" is mentioned? I believe this is because developers are actually talking about a much more extensive structural redevelopment technique that does not have a common term. These structural changes are often not a complete ground-up rewrite because much