Blog

Notes from the practice

Practical notes on AWS architecture, serverless builds, Java on Lambda, AI workflows, and running a Swiss software practice. No hot takes, just things that worked (or did not).

Your portal runs on a VPS. What happens when it starts to matter?

A customer portal with Angular, a backend and Postgres, run on a VPS, on Kubernetes, on Fargate and on Lambda. Four of many ways to operate it, compared on operational simplicity: how many parts somebody has to understand and keep alive.

Read post →

The service you need may not exist in Zurich

I needed to connect devices in the field and had Zurich set as the region. AWS IoT Core is not available there. The check that prevents this takes ten minutes and belongs before the first draft.

Read post →

Three out of four AI visits to my site were not AI

I checked 31 days of CloudFront logs from my own site against the providers' published IP ranges. Of the requests claiming to be OpenAI or Perplexity, 27 percent were real. For ChatGPT-User, the citation signal, it was 9.7 percent.

Read post →

Data in Switzerland: what that actually means technically

Data in Switzerland means the stored data sits in Switzerland. It does not mean no data leaves the country, and it does not mean nobody abroad can access it. Seven points to check before making the promise.

Read post →

Quarkus Native or JVM on Lambda: when to use which, and why the benchmark isn't the answer

I measured Quarkus JVM, Native and SnapStart on Lambda. Then comes the harder question: which runtime do you pick? The answer isn't in the benchmark. It hangs on three axes no single number captures: does the function stay warm, is an external service in the hot path, and who maintains the build. A decision guide built on the real measurements.

Read post →

Cognito custom domain in CDK: four traps and a chicken-and-egg problem

Even when you avoid the self-built login and go with Cognito plus Lambda@Edge, there is a layer of traps that no AWS reference blog mentions. Four traps in a fixed order, because each one is entered because the previous one was handled correctly. The most expensive hour of the setup had nothing to do with cryptography. It went into figuring out which of two CDK stacks has to deploy first. Resolution in three steps.

Read post →

Lambda cold start, measured.

2700 measurements on AWS Lambda in eu-central-2, arm64. Four runtimes side by side: Quarkus JVM, Quarkus Native, Node 24, JVM with SnapStart. Init Duration is memory-independent for three of four. JVM at 512 MB takes 5.8 seconds to first response, native and Node sit under 600 ms. And SnapStart without priming actually makes things worse. The data, the methodology, and what to take away.

Read post →

Cognito Custom Email Sender: three traps on the road to the inbox

My first attempt at sending a verification email from AWS Cognito was a full SMTP server of my own. Locally it ran. In AWS, not a single mail got through. Three traps later, the system was running in production: outbound port 25 blocked, SES API-only in eu-central-2 (Zurich), and KMS envelope encryption colliding with JVM cold starts and Cognito's retry logic. Architecture, runtime trade-offs, and an idempotency line of defense.

Read post →

I spent a year building. Nobody needed it.

In 2024 I built a full marketplace app: iOS, Android, AWS backend, payments, three-language marketing. Zero users. The lesson from Rentaside on product-market fit, the marketplace cold start, and what three decades of code don't teach you.

Read post →

Private RDS access in 2026: from bastion to serverless

Bastion hosts cost $43.80 a year just for the public IP, plus patching and key rotation. EC2 Instance Connect Endpoint is free but drops after one hour. Fargate ephemeral gives you serverless-on-demand tunnels with no session cap. Three options, one decision.

Read post →

Never build your own login system.

"I'll just quickly build the login." That's the sentence that starts every other SaaS disaster. Password hashing, MFA, passkeys, token rotation, audit logs, FADP compliance. Why Cognito, Lambda@Edge, and API Gateway solve it cleanly in three layers, and why you should never build this yourself.

Read post →

Lambda@Edge: code at the edge of the world.

Standard Lambda has a home region, often a continent away from the user. Lambda@Edge runs at 400+ CloudFront edge locations. The four trigger points, real use cases (edge auth, security headers, geolocation routing), the hard limits, and what's running in production at SCMC.

Read post →