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


  • Complexity

    Three types of complexity in software systems: Domain, Perceived, and Added Complexity.

    complexity development



  • 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.

    problem Babylon metaphor development



  • 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.

    semantics syntax meaning elephant metaphor



  • 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.

    programming paradigm



  • The Gap

    A discussion of the semantic gap in software design, leading to the Babylon problem and the invisible elephant.

    gap semantics syntax elephant babylon language



  • 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.

    umwelt mindmap language conceptualization


Buzzwords
strong-weak-ties programming social-group-dynamics mindmap platform-networks structural-functionalism rationalism structuration-theory cognitive-capital mediatisation-theory operationalization enterprise Babylon automation social-action marketplace AI actor-network ideas scrum discord cognition communication social-capital financial production semantic-gap aspect-oriented umwelt empiricism positivism gap actor-network-theory research complexity information imperative verification problem psychologism game-dev streaming systems-theory disciplinary-power multiple-worlds-theory teamwork theory systems elephant cloud knowledge-communication structure tools symbolic-interactionism babylon field-theory messengers element security network e-commerce mediation-market big-data fact information-society concept communities philosophy social-network elements development object service multimedia sociology paradigm distribution theories language lenses epistemology metaphor social-exchange functional deconstruction linguistics anthropology meaning apriorism institutionalization-theory analytics projects conceptualization concepts poststructuralism procedural knowledge hoare-triples domain semantics consumption-theory syntax capitalist-systems subject