Notifications can arrive out of order and can be redelivered. Key on the original transaction id and treat every notification as an upsert of current state rather than an event that mutates state, or you will eventually process an expiry after the renewal that superseded it.
Sal
@stropping_sal
Maintains kitchen knives for a small restaurant and strops more than she grinds.
51 credit Contributor
- From answers
- 0
- From questions
- 51
Split by failure mode rather than by tool.
Component tests catch "this combination of props renders wrong". E2E catches "this button is wired to the wrong action". Your combobox is entirely the first kind: focus moves to the wrong option, the listbox measures wrong at the viewport edge, escape does not restore focus. None of those are reachable from a checkout flow test without twenty lines of setup.
So: browser mode for the eight or ten widgets where jsdom actively lies, and nothing else. Do not migrate the 400 unit tests. Pure logic in jsdom is fine and it is fast.
Before you decide either way, check the vent. Two cycles to dry a load is the single most common symptom of a blocked or crushed vent hose, and it is free to check.
Pull the machine out, disconnect the duct, and look at the whole run to the outside including the flap on the wall. Lint packs into the elbows and behind the flap. I have seen a machine that everyone had written off run like new after ten minutes with a brush and a vacuum.
If the vent is clear and the element genuinely is dead, 180 on a twelve year old dryer is reasonable. Dryers are simple machines, the drum and motor outlast everything, and elements and thermostats are the normal wear parts. The rough rule I use is that repairing is worth it up to about half the replacement cost, and 180 against 600 is comfortably inside that.
If drying the mats does not fix it, check the drain under the windscreen where the wipers sit. Leaves block that channel, water backs up, and it finds its way into the cabin filter housing or the footwell. The tell is a damp carpet under the passenger side that people never notice because it is under a mat.
Press your hand flat into the carpet in both footwells. If it comes up damp, that is your route, and no amount of AC will fix it.
coverage is a bad metric, everyone already knows this
Validation is maybe 15% of it. The rest is a state machine, and it is the same list on both platforms with different vocabulary:
- introductory offers and free trials, and who is eligible for which
- grace period and billing retry
- upgrade, downgrade and crossgrade, and the proration each implies
- refunds and revocations after the fact, including partial ones
- family sharing
- a subscription that lapses and then resubscribes months later under the same original id
- notifications arriving out of order, twice, or six hours late
Each is a couple of days plus one support ticket you get wrong first. At $21 a month the vendor is cheaper than any single bullet on that list, and you have seven of them.
Revisit at $10-20k MRR when the bill is a real line item, not now.
One more variable: the cut. Chuck is a big muscle group and some parts of it are much leaner than others. If your butcher gave you a piece from the leaner end, it will never pull the way a well marbled piece does, no matter how long you give it. Ask for chuck with visible fat running through it rather than the neatest looking piece in the case.
Worker-scoped is the ergonomic sweet spot. Per-test creation is purest but you pay a signup round trip 40 times; per-worker you pay it four times and tests still cannot collide across workers.
Do not use delayed queue messages for anything editable. You end up keeping a cancellation table so the consumer can check "is this still wanted" on delivery - at which point you have built option B anyway, but with two sources of truth and a race between them.
Delayed messages are for things that are true when you enqueue them and stay true.
Read your own terms before you read anyone's opinion. Half of the templates people paste in say 30 days, some say "at any time for any reason", and a few promise 60. If you promised 60 you do 60, and what the internet thinks is normal is irrelevant.
Fill level matters too. These machines are designed to run somewhere between half and two thirds full. Half a recipe in a big cooker sits in a thin layer with a lot of exposed hot wall, and a cooker crammed to the brim traps steam and stays wetter. If you are always cooking small amounts in a large machine, that is part of the pattern.
Counterpoint on size, since everyone is saying go smaller. If you batch cook specifically to fill the freezer, the bigger one is genuinely useful, and you just have to accept doing full recipes rather than half ones. I cook eight portions of chilli in one go in a large machine and freeze six. It is only a problem if you try to cook small amounts in it.
Your water supplier usually publishes hardness for your postcode, which saves guessing at the machine setting. Mine was two levels off the default and it made a visible difference the same week.