Skip to main content

Design Google Docs

Understanding the Problem

📄 What is Google Docs ?

Google Docs is a browser-based collaborative document editor. Users can create rich text documents and collaborate with others in real-time.

In this writeup we'll design a system that supports the core functionality of Google Docs, dipping into websockets and collaborative editing systems. We'll start with the requirements (like a real interview), then move on to complete the design following our Delivery Framework .

Functional Requirements

Core Requirements

  1. Users should be able to create new documents.
  2. Multiple users should be able to edit the same document concurrently.
  3. Users should be able to view each other's changes in real-time.
  4. Users should be able to see the cursor position and presence of other users.

Below the line (out of scope)

  1. Sophisticated document structure. We'll assume a simple text editor.
  2. Permissions and collaboration levels (e.g. who has access to a document).
  3. Document history and versioning.

Non-Functional Requirements

Pattern: Real-time Updates

This pattern of needing push updates to clients across a scaled backend service is a quintessential example of the real-time updates pattern.

Learn This Pattern