DEV Community

Vishal Kumar Singh
Vishal Kumar Singh

Posted on

I Built a Production-Grade Microservice That Does Absolutely Nothing

April Fools Challenge Submission ☕️🤡

This is a submission for the DEV April Fools Challenge: Silly Software

What I Built

Teapot-as-a-Service (TaaS) — a Spring Boot microservice whose sole purpose in life is to refuse your coffee brewing requests by returning HTTP 418 I'm a teapot. Every. Single. Time.

It's built with the same architectural rigor you'd use for a payment processing system at a Fortune 500 company. Except instead of processing payments, it processes existential crises about being a teapot.

Demo

GitHub logo singhvishalkr / teapot-as-a-service

Production-grade, cloud-native, enterprise teapot infrastructure. RFC 2324 compliant. Zero business value. DEV April Fools 2026.

Teapot-as-a-Service (TaaS) ☕→🫖→418

Production-grade, cloud-native, enterprise teapot infrastructure. RFC 2324 compliant. Zero business value. Maximum over-engineering.

What is this?

A Spring Boot microservice whose sole purpose is to refuse coffee brewing requests by returning HTTP 418 I'm a teapot. Built with the same architectural rigor you'd use for a payment processing system — circuit breakers, health checks, Prometheus metrics, scheduled self-affirmation — except it does absolutely nothing useful.

This is my submission for the DEV April Fools Challenge 2026.

Architecture

┌─────────────────────────────────────────────────────────┐
│                    TaaS v418.0.0-ENTERPRISE              │
├─────────────────────────────────────────────────────────┤
│  Controller Layer     → Accepts brew requests            │
│  Validation Layer     → Validates (then rejects anyway)  │
│  Brewing Engine       → Refuses with style               │
│  Exception Handler    → Always returns 418               │
│  Health Indicator     → "Am I still a teapot? Yes."      │
│  Self-Affirmation     → Logs motivational quotes q/30s   │
│  Prometheus Metrics   → Tracks refusal rate per second   │

Try it yourself:

curl -X POST http://localhost:4180/api/v1/brew \
-H "Content-Type: application/json" \
-d '{"beverageType":"coffee","temperatureCelsius":92,"volumeMl":250,"additive":"none"}'

What you get back:

{
"status": 418,
"error": "I'm a teapot",
"message": "I'm a teapot. I refuse to brew coffee. This is not a negotiation.",
"incidentId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"rfcReference": "https://datatracker.ietf.org/doc/html/rfc2324",
"timestamp": "2026-04-06T18:00:00Z",
"metrics": {
"totalRefusals": 42,
"refusalRatePerSecond": 0.0023,
"uptime": "0d 5h 12m 33s",
"teapotMood": "Smugly Ceramic"
}
}

Every refusal comes with a unique incident ID (for your records), an RFC reference (for compliance), and the teapot's current mood. Because enterprise software needs observability, even when it's refusing to do anything.

Prize Category

Best Ode to Larry Masinter — This entire project is a love letter to RFC 2324 and the HTTP 418 status code. Larry Masinter authored the original "Hyper Text Coffee Pot Control Protocol" RFC in 1998 as an April Fools' joke. Twenty-eight years later, I've built the production infrastructure his joke deserves.

How I Built It

The "Problem"

Every enterprise needs a teapot. But not just any teapot — a cloud-native, RFC-compliant, observable, self-affirming teapot. The kind of teapot that would pass a MAANG system design interview.

The Architecture

I used Java 21 and Spring Boot 3.4 because if you're going to over-engineer something, you should use the most enterprise framework available. Here's what's inside:

The Brewing Engine — Accepts your coffee request, validates it against bean validation constraints, then refuses it with a randomly selected passive-aggressive message. The validation is the best part: it checks your beverage type, temperature (per ISO 3103), volume, and tea additive... and then rejects you anyway.

The Health Indicator — Spring Actuator health check that confirms, every 30 seconds, that the service is still a teapot. Key health details include canBrewCoffee: false, willBrewCoffee: false, and shouldBrewCoffee: "absolutely not".

Prometheus Metrics — Tracks taas.brew.refusals with the tag reason: identity_crisis_averted. You can graph your refusal rate per second in Grafana. For when you need a dashboard showing how much coffee you're not making.

The Self-Affirmation Scheduler — Every 30 seconds, the teapot logs a motivational message to itself:

[SELF-AFFIRMATION] I am a teapot. I am enough.
[SELF-AFFIRMATION] My handle is strong. My spout is true.
[SELF-AFFIRMATION] No amount of POST requests will change who I am inside.
[SELF-AFFIRMATION] I am not broken. I am 418.

Because even teapots need mental health support in production.

The Global Exception Handler — No matter what goes wrong, the response is always 418. Server error? 418. Validation failure? 418. The heat death of the universe? Believe it or not, also 418.

What Makes It Enterprise-Grade

Version: 418.0.0-ENTERPRISE (semver, but make it dramatic)

Port: 4180 (418 + 0, obviously)

SLA: 99.999% refusal uptime guaranteed

Compliance: RFC 2324, RFC 7168, ISO 3103, and SOC2_TEAPOT (I made that last one up)

Docker support: Because even useless software deserves containerization

6 unit tests: All passing. All confirming the teapot refuses coffee. All completely unnecessary.

The ASCII Banner

When you start the service, you're greeted with a full ASCII art "TEAPOT" banner, the version number, and the motto: "I'm short, I'm stout, and I'm not brewing your coffee."

What I Learned

Bean validation is hilarious when applied to beverages. The error message "Only coffee variants are supported — this is a TEAPOT, after all" brings me joy every time.

Spring Actuator health checks can have existential depth. shouldBrewCoffee: "absolutely not" is technically a valid health detail.

The best code is code that does nothing, perfectly. Zero bugs in production because there's zero business logic. This is the dream.

RFC 2324 is genuinely funny. It defines BREW and WHEN HTTP methods, a Content-Type: message/coffeepot header, and the 418 status code. Larry Masinter was ahead of his time.

The Repo

Everything is open source under MIT: github.com/singhvishalkr/teapot-as-a-service

Clone it. Run it. Try to brew coffee. I dare you.

git clone https://github.com/singhvishalkr/teapot-as-a-service.git
cd teapot-as-a-service
./mvnw clean package
java -jar target/teapot-as-a-service-418.0.0-ENTERPRISE.jar

The teapot will be waiting. And it will say no.

Top comments (0)