Skip to content(if available)orjump to list(if available)

What the hell have you built

What the hell have you built

36 comments

·November 6, 2025

brap

I feel like sometimes it’s a form of procrastination.

There are things we don’t want to do (talk to costumers, investors, legal, etc.), so instead we do the fun things (fun for engineers).

It’s a convenient arrangement because we can easily convince ourselves and others that we’re actually being productive (we’re not, we’re just spinning wheels).

marfmarkus

It's the natural evolution to becoming a fun addict.

Unless you actively push yourself to do the uncomfortable work every day, you will always slowly deteriorate and you will run into huge issues in the future that could've been avoided.

And that doesn't just apply to software.

moritzwarhier

I see your point. But accidental complexity is the most uncomfortable work there is to me.

Removing it, no matter whether I created it myself, sure, that can be a hard problem.

I've certainly been guilty creating accidental complexity as a form of procrastrination I guess. But building a microservices architecture is not one of these cases.

FWIW, the alternative presented here for small web sites/apps seems infinitely more fun.

Immediate feedback, easy to create something visible and change things, etc.

When I feel there are customer or company requirements that I can't fulfill properly, but I should, that's a hard problem for me. Or when I feel unable to clarify achievable goals and communicate productively.

But procrastrination via accidental complexity is mostly the opposite of fun to me.

It all comes back when trying to solve real problems and spending work time solving these problems is more fun than working on homemade problems.

Doing work that I am able to complete and achieving tangible results is more fun than getting tangled in a mess of unneeded complexity. I don't see how this is fun for engineers, maybe I'm not an engineer then.

Over-generalization, setting wrong priorities, that I can understand.

But setting up complex infra or a microservices architecture where it's unneeded, that doesn't seem fun to me at all :)

whstl

I 100% agree.

Normally the impetus to overcomplicate ends before devs become experienced enough to be able to even do such complex infra by themselves.

Overengineered infra doesn't happen in a vacuum. There is always support from the entire company.

ErroneousBosh

You know what, you're right.

I should get off HN, close the editor where I'm dicking about with HTMX, and actually close some fucking tickets today.

Right after I make another pot of coffee.

...

No. Now. Two tickets, then coffee.

Thank you for the kick up the arse.

whstl

Is it really for "fun"?

Or is it to satisfy the ideals of some CTO/VPE disconnected from the real world that wants architecture to be done a certain way?

I still remember doing systems design interviews a few years ago when microservices were in vogue, and my routine was probing if they were ok with a simpler monolith or if they wanted to go crazy on cloud-native, serverless and microservices shizzle.

It did backfire once on a cloud infrastructure company that had "microservices" plastered in their marketing, even though the people interviewing me actually hated it. They offered me an IC position (which I told them to fuck off), but they really hated how I did the exercise with microservices.

Before that, it almost backfired when I initially offered a monolith for a (unbeknownst to me) microservice-heavy company. Luckily I managed to read the room and pivot to microservice during the 1h systems design exercise.

Treegarden

I dont quite follow. I understand mono vs micro services, and in the last 3 weeks I had to study for system design and do the interviews to get offers. Its a tradeoff, and the system design interview is meant to see if one understands how systems can scale to hypothetical (maybe unrealistic) high loads. In this context the only reason for a microservice is independent scaling and with that also fault tolerance if an unimportant service goes down. But its really the independent scaling. One would clearly say that a monolith is good for the start because it offer simplicity or low complexity but it doesn't scale well to the hypothetical of mega scale.

whstl

The point is that it doesn't matter which is better or worse, or if you know the pros/cons:

In those interviews people still want you skewing towards certain answers.

wewewedxfgdf

"Maybe Redis for caching".

Really that's going way too far - you do NOT need Redis for caching. Just put it in Postgres. Why go to this much trouble to put people in their place for over engineering then concede "maybe Redis for caching" when this is absolutely something you can do in Postgres. The author clearly cannot stop their own inner desire for overengineering.

vlovich123

Postgres has support for an eventually consistent in-memory caching layer?

paulbjensen

Oh my word Riak - I haven't seen that DB mentioned for years!

I totally get the point it makes. I remember many years ago we announced SocketStream at a HackerNews meet-up and it went straight to #1. The traffic was incredible but none of us were DevOps pros so I ended up restarting the Node.js process manually via SSH from a pub in London every time the Node.js process crashed.

If only I'd known about upstart on Ubuntu then I'd have saved some trouble for that night at least.

I think the other thing is worrying about SPOF and knowing how to respond if services go down for any reason (e.g. server runs out of disk space - perhaps log rotation hasn't been setup, or has a hardware failure of some kind, or the data center has an outage - I remember Linode would have a few in their London datacenter that just happened to occur at the worst possible time).

If you're building a side project I can see the appeal of not going overboard and setting up a Kubernetes cluster from the get-go, but when it is things that are more serious and critical (like digital infrastructure for supporting car services like remotely turning on climate controls in a car), then you design the system like your life depends on it.

sachahjkl

From the titular tweet (12 years already !): https://x.com/codinghorror/status/347070841059692545

remco_sch

I love the unnecessary buttons that do nothing :)

