Skip to main content

Manifesto for AI-Augmented Software Craftsmanship

· 8 min read

Value-Driven Software Development in the Age of AI Assistance

"The craft of writing software will not become obsolete."
(Freeman J. Dyson, 1998)1

At the beginning of the 21st century, software development underwent a fundamental transformation: away from a purely scientific, engineering-driven discipline towards a value-driven one, understood by thought leaders under the term Software Craftsmanship. This craft is grounded in technical methods and tools, but just as much in personal and character traits - such as the willingness to take responsibility for code, to work as part of a team, and to continuously improve oneself.

With the rise of AI-assisted tools like GitHub Copilot, Claude Code and Gemini CLI, the landscape of software development has changed yet again - more rapidly and more drastically than one might have anticipated in an environment that is already shaped by constant technological disruption. With every new version, the models become more reliable and more powerful; they have established themselves as permanent assistants in our IDEs.

"The magic of myth and legend has come true in our time. One types the correct incantation on a keyboard, and a display screen comes to life, showing things that never were nor could be." (Frederick P. Brooks, Jr., 1978)2

Brooks’ 1978 quote describes the fascination and magic of software development as a creative act enabled by technology. Today, that magic manifests in a different form, realized through technologies that are largely shaped by artificial intelligence: the magic Brooks described has long since become our everyday reality, enriched by a new, synthetic kind of magic that might have been conceivable as a concept back then but was hardly predictable in its current ubiquity and turnkey availability.

And how are we supposed to trust the synthetic assistant, the artificially generated code? To what extent is it truly harmless to let these assistants modify and extend an existing, carefully crafted codebase? It feels like an abstract construct, like a strange loop borrowed straight from Hofstadter’s GEB.

Values that once seemed non-negotiable are suddenly being questioned. There is a growing concern that diligence and understanding could become obsolete in the face of AI-driven automation.

And this goes far beyond mere code generation: if tests and documentation are also created fully automatically, we risk losing the critical reflection on software design, architecture and functionality.

At the same time, we increasingly see that experienced developers - those who learned their craft with the Agile Manifesto, XP and The Pragmatic Programmer, and who today hold leadership positions and carry personnel responsibility - approach these systems with a healthy dose of skepticism. They recognize that software quality is not determined solely by the use of AI tools, but by the developer’s ability to use these tools effectively without sacrificing the principles of Software Craftsmanship. The goal is clear: to prevent so-called “AI slop” - low-quality, generated code garbage.

My own work as a software developer has always been guided by the principles of Software Craftsmanship and is built on practices like Clean Code, Test-Driven Development and Extreme Programming.

With the advent of generative AI, I now find myself confronted with the challenge of reconciling machine-generated results with work that I understand - and value - as a craft. I am moving within a field of tension between preserving craftsmanship and integrity, leveraging new powerful tools, and maintaining the transparency that clients and stakeholders rightfully expect.

I consider it essential to hold on to these proven principles while at the same time not closing myself off to new possibilities, but instead integrating them consciously and reflectively.

This is why I wrote the Manifesto for AI-Augmented Software Craftsmanship. It connects the traditional values of software development with the new realities of AI-assisted development. It builds on the following well-known core principles:

  • Collaboration over Automation.
  • Comprehension over Convenience.
  • Ownership over Delegation.
  • Verification over Assumption.

The manifesto is intended as a guide to ensure that quality, responsibility and craftsmanship are preserved even in a world where AI plays an ever larger role. My aim is that it not only reflects my personal stance, but also serves as a basis for discussion within the broader community - so that we can jointly shape a responsible way of working with AI.

Footnotes

  1. Science as a Craft Industry, Freeman J. Dyson, 1998, DOI: 10.1126/science.280.5366.1014 2

  2. Brooks, F. P. Jr. (1978). The mythical man-month: Essays on software engineering. Addison-Wesley. 2

Model Matrix: Rotation - World vs. Local Origin

· One min read

Model Matrix

Rotation: World vs. Local Origin

In my latest article, I introduce the mathematical foundation for rotation as linear transformations applied to model matrices in 3D computer graphics. The article focuses on the distinction between rotating an object around an external point and rotating it around its own local origin, and derives the necessary transformations from two conceptually different but mathematically equivalent perspectives: Active transformations and passive transformations.

Model Matrix: Transformations - A Change-of-Coordinates Perspective

· One min read

Model Matrix

Transformations: A Change-of-Coordinates Perspective

