About
by Oleg Sovetnik
One of the central challenges in developing software systems is understanding and managing complexity. Modern systems face three primary types of complexity: domain complexity, perceived complexity, and added complexity.
Effectively managing these types of complexity is key to successful software design. Special attention should be given to domain complexity, as it defines the core business logic of the system and is often the least apparent to developers. To successfully navigate domain complexity, one needs to understand not only the structure of data and algorithms but also the semantic side of the tasks that the program solves.
Modern software design is confronted with a number of issues related to the interpretation and implementation of concepts at different levels of abstraction. While the focus of programming is often on syntactic constructs—such as data structures, algorithms, and type systems—these do not always account for the semantic level of the program.
This semantic gap between the syntax of the code and its real meaning creates fundamental difficulties, especially in systems that require the integration of human knowledge and adaptation to changing, ambiguous contexts. A pressing issue arises: how can we adequately reflect the semantic aspects of the domain embedded in the system, and how can we avoid losses when translating business logic into code?
To conceptualize and bridge this gap, it is useful to apply the concept of “umwelt”—a term from biosemiotics that describes the subjective perception of reality by each living being. In the context of programming, umwelt can be seen as a way of understanding and representing a system under conditions of limited perception. In the scope of this project, it helps to better account for domain complexity and manage it, adapting solutions to the needs of specific users and contexts.
In this section, we explore the challenges of development related to the conceptualization and maintenance of software systems, and we examine how the umwelt concept helps solve these problems in the long term.
In the following sections, we will delve into epistemological and sociological approaches that will help deepen our understanding of how to apply the concept of umwelt in the context of programming and managing domain complexity.
semantic-gap domain umwelt
Dive deeper
-
Babylon problem
The gap between code and natural language resembles the Tower of Babel, where people speaking different languages ceased to understand each other and couldn’t complete the construction.
-
Invisible Elefant
The domain of a project often resembles the parable of the blind sages who tried to describe an elephant by feeling its parts. Each sage touched only a fragment — a trunk, a leg, or a tail — and based their conclusions on that alone, unable to see the whole picture.
-
Paradigms
Programming paradigms provide powerful tools to answer the question of how to write and organize code from a syntactic point of view, while paying minimal attention to semantics and the process of understanding the domain.
-
The Gap
A discussion of the semantic gap in software design, leading to the Babylon problem and the invisible elephant.
-
Umwelt
The missing semantic link (mindmap) can be understood through the concept of **umwelt** — a term that describes the subjective perception and interpretation of the world by each living being.