Design Confluence

Hard45 min
1 / 30
understanding9 min read

Problem Statement: Confluence as Enterprise Wiki

How Problem Statement: Confluence as Enterprise Wiki (understanding) informs Confluence architecture and interviewer depth.

Problem Statement: Confluence as Enterprise Wiki

Confluence is Atlassian's team wiki: hierarchical pages grouped into spaces, each with independent permissions, version history, attachments, and macro-rendered dynamic blocks (Jira issues, status lists, include-page). Interviews test whether you model content as versioned documents with ACL inheritance down the page tree—not a flat CMS. Real Confluence serves tens of thousands of enterprises; a design must survive org-wide search, restricted pages, and optional real-time co-editing without corrupting immutable audit trails.

The hardest tensions are macro execution latency (server-side rendering on read), permission evaluation on every subtree operation, and search freshness after bulk permission changes. Authors expect sub-second autosave feel; readers expect consistent rendered HTML even when macros call external systems. Atlassian's production stack historically couples monolith services with extracted search (Lucene/OpenSearch) and media object storage—your whiteboard should echo that separation.

Key Highlights

  • Treat each save as an append-only content revision keyed by (space_id, page_id, revision_id)
  • Immutable revisions are the audit trail; the search index and macro cache are derived projections
  • Spaces own permissions; ACL inherits down the page tree, evaluated on every subtree operation
  • Under load, degrade macro render and presence before delaying the durable revision append

Append-Only Page Publish

A publish never overwrites a page row — it appends a new immutable revision guarded by the caller's expected ETag (optimistic concurrency). ACL is checked before the write; search and macro rendering happen asynchronously off the published event.

One Dark Pro
pythonOne Dark Pro
1# A publish never overwrites: it appends a new immutable revision
2# guarded by the caller's expected ETag (optimistic concurrency).
3def publish(page: PageRef, body: Adf, if_match_etag: str, actor: Actor) -> Revision:
4 acl.require_edit(actor, page) # ACL checked before write
5 head = revisions.head(page)
6 if head.etag != if_match_etag:
7 raise Conflict(head.etag) # 409: someone published first
8 nxt = head.append(body, actor, utcnow())
9 revisions.save(nxt) # append-only, never UPDATE
10 events.publish(PagePublished(page, nxt.id)) # search + macro async
11 return nxt
Interview tip
Lead Problem Statement: Confluence as Enterprise Wiki with user journeys, quantified assumptions, then failure degradation.
Avoid
Treating Confluence as a single HTML blob without versions, space ACL, or macro isolation.

Section Rescue Kit

Buzzwords to use:

Immutable revision logIndex-time ACL snapshot

Safe statements:

  • "For Problem Statement: Confluence as Enterprise Wiki, I keep revision append on the critical path and push macros async."
  • "I will cite tenant_id sharding and hot-space isolation before adding microservices."
Design Confluence - System Design | WinJob | WinJob