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.
1 # A publish never overwrites: it appends a new immutable revision 2 # guarded by the caller's expected ETag (optimistic concurrency). 3 def 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
Section Rescue Kit
Buzzwords to use:
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."