Written by: Yevhen Kozachenko (ekwoster.dev) on Fri May 08 2026

I Replaced My Tiny AWS Stack With One Deno File — and It Actually Survived Production

I Replaced My Tiny AWS Stack With One Deno File — and It Actually Survived Production

Cover image for I Replaced My Tiny AWS Stack With One Deno File — and It Actually Survived Production

I Replaced My Tiny AWS Stack With One Deno File — and It Actually Survived Production

Most developers don’t realize how much accidental complexity hides inside "simple" backend apps.

A contact form becomes:

  • API Gateway
  • Lambda
  • IAM policies
  • Validation layer
  • Logging setup
  • Deployment pipeline
  • Secrets manager
  • Monitoring dashboard

Then six months later nobody wants to touch it.

I wanted to test a dangerous idea:

Could a modern backend survive production using almost no infrastructure?

That experiment led me to Deno Deploy.

And surprisingly, the result was not a toy.


Why Deno Feels Different

Deno removes several pieces of JavaScript fatigue at once:

  • TypeScript works out of the box
  • No node_modules
  • Secure-by-default permissions
  • Built-in tooling
  • Native web standards

A minimal API literally looks like this:

Deno.serve((req) => {
  return new Response("Hello from Deno");
});

No Express. No body-parser. No startup ceremony.

That simplicity changes how you architect small services.


The Real Experiment

I migrated a tiny analytics backend from AWS Lambda to a single Deno application.

The app needed:

  • Event ingestion
  • Rate limiting
  • Validation
  • JSON storage
  • Scheduled cleanup

Normally I would split this into multiple cloud services.

Instead, I used:

  • Deno Deploy
  • Deno KV
  • One TypeScript file

Building a Tiny Analytics API

Here’s the ingestion endpoint:

const kv = await Deno.openKv();

Deno.serve(async (req) => {
  const body = await req.json();

  if (!body.event) {
    return Response.json({ error: "Missing event" }, { status: 400 });
  }

  const key = ["events", crypto.randomUUID()];

  await kv.set(key, {
    event: body.event,
    createdAt: Date.now(),
  });

  return Response.json({ success: true });
});

This replaces:

  • Express routes
  • Mongo setup
  • Validation middleware
  • AWS SDK boilerplate

For lightweight products, that reduction matters.


The Weirdly Powerful Part: Deno KV

Deno KV is not trying to become PostgreSQL.

That’s exactly why it works.

For many internal tools, dashboards, prototypes, bots, and APIs, you only need:

  • fast reads
  • simple writes
  • atomic operations
  • zero maintenance

Example rate limiter:

const ip = req.headers.get("x-forwarded-for") || "unknown";
const key = ["ratelimit", ip];

const current = await kv.get(key);
const count = (current.value || 0) + 1;

await kv.set(key, count, { expireIn: 60000 });

if (count > 100) {
  return new Response("Too many requests", { status: 429 });
}

That’s production-grade behavior in a few lines.


What Broke First?

Not performance.

Observability.

When systems become extremely minimal, debugging becomes your next bottleneck.

I eventually added:

  • structured logs
  • request tracing
  • lightweight metrics

Ironically, tooling became more important than infrastructure.

This is a pattern many developers miss:

Simpler deployments increase the value of visibility.


Where Deno Secretly Wins

Deno is strongest in projects that suffer from JavaScript over-engineering:

  • internal tools
  • edge APIs
  • AI agents
  • webhooks
  • automation services
  • chatbot backends
  • cron jobs

These systems often drown in frameworks they never needed.

Deno strips the stack back down to web primitives.


The Unexpected Result

The app handled thousands of requests per day for months.

The operational cost dropped. The deployment pipeline disappeared. The cold-start problems vanished.

But the biggest change was psychological:

Developers stopped being afraid to modify the backend.

The codebase became understandable again.

And that may be the most underrated scaling feature in modern software.


Final Thought

A lot of backend engineering today optimizes for hypothetical scale while sacrificing present-day clarity.

Deno feels like a correction to that trend.

Not every system should be minimal.

But many systems became complicated by habit — not necessity.

And sometimes replacing an entire cloud architecture with one TypeScript file is less reckless than it sounds.


🚀 Need a lightweight backend, edge API, or minimal infrastructure setup built for production? We offer custom API engineering and backend architecture services: https://ekwoster.dev/service/api-development