
Was It Sent?
Monitors app emails and alerts you when they stop sending
September is the most hectic part of the year. Kids go back to school and extracurricular activities dot the afternoons and evenings. After a restful summer everyone is full of energy and ready to start new things. Regular work kicks back into full gear.
I've built side projects before. The difference is that back then I had more free time. This time around, with three wonderful kids and all the commitments that come with them, time was very limited.
In times like this, two things are necessary: prioritize ruthlessly and find the leverage.
Prioritization was key. I sketched out a map to MVP, starting with core functionality, and building a shell around it until it became something that someone could use to do simple email monitoring. Minimal integrations. Minimal UI. But usable.
Ruthless it was. I would catch myself regularly thinking or wanting to work on something that was not on the critical path to MVP. Luckily I was able to muster enough discipline to stop and put that work into the "later" bucket on the TODO list. The "now" and "next" were only for things that led directly to the MVP.
I decided to lean into AI coding tools for leverage. I am (was?) an AI sceptic. Coding is an art as much as a science and I doubted how much help AI tools could provide. It turns out, they were very helpful. I was positively surprised.
One day I was with my kids at the playground and was mulling the data model around in my head. I decided to see if I could get ChatGPT to write it. I was blown away. I was able to work up a data model iteratively, and shape it through a typed conversation. It's as if I was chatting with a super-quick junior-but-quite-knowledgable programmer. It made silly assumptions, but corrected things when I explained better what I wanted. When I was done the data model was ready for pasting into a Django project. All from a bench at a playground.
I found my leverage. I could use AI tools in places where I had no keyboard and screen to push the implementation forward in tangible ways. I talked to ChatGPT while driving to build a marketing plan. I rough-coded a bunch of integrations while sitting on a train. I could get something 90% done at various times of my day. When I had time, I'd sit down at the computer, paste it into the IDE, and refine it all the way.
Then, I discovered cursor. My mind was blown. I could code wide swathes of the basic functionality by carefully describing what I want. I could ask it to change things I did not like. It did a pretty good job, and saved me hours of typing.
Over roughly two weeks I was able to get a solid MVP. This was about half as much time as on prior side projects of similar complexity, and with less available time-at-keyboard.
With the help of AI, the code is in better shape and with more documentation than it would have been had I typed it all out myself. I can focus more on what I want the app to do and spend less time typing out the boilerplate.
wasitsent.com is now live. It feels good. Next step is to move away from building and put on the marketing hat. It's going to be tough and will require a lot of learning, but I'm off to see where this will go.
Background: I started my career as an engineer, moved to management, and now I advise early-stage engineering teams on what they need to do as they grow their teams and product. I help them solve problems and mature their tooling and process.
I was talking to a client of mine who is building a SaaS product. Just that day he realized that the email sending within his application stopped working and mentioned it as an aside. No user notifications were going out.
In the evening I was doing some work setting up monitoring tooling for another client of mine. I set up uptime checks, health checks for the DBs and queues, infrastructure metrics and alarms, cron monitoring, alerting, and incident management. I thought about how my other client could prevent such email outages in the future. I could monitor any one part of the email sending stack, but not email sending in general.
Looking back at my career, email sending broke in my apps a few times. I also heard a number of stories over the years. The problem is that each time it's something different. A credit card expired and the SMTP service stopped working. Someone messed up the SPF records. The dev key got deployed to the production server. A PR conflict was resolved wrong. Someone got the state machine for notifications wrong.
Then it hit me that we could monitor email sending end to end. All it would take is to set up an email address that expects an email to be send at a certain time. If the email is not received, it would alert the responsible person.
A few days later another client of mine complained that they found 180,000 unsent emails . They run a sizable e-commerce operation and this was a pretty serious problem. The issue was not a total outage, but certain kinds of emails stopped sending. It cost them thousands of dollars per month. I realized there might be a market.
In order to validate the idea I hit some forums. People shared a few similar stories but no one heard of any solutions for this. Every time someone decided to monitor emails, they put together their own solution.
Next I put up a landing page explaining the concept. It was ugly, but a solid handful of people left their emails to notify them when it launches.
The more I thought about it, the more it made sense. One thing that everyone learns at they mature as an engineer is that things will always break. It's foolish to try to build "perfect code" and "infallible systems". Instead, you should focus on noticing when things break, and fixing them quickly. The metric is called MTTR - mean time to recovery - and is one of the core DORA engineering metrics that all serious engineering teams should track. To keep MTTR low, you need to quickly notice failures, and react to them promptly. When building and iterating, every startup should have systems in place to catch production failures and errors, so that they can be fixed quickly. This way, you can truly run quickly and break things, knowing that they won't be broken for long.
I was ready to start building.
1 Like
Comment
About
When email sending broke in my app, it always took some time to notice. People keep having the same issues. Emails are fragile but no one monitors them. We monitor infrastructure, uptime, and jobs, but not emails.

1 Comment
Tried to integrate this into my app. App itself is looking great! Ran into a 500 error when trying to create a notification email. Happy to connect if you'd be interested in helping me get set up!