← Graphite Interview Insights

Graphite·Software Engineer·Onsite - System Design / Architecture·Senior

Senior
Jun 2026

Summary

System design round at Graphite for a software engineer role. The prompt was about building an i18n layer for a large-scale site, which sounds scoped but gets complicated fast once you start thinking about latency and developer ergonomics together.

Questions Asked (1)

Q1

Design an internationalization (i18n) system for a large website (think Airbnb scale, ~10M monthly active users, ~200 engineers) that's currently English-only and needs to support multiple languages. The system should minimize latency and require as little change as possible from engineers, ideally something like T("Hello") at the call site.

System DesignTechnical Trade-offsAPI & Integrations
Author's notes

The T() wrapper constraint was the interesting part.

Create a free account to read the full note

AI HintsAI Generated

Suggested Approach

Start by clarifying requirements and scale, then propose a client-side translation service with a simple T() API that fetches translations asynchronously and caches them. Discuss trade-offs between build-time and runtime translation loading, and how to handle dynamic content and pluralization. Finally, outline the rollout strategy and monitoring.

Pro tip: Emphasize that the biggest challenge is not the API but the translation management pipeline and ensuring engineers don't need to think about i18n. Propose a solution where translations are automatically extracted from code and synced with a TMS, and the T() function is a thin wrapper that handles caching and fallbacks.

1. Clarify Requirements and Constraints

Ask about supported languages, latency targets, and whether translations can be loaded asynchronously. Confirm that the T() API should be synchronous and simple for engineers.

2. Design the Translation Delivery Mechanism

Propose serving translations as JSON bundles from a CDN, with a client-side library that loads the appropriate locale bundle and caches it. Consider lazy-loading per route or component to minimize initial payload.

3. Define the T() API and Runtime Behavior

Design T(key, params) to look up translations from an in-memory store, with fallback to the key or default language. Handle interpolation and pluralization via ICU message format or similar.

4. Address Translation Management and Workflow

Describe how strings are extracted (e.g., via Babel plugin), uploaded to a TMS, translated, and then published back as JSON bundles. Ensure engineers only write T() and the pipeline handles the rest.

5. Discuss Rollout, Monitoring, and Trade-offs

Outline a phased rollout (e.g., one language at a time), monitoring for missing translations and latency, and trade-offs between build-time vs runtime, and client vs server rendering.

Key Points to Mention

  • Use of CDN and caching to minimize latency, with locale bundles loaded on demand.
  • Simple T() API that abstracts away i18n complexity, with support for interpolation and pluralization.
  • Automated extraction of strings from code and integration with a Translation Management System (TMS).
  • Fallback strategies for missing translations and default language.
  • Performance considerations: bundle size, lazy loading, and caching strategies.
  • Scalability: handling 10M MAU with 200 engineers, ensuring the system doesn't become a bottleneck.

AI-generated suggestions, not part of the candidate's original notes. May be inaccurate — verify before relying on them.