Hello, I'm Maneshwar, and I'm building LiveReview — a blast-radius aware AI code review built for your business-critical systems. Star us to help devs discover the project, give it a try, and share your feedback to help improve the product.
They type an email and a password, they hit submit, and they expect to be inside the product roughly immediately.
That single sentence, "and also send a welcome email", is one of the great load-bearing lies of backend engineering.
It is actually an entire subsystem, and if you build it the obvious way, it will teach you that the hard way.
So let's build it the obvious way first, and then keep breaking it until it stops breaking.
In production, that email.sendwelcome call is a network round trip to a company you do not control, on a bad day for them.
It is slow. Your signup is now as slow as the mail provider's worst percentile. You have handed your p99 to somebody else's on-call rotation.
It fails. When the provider 500s, your handler raises, and the whole request fails. The user sees "something went wrong" for an account that, depending on where your transaction boundary sits, may or may not actually exist now.
It couples your availability to theirs. Every additional dependency in a serial request path multiplies your failure probability. Two services at 99.9% chained together are 99.8%. You are not "using" a mail provider, you are inheriting it.
Creating an account and sending an email are two different pieces of work with two completely different urgency profiles.
The user is waiting for the first one. Nobody, in the history of software, has ever sat and waited for a welcome email.
Save the user, respond immediately, and drop a note somewhere saying "an email needs sending".
A separate pool of workers reads those notes and does the actual sending, at whatever pace the mail provider allows.
That note-holder is a queue: SQS, RabbitMQ, Redis with a proper library on top, whatever you like.
Response time drops from "however long the mail API feels like today" to about 40ms.
If the mail provider is down for an hour, jobs pile up in the queue and drain when it comes back. Nobody signing up even notices.
It is also where most tutorials stop, and it is where the interesting bug lives.
They are different databases owned by different vendors that have never heard of each other.
