docs/internals/adr/EVOLUTION.md
This document defines how Quickwit tracks architectural change through three complementary lenses.
Architecture Evolution
│
┌────────────────────────┼────────────────────────┐
│ │ │
▼ ▼ ▼
Characteristics Gaps Deviations
(Proactive) (Reactive) (Pragmatic)
│ │ │
"What we need" "What we learned" "What we accepted"
│ │ │
From requirements From production From trade-offs
| Lens | Question | Trigger | Outcome |
|---|---|---|---|
| Characteristics | What capabilities must we have? | Product requirements, competitive analysis | Feature roadmap, ADR targets |
| Gaps | What limitations have we discovered? | Incidents, scale tests, code reviews | Potential ADRs, system improvements |
| Deviations | Where did we intentionally diverge? | Implementation trade-offs, PoC scope | Documented tech debt, migration plans |
Quickwit handles three observability signals: metrics (current priority), traces, and logs. Architectural decisions should generalize across all three, but metrics drives the initial implementation.
Location: Tracked in ADRs as they are created.
Purpose: Track implementation status of cloud-native storage and query capabilities required for production observability at scale.
Status Legend:
Location: gaps/
Purpose: Capture design limitations discovered through production behavior, incidents, or research. Lightweight pre-ADR documents that may evolve into formal ADRs.
Lifecycle:
Discovered → Open → Investigating → ADR-Drafted → Closed
↓
(Won't Fix) → Closed
When to Create:
Current Gaps:
| Gap | Title | Status | Severity |
|---|---|---|---|
| 001 | No Parquet Split Compaction | Open | High |
| 002 | Fixed Hardcoded Sort Schema | Open | Medium |
| 003 | No Time-Window Partitioning at Ingestion | Open | High |
| 004 | Incomplete Split Metadata for Compaction | Open | High |
| 005 | No Per-Point Deduplication | Open | Medium |
| 006 | No Independent Auto-Scaling | Open | High |
| 007 | No Multi-Level Caching | Open | High |
| 008 | No High Query Rate Optimization | Open | High |
| 009 | No Leading Edge Prioritization | Open | High |
Location: deviations/
Purpose: Document where actual implementation intentionally differs from ADR intent. These are known, accepted trade-offs - not bugs.
When to Create:
Current Deviations:
| Deviation | Title | Related ADR | Priority |
|---|
No deviations recorded yet.
A gap may provide evidence for a characteristic's partial status.
A gap may evolve into a formal ADR when the solution is designed.
A gap may become a deviation if we decide to accept the limitation.
A characteristic marked as not planned should have a corresponding deviation explaining why.
Problem Discovered
│
▼
Is it a known requirement?
│
┌────┴────┐
│ Yes │ No
▼ ▼
Update Create Gap
Characteristic │
Status ▼
Can we fix it?
│
┌─────┴─────┐
│ Yes │ No (or not now)
▼ ▼
Draft ADR Create Deviation
(close gap) (document trade-off)
| Document Type | Review Cadence | Owner |
|---|---|---|
| Characteristics | Quarterly (roadmap sync) | Product/Architecture |
| Gaps | After incidents, scale tests | Engineering |
| Deviations | Before major releases | Tech Lead |