Back to beliefsThesis

Primitives Over Platforms

Closer to the metal beats more abstraction when AI collapses build cost


Closer to the Metal Beats More Abstraction

AI collapsed build cost. That changes which infrastructure layer is worth paying for.

For twenty years, the rational response to expensive development was abstraction. Heroku over AWS. Vercel over Docker. Zapier over code. n8n over state machines. Lovable over engineering. Each layer traded control for speed — and when building was slow and expensive, that trade made sense.

AI inverts the equation. When Claude Code writes your OpenTofu configs and deploys your Step Functions state machine in an afternoon, the speed premium of abstraction platforms disappears. What remains is the cost: vendor lock-in, execution markup, opinion constraints, and a dependency you don't control.

The Abstraction Tax

Every platform layer between you and the infrastructure is:

  • A dependency. Vercel decides what Node.js version you run. n8n decides what integrations exist. Lovable decides what patterns are possible. The platform's roadmap becomes your constraint.
  • A rent extraction point. Step Functions processes 4,000 state transitions for $0.10/month. n8n charges $30-50/month for the instance that does the same thing. Vercel charges per-seat, per-build, per-bandwidth. The markup isn't for compute — it's for convenience that AI now provides for free.
  • An opacity layer. When the workflow breaks at 2am, you're debugging the platform's abstraction, not the actual infrastructure. With primitives, the state machine execution history IS the debugging tool.
  • A portability trap. OpenTofu configs are portable. Your Vercel deployment is not. Your Lovable app is not. Your n8n workflows are not.

Why Primitives Work Now

Cloud primitives — Step Functions, EventBridge, Lambda, Bedrock, S3, SQS — have three properties that matter:

They're durable. Step Functions state machines deployed in 2018 still run today. AWS primitives have decade-long stability guarantees. Your n8n workflow breaks when n8n changes their node API. Your Vercel config breaks when they change their build system.

They're composable. Each primitive does one thing. You compose them declaratively in OpenTofu. A state machine orchestrates. Lambda executes. EventBridge routes. Bedrock reasons. S3 stores. SQS buffers. The composition is visible in .tf files that AI agents read, modify, and deploy.

They map to reality. A Step Functions state machine IS the business process, not an approximation of it. A Rails app with Sidekiq and Redis is a developer's model of a state machine, with all the drift, bugs, and maintenance that modeling implies. The primitive is the thing itself.

What Changed

Three capabilities converged:

Capability What it does Why it matters
OpenTofu Infrastructure as declarative code 15 AWS resources described in .tf files. The files ARE the documentation. Reproducible, versionable, portable.
Claude Code / AI agents Writes and deploys infrastructure The complexity gap that justified platforms evaporates. An afternoon replaces a quarter.
AWS API-first services Everything is a composable API call Step Functions, Bedrock, EventBridge, Transcribe — not products you integrate with, primitives you compose.

The old bottleneck was "AWS is hard." It isn't hard anymore when your AI collaborator knows every AWS service and every OpenTofu resource type. The complexity that created the market for Heroku, Vercel, and Railway is absorbed by the tooling.

What This Means for Building

A workflow automation system built on primitives:

  • Costs $68/month in infrastructure, not $500/month in platform fees
  • Runs on the customer's AWS account — they own it, they can audit it, they can hand it to another team
  • Has execution guarantees from AWS, not from application code. Retries, timeouts, error handling are infrastructure configuration, not try/catch blocks
  • Is maintainable by any competent engineer with Claude Code. The .tf files are the system. The state machine definition is the workflow. There's no framework to learn, no platform conventions to internalize

The customer doesn't need Substantial to keep it running. They don't need a platform subscription. They need an AWS account and a state machine that does what their business requires. When they want to change it, they change the definition and deploy.

Implication

The right response to AI making development faster isn't more abstraction — it's less. Get closer to the metal. Compose primitives. Declare infrastructure. Let the AI handle the complexity that justified platforms in the first place.

Build the factory on bedrock, not on someone else's platform.

Contrarian To

"Use Vercel/Lovable/n8n to move fast."

You can move just as fast with primitives now, and what you build is more durable, cheaper, more portable, and actually yours.


Related