When 'Edge Case' Becomes an Excuse: Lessons From the AV Crackdown
US regulators just told self-driving car firms that emergency scenes aren't edge cases. Here's what that ruling teaches every developer about testing the rare-but-critical path.

Edge case testing just got a very public reality check, and I think every developer should read the fine print. The US National Highway Traffic Safety Administration (NHTSA) has told autonomous vehicle companies to stop letting their cars interfere with first responders, and it made one line the whole point: emergency scenes are not "edge cases."
I don't build self-driving cars. Neither do most people reading this. But that single sentence is the sharpest critique of how we write software that I've seen all year. TechCrunch reported the demand in "Feds demand autonomous vehicle companies stop interfering with first responders", and the framing is what caught me, not the cars.
🔍 What "edge case" really means in practice
In most codebases, "edge case" is where good intentions go to die. It's the label we slap on the branch we don't want to test yet.
The word does two jobs, and only one of them is honest:
- Honest use: genuinely rare, low-stakes input. A username with an emoji. A leap-second. Fine to defer.
- Dishonest use: a scenario that is rare for us but catastrophic for someone else. This is the one that bites.
The NHTSA point lands exactly on that second meaning. A fire truck blocking a lane is statistically uncommon in any single car's day. But the moment it happens, it is the only thing that matters.
Key takeaway: "Rare" and "unimportant" are not the same word. When you conflate them, you ship risk and call it a backlog item.
🛠️ How to tell a real edge case from a hidden priority
Here's the test I now use before I let myself write "edge case" in a ticket. Score the scenario on two axes and be honest about the second one.
| Question | Real edge case | Hidden priority |
|---|---|---|
| How often does it happen? | Almost never | Rarely, but predictably |
| Who is affected when it does? | Nobody, or just me | A user, a payment, a life |
| What's the blast radius? | A retry fixes it | Data loss, safety, money gone |
| Can the user recover alone? | Yes | No |
If a scenario is rare and high-impact and unrecoverable, it is not an edge case. It is a core requirement wearing a disguise. Emergency scenes for a self-driving car are all three. So is "the payment succeeded but our webhook timed out" for a small e-commerce build in Colombo.
💡 The Sri Lankan builder's version of this problem
Most of us here ship with a small team, a tight budget, and no QA department. That makes the temptation worse, not better. We deprioritise the rare path because we're moving fast on a free tier.
But our "emergency scenes" are specific and worth naming:
- The last day of the month when everyone submits at once and your single VPS chokes.
- A power cut mid-upload leaving a half-written file that your code assumes is complete.
- A Sinhala or Tamil name with characters your validation regex quietly rejects.
- The SLT connection dropping between "charge card" and "confirm order."
None of these are exotic. They are Tuesday. If your app only works on a fast connection with English input and no concurrency, you built a demo, not a product.
A regulator won't come knocking on a side project. But a user who lost their money on your checkout page will simply never come back, and they'll tell ten people why.
⚡ Testing the tail without a big budget
You don't need a test lab to cover the scary paths. You need to force the conditions your happy-path testing hides. A few cheap moves:
- Throttle yourself. Chrome DevTools has a network throttle. Run your whole flow on "Slow 3G" once before shipping. It's free and it's humbling.
- Kill things mid-flight. Ctrl+C the process during a write. Reload the browser during a submit. See what corrupts.
- Feed it garbage on purpose. Empty strings, huge inputs, non-Latin scripts, negative numbers where you expect positives.
- Test the second click. Double-submits are one of the most common real-world bugs and one of the least tested.
| Failure to force | Cheap way to test it | Real cost if you skip |
|---|---|---|
| Slow network | DevTools throttle | Abandoned checkouts |
| Interrupted write | Ctrl+C during save | Corrupt data |
| Concurrent load | Run 50 requests in a loop | Month-end downtime |
| Bad input | Paste emoji + long text | Silent validation failure |
The AV companies had telemetry, budgets, and lawyers, and still got a federal letter about a foreseeable scene. Your excuse for skipping the throttle test is thinner than theirs.
🌐 What this means for you
The story isn't really about cars. It's about a habit: labelling something "edge case" so we can feel finished before we are. A regulator just told an entire industry that the label doesn't excuse the outcome, and the same logic applies to the smallest side project.
Before your next release, take ten minutes and do one thing: list the three moments where your app failing would actually hurt someone, then go break each one on purpose. If it survives, ship with confidence. If it doesn't, you just found the requirement you were about to call an edge case.
Bottom line: Rare is not the same as safe to ignore. Test the moment that matters most, especially the one you were hoping wouldn't come up.