The Power of Orthogonal Design in the Age of AI

By: on Invalid DateTime

Look, I've been thinking about something that's been bugging me for months now. Every time I sit down with Claude Code or another AI assistant, there's this magic moment where everything just clicks. But it doesn't happen with every tool or system - only certain ones.

Here's what I've figured out: AI models are ridiculously good at working with orthogonal systems. You know, those beautifully designed tools that do one thing well and compose with everything else. Think grep, sed, awk - or at the system level, something like NixOS.

What Makes Design Orthogonal?

Orthogonal design means changing one component only affects that component. No weird side effects, no ripple changes across your entire system. It's the combination of high cohesion (each piece has one clear purpose) and loose coupling (pieces don't depend on each other's internals).

The Unix philosophy, articulated by Doug McIlroy in 1978, nailed this decades ago: "Write programs that do one thing and do it well. Write programs to work together." Those pipes connecting ls | grep | sort aren't just convenient - they're expressing a fundamental design principle that makes systems composable.

Why AI Models Love This Stuff

Here's where it gets interesting. AI models excel at pattern recognition and composition, but they struggle with complex interdependencies. Give Claude a monolithic system where everything affects everything else, and you'll watch it get confused. Give it orthogonal tools? It becomes a productivity monster.

I noticed this first with command-line tools. When I ask Claude to help with text processing, it naturally reaches for grep, sed, and awk combinations. These tools have clear inputs, outputs, and behaviors. No hidden state, no surprising interactions. The AI can reason about them independently and compose them confidently.

The NixOS Example

NixOS takes orthogonal design to the extreme. Every package lives in isolation in /nix/store, referenced by cryptographic hashes that capture all dependencies. Want to upgrade something? The old version stays put. Need to roll back? Just switch the symlinks.

This isn't just about package management - it's about expressing your entire system as a pure function. Your configuration.nix file declares what you want, and Nix figures out how to make it happen. No side effects, no hidden dependencies.

When I work with Claude on NixOS configurations, the AI can reason about each piece independently. It understands that changing my window manager config won't break my web server, that adding a development tool won't interfere with my media setup. The orthogonal design makes the system predictable.

Beyond Package Management

This principle shows up everywhere in well-designed systems:

  • Docker containers - Each container is isolated, with explicit interfaces
  • Microservices - When done right, they're just the Unix philosophy at network scale (though many implementations violate these principles)
  • React components - Props in, JSX out, no hidden global state (when following functional component best practices)
  • Git - Commits, branches, and merges are orthogonal operations

Notice a pattern? These are the tools AI assistants work best with. They can understand each piece independently, reason about interactions clearly, and suggest compositions confidently.

The Expressability Factor

Orthogonal systems aren't just easier for AI to work with - they're more expressive. When tools compose cleanly, you can build complex solutions from simple parts. The find | xargs | parallel pipeline isn't just efficient code, it's efficient thinking.

I've seen this with infrastructure-as-code tools too. Terraform modules, Kubernetes manifests, Ansible playbooks - the ones that follow orthogonal design principles are the ones AI assistants can actually help you improve and extend.

What This Means for the Future

As AI becomes more integrated into our development workflows, I think we'll see a renaissance of orthogonal design. Tools that play well with AI will win. Monolithic systems that require deep contextual understanding will struggle.

But this goes beyond AI assistance. Orthogonal systems are easier to test, debug, and maintain. They're more resilient to change. They enable teams to work independently without stepping on each other.

The Unix philosophy wasn't just ahead of its time - it was preparing us for the age of AI collaboration. Those old-school design principles are becoming the foundation for human-AI partnerships in software development.

Start Where You Are

You don't need to rewrite everything in NixOS (though honestly, you should try it). Start by looking for opportunities to break apart coupled systems. Create clear interfaces. Eliminate side effects. Make your tools composable.

Your future AI-assisted self will thank you. And more importantly, your human colleagues will too.

Time to read: ~6 minutes. Time to refactor your monolith into composable pieces: considerably longer, but worth every minute.

Content on this blog was created using human and AI-assisted workflows described here. Original ideas and editorial decisions by Justin Quaintance.