Blog
Notes from building MailFlat. Mostly things that went wrong, what the measurement actually said, and the decision that came out of it.
Our test clicked a button our users couldn't reach
A form was cut off at the bottom of the screen and nobody could scroll to it. Our end-to-end test scrolled there anyway, clicked, and passed.
We show your API key once, and here is the option we turned down
A schema task turned out to contain an unwritten product decision. Three options, three costs, and the one we put on a shelf instead of in the bin.
SQLite doesn't enforce foreign keys by default, and it cost us three bugs
Three bugs in three weeks, all from the same gap: our tests ran on SQLite while production ran on PostgreSQL.
Your backfill is a photograph
A migration fixed every row we had. Nobody wired the path that creates new ones, and the gap stayed invisible for two weeks.