Postel's Law

Be liberal in what you accept, and conservative in what you send.

The scenario: the phone-number field on the Fernvale Goods checkout. Both versions below are live — try them. Each is pre-filled with a perfectly normal way people write their number: “+30 210 555 0199”. Click away from the field (or press the button) and watch how each version treats it.

What's wrong here? The form demands exactly 10 digits — no spaces, no dashes, no “+30”. A customer pasting their number the way it's written on their own business card gets shouted at in red caps. The system pushed its parsing job onto the human. Try clicking into the field and then away, or press “Continue to payment”.
fernvalegoods.com/checkout/delivery

Delivery details

Step 2 of 3 — we'll text you when the courier is nearby.

Linen throw blanket × 1€64.00
Format: 10 digits, no spaces, no symbols, no country code.

🔍 What changed

  • Liberal in: the field now accepts every common way people write a phone number — spaces, dashes, brackets, “+30”.
  • Conservative out: whatever comes in, one canonical E.164-style number (+302105550199) is what gets stored and sent to the SMS gateway.
  • The harsh red “INVALID FORMAT” error became a calm confirmation of what we understood.
  • Normalizing punctuation is one line of code for us; retyping a number to satisfy a regex was friction for every customer.

💼 Explaining it to stakeholders

“Every ‘invalid format’ error at checkout is us rejecting a paying customer over punctuation. People copy their phone number from their contacts card, with spaces and a country code — that's not bad data, it's normal data. By accepting any reasonable format and normalizing it ourselves, we keep our systems receiving one clean, consistent value while removing a proven abandonment point from the highest-value page we own.”