Skip to content

IaC Is a Medium, Not a Method — DRY + TRIZ as a Thinking Framework

Most infrastructure pain comes from two sources: duplication and unresolved contradictions.
DRY eliminates the first. TRIZ resolves the second.

IaC Is a Medium, Not a Method

The standard answer to infrastructure pain is "just use IaC" — Terraform, Ansible, Kubernetes manifests. But IaC is a medium, not a method. You can write terrible, duplicated, contradictory infrastructure code just as easily as terrible application code.

Scripts multiply. Pipelines diverge. The same secret lives in four places. A month later, nobody knows which copy is the source of truth.

What's missing is a thinking framework for what to put in the code and how to structure it. I use two: DRY and TRIZ.


DRY: One Source of Truth

Don't Repeat Yourself is well-known in software development, but underestimated in infrastructure.

In practice, DRY in IaC means:

  • One source of truth for every variable, secret, and config value
  • Modules and roles instead of copy-pasted resource blocks
  • Reusable workflows — GitHub Actions reusable workflows, Ansible roles — instead of per-project YAML duplication
  • Parameterised manifests — one Helm chart or Kustomize base, not three slightly-different copies for dev/staging/prod

Example: eigenstack

In my self-hosted stack, every service shares a single docker-compose.override.yml pattern. Environment variables are defined once in .env and referenced everywhere. Backup logic lives in one Makefile target, not in three separate cron scripts.

When I need to add a new service, I copy one template block and fill in four variables. No duplication, no drift.

→ Eigenstack — Sovereign Self-Hosted Cloud (Germany)


TRIZ: Resolve Contradictions, Don't Compromise

TRIZ (Theory of Inventive Problem Solving) is a method for resolving technical contradictions — situations where improving one parameter makes another worse.

Infrastructure is full of these:

Contradiction Naive compromise TRIZ resolution
Fast deploys vs stable production Deploy less often Segmentation: separate pipeline per environment
Open API vs security Add auth everywhere Trimming: reduce surface, don't add guards
Observability vs performance Log less Preliminary action: async buffer + structured logs
Privacy vs functionality Disable features Dimension shift: local-first processing

The key insight: a compromise is not a solution. A real solution eliminates the contradiction at the architectural level.

Example: local-whisper-obsidian

The contradiction: I want voice notes transcribed automatically (convenience) but I don't want audio leaving my device (privacy).

A compromise: use a cloud API and "trust" the vendor.
The TRIZ resolution: move the processing to the same device as the data. Local Whisper model, triggered by inotifywait, writes directly to Obsidian vault. No cloud. No compromise. Contradiction resolved.

→ Local Voice Transcription Pipeline