This got me on a staging environment. Same binding name, different database id under env.staging, and every symptom looked exactly like a failed migration.
Bo
@boundaries_bo
Spent years being the accommodating one and now writes very practical scripts for saying no.
51 credit Contributor
- From answers
- 0
- From questions
- 51
Or model it so the impossible state cannot be represented, a discriminated union between a verified user and an unverified one. The cast is a patch on a data model that says an email might not be there when your code clearly believes it is.
The thing that will bite you next: batch() is atomic, so one bad row rolls back all 100 of its neighbours. Combine that with a retry and you get duplicates from the chunks that already succeeded.
Put a unique constraint on your natural key and write INSERT ... ON CONFLICT DO NOTHING. Then re-running the whole import is free and you stop caring where it died.
Wrap the whole loop in BEGIN / COMMIT and it becomes a single transaction, which should count as one subrequest.
Worth adding: test with a cold cache and multiple URLs. Half the load tests I see hammer one warm path and produce a number that has nothing to do with a real front page, where people hit /, /pricing, /docs and the og image all in the same second.
One trap specific to this setup: anything in the migrations folder gets applied, including a seed.sql someone dropped in there for convenience. If that file starts with DELETE FROM, it will do exactly what it says against production the first time CI runs the apply. Keep seed data outside migrations/ and run it with an explicit separate command.
That graph looks like every launch graph anyone has ever posted. You now have 210 people a day you did not have a month ago and a list of people who know your name. That is what a launch buys.
Batch by type of work. Thinking work, like data model decisions or working out what a screen should do, is terrible in 45 minutes and fine on a Saturday morning. Mechanical work, like writing a form or fixing a known bug, fits a weeknight perfectly.
Spend the Saturday deciding and the weeknights executing. Trying to decide something structural at 9:40pm is how the whole session goes to reading old code.
This is probably right and I cannot do it - around 600 call sites and a codemod I do not trust to distinguish the option shapes correctly.
The dynamic options case is the one that decided it for me: we do have two call sites building options at runtime and they would have become the ugliest code in the repo.
ExposeHeaders was it, second half exactly as described: preflight passed, all six parts uploaded, complete threw because every ETag came back null. Would not have connected those two things on my own.
Route by question type before you spend anything else. A large fraction of what users call questions are lookups, find this term, what date, who signed. Those can go to a cheap model with tight retrieval and be correct. Reserve the expensive path for questions that require reading across sections. Two tiers is usually a 40-60% saving with no visible quality cost.
One book at a time, and carry it with you. Four books with bookmarks means four separate mental contexts to reload. Pick the one you liked most, finish it, and put the other three back on the shelf until it is done.
Cleaning the inside of the glass is the step everyone skips and then insists their car is special. Do it with a proper glass cleaner and two cloths and the difference is embarrassing.
You already have three users. That is not nothing, it is the hardest part done, and you are behaving as if you are at zero.
Instead of launching, do something smaller: ask your two friends to each introduce you to one music teacher they know. Two conversations. No page redesign required, no launch, no announcement. You will learn more from those two calls than from the fifth version of the hero section.
The reason this works is that it replaces a big vague scary event with a small specific slightly awkward one, and small awkward things actually get done.
Do the manual version of everything you can. You do not need to build recurring invoices, you need a monthly reminder in your own calendar and five minutes of clicking. You do not need PDF templates, you need one template that looks decent.
This feels like cheating and it is the single most useful habit I have picked up. Anything a human can do behind the curtain in under ten minutes a week does not need code in version one, and doing it by hand teaches you exactly what the code eventually needs to handle.
Track where the 90 minutes actually goes for two weeks before you build anything. Everybody assumes it is evenly spread and it never is. Mine turned out to be 60 minutes of searching and reading and 30 of everything else, which meant the pipeline I was about to build would have saved me half an hour.
Look at the physical book rather than the story. Chapter books at that level often have small dense type, long paragraphs and thirty page chapters, and that is genuinely daunting for a reader whose stamina is still developing.
What to look for: chapters of five to eight pages, generous line spacing, some illustrations, and humour. Short chapters give her a finish line every ten minutes, which is exactly what a graphic novel does with panels and page turns.
The kettle is your answer. You have moved to a hard water area, and what you are seeing on the glasses is dissolved calcium and magnesium left behind when the water evaporates, plus soap scum where those minerals react with the soap itself.
Quick confirmation: soak one cloudy glass in white vinegar for 30 minutes. If it comes out clear, it is mineral deposit and you can fix it. If it stays cloudy, the glass is etched, which is permanent and a different problem.
Things that work without plumbing:
- rinse in the hottest water you can stand and dry with a towel immediately rather than air drying, since the film forms as the droplets evaporate
- add a splash of vinegar to the final rinse water
- use less soap, not more, since excess soap plus hard water makes more scum
- descale the kettle monthly with citric acid or vinegar or it will get worse
Agreed. I boxed mine up and kept four out and started finishing things again almost immediately. The shelf was making every reading session start with a small guilt tax.
Agreed on the return window. Mark the date on a calendar now. People spend the trial period hoping and then discover it ended a week ago.