55 Back-End Developer Jokes
It's fast in dev. Dev has twelve rows.
The ORM generated a query. The ORM generated forty more queries. That was one page load.
I added a database index. The ORM ignored it and did a sequential scan anyway.
Two transactions walk into a bar. Neither one leaves.
The API returns 200 OK with an error message in the body. The front end thinks everything is fine.
We don't have a cache. We have a Redis instance we call a cache.
The migration ran for four hours. It was an ALTER TABLE on a table with one row.
Production threw a 504. The load balancer threw a 504. The CDN threw a 504. Somewhere, a Postgres query is still running.
I caught the exception. I logged it. I have no idea what it means.
The cron job ran twice last Sunday at 2:30am. Daylight savings remembered us even when we forgot it.
Connection pool exhausted. The pool was set to ten. We have eleven users.
It works on my machine. My machine has 64 gigs of RAM and no other tenants.
I rewrote the monolith as microservices. Now I have fourteen monoliths and a distributed deadlock.
The queue backed up overnight. By morning we had three million messages and a really patient consumer.
EXPLAIN ANALYZE returned 800 lines. I read four of them and ordered lunch.
We decided to denormalize for performance. We are now denormalizing for performance, three years later, forever.
The auth token expired mid-request. The request finished. The audit log disagrees with itself.
The foreign key was dropped during a hotfix in 2021. Nobody added it back. The data has opinions about that.
I asked GraphQL for three fields. It went and asked the database for three hundred.
REST is dead. GraphQL is dead. gRPC is dead. JSON over HTTP is somehow still alive and paying our salaries.
There is a service in production that hasn't been deployed in two years. It is the only thing that still works.
Eventual consistency is the promise that your data will be correct, eventually, for some definition of eventually that the on-call engineer no longer accepts.
I tuned the query. It went from 12 seconds to 11 seconds. Stand-up was a triumph.
Race condition reproduced once in three thousand requests. Fixed it. It now reproduces once in three thousand and one.
The new junior asked why the table is called usr_acct_v2_final_new. I told her it was a long story and we don't have time.
The retry logic is exponential backoff. The bug is also exponential.
I added a TODO in 2018 to remove the workaround. The workaround is now load-bearing.
The microservice is one endpoint, two files, and a 400 line Helm chart.
Idempotency was a great idea right up until two clients sent the same idempotency key for two different orders.
We use Kafka for everything. Including sending one email to one user once a month.
The DBA looked at the schema, said nothing, and quit on Friday.
Soft deletes preserve history. They also preserve the row that's been breaking the report for six years.
We have ninety-eight unit tests and one integration test. The integration test is the only one we trust.
The cache invalidation strategy is to deploy.
I refactored the function into ten smaller functions. Now the bug is spread evenly across all ten.
Stack trace says it died in node_modules at line 4837. I close the laptop and go for a walk.
The system is event-driven. The events are driving the on-call engineer.
Postgres said the query plan looked good. The query took 47 seconds. Both statements are true.
There's a JOIN somewhere in this codebase that touches eight tables. Nobody has read it since the person who wrote it left in 2019.
I rolled back the deploy. The data did not roll back. We now have a feature in the database that no code knows about.
Senior back-end engineer: someone who has been paged by every service they have ever built, in chronological order.
The status page says all systems operational. The status page is hosted on the system that is not operational.
Disk hit 100 percent at 3:14 a.m. The audit log table was 80 percent of the database. We had been logging the logs.
Autovacuum has not run on this table since 2022. The table knows. The query planner knows. I am the last to find out.
The read replica is four hours behind primary. Marketing keeps asking why their dashboard shows yesterday.
Eventually consistent, the docs said. Eventually, the customer called support.
User created with id 4827. Next user is id 4831. Three transactions rolled back and took the sequence numbers with them. Now I have to explain gaps to finance.
We stored it as JSON because the schema might change. The schema did not change. The query is still unsearchable.
Half the team wants UUID v7 for the index locality. The other half wrote the migration in v4 last week. Standup is going to be quiet.
The 7 a.m. cron now finishes at 1 p.m. Nobody noticed until someone scheduled an 8 a.m. cron that depends on it.
The queue worker processed the same message twice. The idempotency key is a TODO from 2023.
The rate limiter has never been tested in production because nothing has ever hit the rate limit. We are about to find out together.
Refresh token rotation is implemented. Refresh token rotation is also the reason every mobile user got logged out at 9 a.m.
We had a meeting about API versioning. Path, header, or subdomain. The meeting is now a recurring meeting.
The search box uses LIKE percent foo percent. The full-text index sits next to it, unused, like a gym membership.
Why back-end humor is the quietest genre in tech
Back-end humor doesn't translate to a screenshot. There's no funny CSS, no console error in a bright color, no obvious visual gag. The joke is a 4am page, a query plan nobody understood, a cron that fired twice, an integer that should have been a bigint. You either lived through it and laugh, or you read it once and move on. That's the genre.
See also
- 55 Front-End Developer Jokes Every Frontend Dev Knows
- 50 Full Stack Developer Jokes for People Doing Both Jobs
- 70 JavaScript Jokes Every JS Developer Has Lived
- 65 Senior Developer Jokes Only Senior Engineers Will Get
- 50 Sysadmin Jokes That Hit Too Close to Home
- 45 AWS Jokes Every Cloud Engineer Has Lived Through
- 55 Email Chain Jokes for People Stuck on the Thread: the postmortem thread the backend dev got CC'd into at 2 a.m.
- 55 API Integration Jokes for People Reading Someone Else's Docs: the third-party endpoint the backend dev wraps, retries, and curses.
- 50 Legacy System Jokes for the App Nobody Will Touch: the service still in the org chart because nobody is sure what it does.
- 45 MongoDB Jokes for People Who Said It Was Web Scale: the database choice made in 2014 the backend dev now defends in postmortems.
Sources
Authoritative references this article was fact-checked against.
- PostgreSQL Documentationpostgresql.org
- Software Architecture, Martin Fowlermartinfowler.com

