intermediate 2 min answer

What must be designed for internationalisation on day one, and what can genuinely wait?

i18ndata-modeltimezonesretrofitformatting
Show the full answer Hide the answer

What is being tested

Whether you can separate the structural decisions that are expensive to retrofit from the work that is genuinely deferrable.

Day one — because retrofitting is expensive

1. The data model. Name and address structures. Assuming first-name plus last-name, or a fixed postcode format, excludes large parts of the world and is the single most expensive thing to change later — it touches storage, validation, display, integrations and every historical record.

2. Time zones done correctly. Store instants in UTC; render in the user's zone; and for future events store the zone identifier, not an offset. Offsets change with daylight saving and political decisions, so a stored offset silently shifts a future appointment.

3. No user-visible strings in code. Externalised from the start. Retrofitting means finding every one, and they hide in error messages, emails, PDFs and validation.

4. Locale as a request parameter, propagated everywhere — including to asynchronous work. An email sent by a background job needs the user's locale, which must have travelled with the job.

5. Locale-aware formatting from a library, never string concatenation, for dates, numbers, currencies and addresses.

6. Money as an amount plus a currency, never a bare number.

Can genuinely wait

  • Actual translations. The structure must support them; the content can come later.
  • Right-to-left layout, provided the CSS approach does not preclude it.
  • Locale-specific content and imagery.
  • Per-locale legal and compliance text.

Why the split falls where it does

The expensive items are all structural assumptions embedded across layers: the data model, time handling, and the plumbing that carries locale. Each is cheap to do correctly at the start and requires touching every layer afterwards.

The deferrable items are content, which is additive by nature.

The traps worth naming

Text expansion of 30–50% breaking fixed-width layouts. Pluralisation, which no amount of string interpolation handles across languages — use a library. And collation, since the same list sorts differently in different languages, which matters for any user-facing ordering.