Team Chat (Slack-style)
Channel-based messaging with search, presence and integrations.
IntermediateSocialPlatform
Messages post to channels, get indexed for search, and fan out to connected clients over a real-time connection, while a separate integrations layer lets external services post into channels via webhooks.
When to use it
- Communication is organised around channels/workspaces rather than 1:1 threads
- Full-text search across message history and third-party integrations are core requirements
Trade-offs
- Search indexing lag means the newest messages may not be immediately searchable
- Workspace-scale channels with many members stress the real-time fan-out path
Components used
Desktop AppAPI GatewayManaged App ServiceDocument DatabaseSearch IndexEvent BusEdge Function
How it works
- Messages belong to channels rather than individuals, so delivery is a subscription problem — every connected member of a channel receives new messages.
- A separate search index makes history queryable, since chat's value compounds with archive size.
- Presence and typing indicators are high-frequency ephemeral signals, usually kept out of the durable message path entirely.
Used in the wild
- Workplace collaboration platforms.
- Community and gaming chat servers.
- Support consoles where agents share channels.
Good to know
- Presence generates surprising load: every status change notifies everyone who can see that user, which in a large workspace is a quadratic fan-out problem.
- Enterprise buyers care enormously about retention policies and compliance export, which means deletion must be genuinely enforced across the message store, the search index and every cache.
Related system design
URL Shortener
Create short aliases, then redirect quickly from a cache-backed read path.
Pastebin / Snippet Hosting
Store snippets as text or markdown, retrieve them by id, and optionally render preview.
Web Crawler / Search Indexer
Discover pages, crawl them, extract content, and index for search.
Distributed Rate Limiter
Count and throttle requests globally across many gateway instances.