danslo

s/postgres/sqlite/g

Komte

Don't agree. Getting managed postgress from one of the myriad providers is not much harder than using sqlite, but postgress is more flexible and future proof.

ErroneousBosh

I use Postgres for pretty much everything once I get beyond "text in a database with a foreign key to a couple of things".

Why?

Because in 1999 when I started using PHP3 to write websites, I couldn't get MySQL to work properly and Postgres was harder but had better documentation.

It's ridiculous spinning up something as "industrial strength" as Postgres for a daft wee blog, just as ridiculous as using a 500bhp Scania V8 for your lawnmower.

Now if you'll excuse me, I have to go and spend ten seconds cutting my lawn.

hshdhdhehd

Postgres is simpler. Get your cloud to manage it. Click to create instance, get failover with zero setup. Click button 2 to get guaranteed backups and snapshot point in time.

1718627440

When you use sqlite, you can distribute your program by distributing a single executable file. That's what I call simple.

rcarmo

This. So much this. Of course, at one point you start wanting to do queues, and concurrent jobs, and not even WAL mode and a single writer approach can cut it, but if you've reached that point then usually you a) are in that "this is a good problem to have" scalability curve, and b) you can just switch to Postgres.

I've built pretty scalable things using nothing but Python, Celery and Postgres (that usually started as asyncio queues and sqlite).

anonzzzies

Yeah, we run a fairly busy systems on sqlite + litestream. It's not a big deal if they ae down for a bit (never happened though) so they don't need failover and we never had issues (after some sqlite pragma and BUSY code tweaking). Vastly simpler than running + maintaining postgres/mysql. Of course, everything has it's place and we run those too, but just saying that not many people/companies need them really. (Also considering that we see system which DO have postgres/mysql/oracle/mssql set up in HA and still go down for hours do a day per year anyway so what's it all good for).

sachahjkl

back in the day, the hype was all arround postgres, but I agree

cpursley

12 years later and Postgres is (still) Enough and getting better by the day: https://gist.github.com/cpursley/c8fb81fe8a7e5df038158bdfe0f...

WesolyKubeczek

Heh

Once you have a service that has users and costs actual money, while you don’t need to make it a spaghetti of 100 software products, you need a bit of redundancy at each layer — backend, frontend, databases, background jobs — so that you don’t end up in a catastrophic failure mode each time some piece of software decides to barf.

blkhawk

uh, maybe you only have the issue that you need redundancies because you have so many pieces of software that can barf?

I mean it will happen regardless just from the side effects of complexity. With a simpler system you can at least save on maintenance and overhead.

WesolyKubeczek

Yes, but if your web server goes down for whatever reason, you’d rather have some more for your load balancer to round robin. Things like physical host dying are not exactly unheard of. Same with DB, once you take money, you want that replication and quick failover and offsite backup.

lifestyleguru

Are you doing software for money? Because not having Kubernetes in the project will stop you from receiving money. Someone please create with one of these smart AI tools the ultimate killer app: Kubernetes+crypto+AI+blockchain+Angular+Redux+Azure (Working only in Chrome browser).

hhh

yeah because kubernetes for most people isn't actually difficult and its complexity is overblown unless you are faang scale

d--b

Yet the author spent a whole afternoon (hopefully not more!) writing a website to tell some people (who exactly?) that they’re doing it wrong.

DrewADesign

Yeah, but the building phase of an overly complex system is rarely the big time suck: maintaining and modifying it are.

preommr

What the hell have you built? Turns out a pretty straightforward service.

That diagram is just aws, programming language, database. For some reason hadoop I guess. And riak/openstack as redundant.

It just seems like pretty standard stuff with some seemingly small extra parts because that make me think that someone on the team was familiar with something like ruby, so they used that instead of using java.

"Why is Redis talking to MongoDB" It isn't.

"Why do you even use MongoDB" Because that's the only database there, and nosql schemaless solutions are faster to get started... because you don't have to specify a schema. It's not something I would ever choose, but there is a reason for it.

"Let's talk about scale" Let's not, because other than hadoop, these are all valid solutions for projects that don't prioritize scale. Things like a distributed system aren't just about technology, but also data design that aren't that difficult to do and are useful for reasons other thant performance.

"Your deployment strategy" Honestly, even 15 microservices and 8 databases (assuming that it's really 2 databases across multiple envs) aren't that bad. If they are small and can be put on one single server, they can be reproduced for dev/testing purposes without all the networking cruft that devops can spend their time dealing with.

whstl

> Honestly, even 15 microservices and 8 databases (assuming that it's really 2 databases across multiple envs) aren't that bad

Sure, they aren't bad. They're horrible.

JSR_FDED

Whoosh

juangacovas

Nah, postgres is overhyped, MariaDB is enough and recently: <https://mariadb.org/mariadb-vs-postgresql-understanding-the-...>

stavros

I love this comment because it misses the point in exactly the way the article talks about.

n4r9

But what if all 12 users log in 100 times during the same second of the day?

stavros

It's a reasonable worry!