Skip to main content

Essential Reading Guide

Get up to speed on Prism fundamentals through this curated reading path. Each section builds on the previous, taking you from vision to implementation in ~45 minutes of focused reading.


TL;DR: What is Prism?

The Problem: Netflix-scale organizations need a unified data access layer, but existing solutions (Netflix's Data Gateway) are too slow and hard to self-service.

The Solution: A Rust-based proxy that's 10-100x faster, with client-originated configuration that enables team self-service while maintaining policy guardrails.

The Key Insight: Separate what (client APIs), how (patterns), and where (backends) into three layers. Applications declare needs; Prism handles backend selection, provisioning, and reliability patterns.

Performance: P50 <1ms, P99 <10ms, 200k+ RPS per proxy instance.


The Learning Journey

Phase 1: The Vision (10 min)

Read: Product Requirements Document (PRD)

Why start here: Understand the problem Prism solves, who it's for, and what success looks like.

Key takeaways:

  • 50x team scaling: Infrastructure team of 10 supports 500+ app teams
  • Zero-downtime migrations: Swap backends without client changes
  • Self-service provisioning: Teams declare needs; platform provisions resources
  • Success metrics: <1ms P50 latency, 10k+ RPS, 99.99% uptime

After reading: You'll understand why Prism exists and who benefits.


Phase 2: Core Decisions (15 min)

Read these four ADRs in order - they establish Prism's technical foundation:

ADR-001: Why Rust for the Proxy (4 min)

The choice: Rust instead of JVM (Go/Java/Scala)

The rationale:

  • 10-100x performance improvement (P50: 1ms vs 5-50ms)
  • Memory safety without GC pauses
  • 20MB idle memory vs 500MB+ JVM

Key quote: "Performance is a feature. Users perceive <100ms as instant; every millisecond counts."


ADR-002: Client-Originated Configuration (4 min)

The choice: Applications declare requirements; Prism provisions infrastructure

The rationale:

  • Applications know their needs best (RPS, consistency, latency)
  • Platform team sets policy boundaries (approved backends, cost limits)
  • Self-service scales to hundreds of teams

Example:

message UserEvents {
option (prism.access_pattern) = "append_heavy";
option (prism.estimated_write_rps) = "10000";
option (prism.retention_days) = "90";
}
// Prism selects: Kafka with 20 partitions

Read next: Namespace Configuration - See how to actually configure a namespace


ADR-003: Protobuf as Single Source of Truth (4 min)

The choice: Protobuf definitions with custom tags drive all code generation

The rationale:

  • DRY principle: Define once, generate everywhere
  • Type safety across languages
  • Custom tags drive: indexing, PII handling, backend selection

Example:

message UserProfile {
string email = 2 [
(prism.pii) = "email",
(prism.encrypt_at_rest) = true,
(prism.mask_in_logs) = true
];
}
// Generates: Encryption, masked logging, audit trails

ADR-004: Local-First Testing Strategy (3 min)

The choice: Real local backends (SQLite, Docker Postgres) instead of mocks

The rationale:

  • Mocks hide backend-specific behavior
  • Local backends catch integration bugs early
  • Testcontainers make this practical

Key practice: If you can't test it locally, you can't test it in CI.


Phase 2.5: Namespace Configuration Deep Dive (12 min)

After understanding the core decisions, learn how namespace configuration actually works in practice:

RFC-056: Unified Configuration Model (5 min)

Why read this: Understand the complete configuration story with standardized terminology.

Key concepts:

  • Four configuration layers: User Request → Platform Selection → Backend Provisioning → Runtime Execution
  • Unified terminology: "pattern" (not client_api), "needs" (not requirements)
  • Clear authorization boundaries: Guided/Advanced/Expert permission levels
  • Multi-tenancy hierarchy: Tenant → Team → Namespace

Key quote: "Users declare what they need, not how to implement it"


Namespace Configuration Documentation (4 min)

Why read this: Practical guide to creating and configuring namespaces.

What you'll learn:

  • Complete namespace configuration schema
  • All available patterns (queue, pubsub, keyvalue, reader, transact, etc.)
  • Functional requirements ("needs"): durability, consistency, capacity
  • Access control and compliance policies
  • Real-world configuration examples

Use this when: Actually creating a namespace for your application.


RFC-047: Namespace Reservation with Lease Management (3 min)

Why skim this: Understand how namespace uniqueness and security work.

Key concepts:

  • Global uniqueness: Admin plane ensures namespace names are unique across all proxy instances
  • JWT-based authorization: Namespace tokens grant configuration permissions
  • Lease lifecycle: TTL-based leases with refresh mechanism prevent abandoned namespaces
  • Standalone mode: Single-tenant deployments can skip admin plane coordination

When this matters: Multi-proxy production deployments, security audits.


Phase 3: System Architecture (10 min)

Read: MEMO-006: Backend Interface Decomposition & Schema Registry

Why read this: Understand the three-layer architecture that makes backend swapping possible.

The three layers:

Layer 3: Client Protocols (Application APIs)

Layer 2: Proxy DAL Patterns (KeyValue, Entity, TimeSeries, Graph)

Layer 1: Backend Capabilities (45 thin interfaces)

Key insight: Patterns compose backend interfaces to provide higher-level abstractions.

Example: Multicast Registry pattern uses:

  • keyvalue_basic (for registration storage)
  • pubsub_basic (for event distribution)
  • queue_basic (for durability)

Same pattern works with Redis+NATS+Postgres OR DynamoDB+SNS+SQS by swapping Layer 1 backends.


Phase 3.5: Configuration Model (10 min)

Read: Configuration Overview

Why read this: Understand the 6-layer configuration model that separates user needs from platform implementation.

The six layers:

  1. User Request (Layer 1) - Applications declare needs via namespace configuration
  2. Platform Policy (Layer 2) - Teams have permission levels (Guided, Advanced, Expert)
  3. Pattern Selection (Layer 3) - Prism automatically selects patterns based on requirements
  4. Backend Registry (Layer 4) - Operators register available backends
  5. Frontend Registry (Layer 5) - API protocol bindings (REST, gRPC, GraphQL)
  6. Runtime Execution (Layer 6) - Pattern runners and proxy configuration

Key documents:


Phase 4: Implementation Roadmap (10 min)

RFC-018: POC Implementation Strategy (7 min)

Why read this: See how we're building Prism incrementally with Walking Skeleton approach.

The 5 POCs:

  1. KeyValue + MemStore (2 weeks) - Simplest possible end-to-end
  2. KeyValue + Redis (2 weeks) - Real backend + acceptance testing
  3. PubSub + NATS (2 weeks) - Messaging pattern
  4. Multicast Registry (3 weeks) - Composite pattern (KeyValue + PubSub + Queue)
  5. Authentication (2 weeks) - Security + multi-tenancy

Key principle: Build thinnest possible slice end-to-end, then iterate.


MEMO-004: Backend Plugin Implementation Guide (3 min)

Why skim this: See backend priorities and implementability rankings.

Quick reference:

  • Highest priority: MemStore, Kafka, NATS, PostgreSQL (internal needs)
  • External priorities: Redis, SQLite, S3/MinIO, ClickHouse
  • Implementability ranking: MemStore (easiest) → Neptune (hardest)

Use this when: Choosing which backend to implement next.


Development Practices (5 min)

CLAUDE.md (Repository Root)

Why read this: Your guide to contributing to Prism.

Essential sections:

  1. Documentation Validation - Mandatory before committing docs
  2. TDD Workflow - Red/Green/Refactor with coverage requirements
  3. Git Commit Format - Concise messages with user prompts
  4. Monorepo Structure - Where things live

Coverage requirements:

  • Core Plugin SDK: 85% minimum, 90% target
  • Plugins (complex): 80% minimum, 85% target
  • Plugins (simple): 85% minimum, 90% target

Key quote: "Write tests first. If you can't test it locally, you can't test it in CI."


Your Reading Path

New to Prism? (47 min)

Follow this sequence to build complete understanding:

  1. Vision (10 min): PRD
  2. Decisions (15 min): ADR-001, ADR-002, ADR-003, ADR-004
  3. Namespace Configuration (12 min): RFC-056, Namespace Config, RFC-047
  4. Architecture (10 min): MEMO-006
  5. Development (5 min): CLAUDE.md

After this: You'll understand Prism's vision, technical foundation, namespace configuration model, architecture, and development practices.


Implementing a Feature? (20 min)

Start with implementation context:

  1. POC Strategy (7 min): RFC-018 - Which POC phase are we in?
  2. Namespace Configuration (3 min): Namespace Config - How to configure for your use case
  3. Backend Guide (3 min): MEMO-004 - Backend-specific guidance
  4. Testing Framework (5 min): MEMO-015 - How to write acceptance tests
  5. Observability (5 min): MEMO-016 - Add tracing/metrics

Then: Follow TDD workflow from CLAUDE.md


Writing an ADR/RFC? (10 min)

Understand the decision-making context:

  1. Read existing ADRs: See ADR Index for past decisions
  2. Check RFC precedents: See RFC Index for design patterns
  3. Use templates: docs-cms/adr/ADR-000-template.md for ADRs

Key principle: Every significant architectural decision gets an ADR. Every feature design gets an RFC.


Quick Reference

Most Referenced Documents

DocumentPurposeWhen to Read
PRDProduct visionOnboarding, strategic decisions
ADR-001 - ADR-004Core decisionsUnderstanding technical foundation
RFC-056Unified configuration modelUnderstanding namespace configuration
Namespace ConfigPractical namespace setupCreating/configuring namespaces
MEMO-006Three-layer architectureDesigning patterns, understanding backend abstraction
Configuration Overview6-layer config modelUnderstanding namespace configuration
RFC-018POC roadmapPlanning implementation work
CLAUDE.mdDevelopment guideDaily development, code reviews

Additional Deep Dives

Once you're comfortable with foundations, explore these for deeper understanding:

  • Namespace Management: RFC-047 - Namespace reservation and leases, RFC-048 - Cross-proxy partition strategies, ADR-006 - Namespace isolation and multi-tenancy
  • Testing: MEMO-015 - Cross-backend acceptance testing, MEMO-030 - Pattern-based test migration
  • Security: MEMO-031 - RFC-031 security review, ADR-050 - Authentication strategy
  • Performance: MEMO-007 - Podman container optimization, ADR-049 - Container strategy
  • Observability: MEMO-016 - OpenTelemetry integration, RFC-016 - Local dev infrastructure

Document Evolution

This guide evolves as the project grows. When adding foundational documents:

  1. Place in narrative: Where does it fit in the learning journey?
  2. Add time estimate: How long to read/understand?
  3. Explain "Why read this": What understanding does it unlock?
  4. Update reading paths: Does it change the recommended sequence?

Principle: Every document should have a clear purpose in someone's learning journey.


Reading time estimates assume focused reading with note-taking. Skim faster if reviewing familiar concepts.

Last updated: 2026-01-02