My article examines model matrices through the lens of change-of-coordinates transformations.

Rather than treating model matrices as mere transformation tools, viewing them as change-of-coordinates matrices reveals why certain algebraic properties hold. Specifically, I demonstrate the mathematical equivalence between two common rotation approaches:

  • Matrix-first: R PWM v \boldsymbol{R}\ \underset{W \leftarrow M}{P}\ \vec{v} (rotate the model matrix, then transform)
  • Transform-first: R (PWM v) \boldsymbol{R}\ (\underset{W \leftarrow M}{P}\ \vec{v}) (transform to world space, then rotate)

Change of Coordinates and Applications to View Matrices

· One min read

Change of Coordinates

... and Applications to View Matrices

My article introduces the mathematical derivation of the lookAt view matrix commonly used in computer graphics APIs like OpenGL.

As part of the graphics pipeline, the purpose of this matrix is to perform the view transformation, converting global world coordinates into a coordinate system defined by position and direction of an observer.

Rotations as a Special Case of Vector Transformations

· One min read

Rotations as a Special Case of Vector Transformations

... with Applications to Game World Modeling

Rotations, as a class of affine vector transformations, represent rigid body transformations that change the direction of a vector within a given plane.
Efficient and accurate handling of such transformations poses challenges not only for game and animation engines, but also for simulations and real-time systems, where the limitations of floating-point arithmetic and operation throughput can negatively impact the computational outcomes.

The Geometry of the Dot Product

· One min read

The Geometry of the Dot Product

... and Applications to Visibility Modeling

The Dot Product is a fundamental building block for vector operations in video games and simulations. A solid understanding is crucial for applications involving view-related coordinate transformations and even physical modeling within a game world. For many practical use cases, the dot product offers an elegant alternative to constructing explicit visibility cones or relying on computationally expensive raytracing algorithms.

A Brief Overview on Recent Cyberattacks

· 5 min read

In the first months of 2025, several high-impact cyberattacks made headlines - targeting everything from crypto exchanges and streaming platforms to core infrastructure components. This post takes a brief look at two selected incidents: How they worked, what security objectives were compromised, and what they reveal about the evolving threat landscape.

Contracted Events for Micro Frontend Communication

· 2 min read

Contracted Events for Micro Frontend Communication

A non-formal approach to non-breaking events for displaying information in distributed Frontend Fragments

Schema Versioning and Consumer-driven contracts play critical roles in the world of distributed systems, where data structures often evolve across releases. These concepts can be applied to Micro Frontends, where messages need to be exchanged across system boundaries: Release-agnostic systems, which can dynamically enter and exit the system of concern, must be able to properly respond to event messages: Updated message structures must not introduce breaking changes.

In a frontend, provide contracts for data structures consumed by conceptually related modules and process the data according to the individual requirements of the consuming context.

[DE] Betrachtung des Widerspruchsbeweis des speziellen Halteproblems nach Vossen und Witt

· 6 min read

Oft wird der Nachweis, dass das Halteproblem nicht entscheidbar ist, in der Fachliteratur (Schöning [📖Sch08, 119 f.], Asteroth und Baier [📖BA02, 106 f.], Sipser [📖Sip12, 216 f.]) mithilfe einer Turingmaschine und einem Widerspruchsbeweis gezeigt, in etwa:

Angenommen,

K={wΣw=T,T stoppt bei Eingabe w}K' = \{w \in \Sigma^* | w = \langle T \rangle, \text{$T$ stoppt bei Eingabe $w$}\}

ist entscheidbar.

Sei TT' ist die Turingmaschine, die KK' entscheidet.
Sei w=Tw = \langle T \rangle die Codierung1 einer Turingmaschine, die wie folgt arbeitet:

  • TT simuliert das Verhalten von TT' bei der Eingabe ww:
    • TT stoppt, wenn TT' die Eingabe ww verwirft (wKw \notin K')
    • TT stoppt nicht, wenn TT' die Eingabe ww akzeptiert (wKw \in K')

Damit folgt: TT stoppt bei Eingabe ww \Leftrightarrow TT' verwirft ww \Leftrightarrow wKw \notin K' \Leftrightarrow TT stoppt nicht

Widerspruch!

Footnotes

  1. Anstatt Gödelnummer wird im Folgenden auch einfach der Begriff Codierung verwendet, wobei streng genommen τ(T)\tau(T) die Codierung einer normierten Turingmaschine ist, bevor ihr eine Gödelnummer zugewiesen wird