Design a Collaborative Editor
Company: Mintlify
Role: Software Engineer
Category: System Design
Difficulty: medium
Interview Round: Onsite
# Design a Collaborative Editor
Design a collaborative editor. Address frontend tokenization and change management, backend streaming updates and session-data journaling, Git integration, and the storage trade-off between blob snapshots and an append-only change stream.
### Constraints & Assumptions
- Several users may edit the same document concurrently and disconnect temporarily.
- Every accepted change needs a stable identity and ordering or merge rule.
- Git commits are durable milestones, not the low-latency collaboration transport.
### Clarifying Questions to Ask
- Is the document plain text, rich text, or structured blocks?
- Must editing work offline?
- What consistency and conflict behavior do users expect?
```hint Choose the merge model first
Tokenization, journaling, and transport depend on whether the system uses operational transformation, a CRDT, or serialized server operations.
```
### What a Strong Answer Covers
- Client document model, operations, cursors, and optimistic updates.
- Concurrency algorithm and deterministic conflict handling.
- Streaming protocol, acknowledgments, reconnect, journal, and snapshots.
- Persistence, Git bridge, compaction, access control, and observability.
### Follow-up Questions
1. How would you migrate the operation format without breaking active sessions?
2. How would large binary assets be referenced without entering the text-operation stream?
Overview: Design a real-time collaborative editor around explicit merge semantics, streamed operations, journals, snapshots, reconnect, and Git milestones.