Engineering Manual
A structured course: foundations, implementation, operating systems, networks, security and architecture. Specialist labs are electives.
Start here: Amazon SDE II
This curated path prioritizes coding, maintainable design, databases, concurrency and system design before specialized infrastructure.
- Computational foundations and data structures25 published chapters
- Algorithm design and coding12 published chapters
- Object design, SOLID and maintainability17 published chapters
- Runtime, databases, networking and security32 published chapters
- System design from requirements to failures10 published chapters
- Optional: advanced distributed design and worked systems9 published chapters
- Independent exercises and communication10 published chapters
- Optional deeper compiler and VM foundations10 published chapters
Open the complete study path →
Study tracks
- Computer Science — Core CurriculumA general prerequisite-led education with explicitly documented gaps.
- Advanced Systems — Optional LaboratoriesInfrastructure and adversarial experiments after the core curriculum.
Unpublished topics remain explicit gaps; passing an automated test does not certify a chapter as technically complete.
Browse by category
Foundations of Computing (29)
Proofs, program semantics and computational reasoning.
- Programming fundamentals: control flow, functions and loop invariantsLearn branches, loops, functions, scope and invariants by tracing a complete linear-time array algorithm with boundary tests.
- Data types and representation: integers, bytes, text and precisionLearn type contracts, integer bounds, byte order, UTF-8 lengths and numeric precision through a reproducible binary record format.
- Logic, Proof Techniques and Loop InvariantsBuild precise program arguments with propositions, quantifiers, counterexamples, induction, loop invariants and termination proofs.
- Programming Semantics, Aliasing and Executable ContractsReason about evaluation, equality, mutation, exceptions and function contracts before using language features in algorithmic solutions.
- Programming memory: references, aliasing and object lifetimesUnderstand name bindings, identity, mutable aliases, call frames and immutable snapshots through a reproducible memory model.
- C programming foundations: pointers, arrays, bounds and object lifetimesLearn C pointers, array decay, valid pointer arithmetic, ownership and lifetime through a bounded C11 program and tests.
- Discrete Mathematics: Sets, Counting and Exact ProbabilityLearn counting identities, combinations, conditional probability, Bayes and expectation with exact fractions and independently tested examples.
- Binary Relations, Equivalence Classes and Partial OrdersDerive equivalence partitions, partial orders, reachability closure and topological dependencies with executable counterexamples.
- Asymptotic Analysis and Algorithmic CostDerive time and space complexity from loops, recurrences and invariants, while distinguishing worst-case, amortized and expected costs.
- Floating-point reasoning: rounding, cancellation and compensated summationAnalyze binary approximation, nonassociative addition and Neumaier compensated summation using exact rational oracles.
- Numerically stable statistics: online mean and Welford varianceDerive one-pass mean and variance updates, distinguish sample and population denominators and test against exact fractions.
- Number theory fundamentals: divisibility, GCD and the Euclidean algorithmDerive divisibility, the Euclidean algorithm and Bézout coefficients with proofs, signed inputs and independent exercises.
- Modular arithmetic: congruences, inverses and fast exponentiationDerive congruences, modular inverses and repeated squaring with correctness invariants and exhaustive small-number tests.
- Algorithmic reasoning: specifications, brute force, invariants and optimizationLearn a repeatable problem-solving method by deriving a correct linear-time solution from a quadratic reference algorithm.
- Recursion, Call Stacks and Divide-and-ConquerUnderstand recursive contracts, base cases, stack frames, termination proofs and divide-and-conquer recurrences with executable tests.
- Solving Algorithmic Recurrences: Trees, Substitution and Master TheoremDerive and independently verify divide-and-conquer recurrences, exact operation counts, Master cases, counterexamples and stack costs.
- Python error contracts: exceptions and resource cleanupSpecify invalid data, propagate exceptions and verify context-manager cleanup with reproducible source streams.
- File and data fundamentals: bytes, UTF-8, JSON schemas and safe boundariesRead bounded UTF-8 JSON files, reject ambiguous or malformed data and write validated records with explicit failure limits.
- From C source to executable: preprocessing, object files and linkingCompile multi-file C11, understand translation units, object symbols, linking failures and loader boundaries.
- Formal Languages and Finite Automata: DFA, NFA, Epsilon Closure and DeterminizationBuild the computational model behind lexical analysis: define languages, derive DFA/NFA equivalence, implement epsilon-closure determinization, and test it independently.
- Context-Free Grammars, Pushdown Automata and Syntax AnalysisDerive context-free recognition, implement a pushdown recognizer and syntax tree, and test an Earley-style chart parser with independent oracles.
- An Expression Compiler: Lexing, Precedence Parsing, AST, Bytecode and Virtual MachineImplement an auditable arithmetic language from ASCII tokens to an AST, stack bytecode and exact rational evaluation, with independent tests.
- Static Type Checking, Lexical Scopes and a Typed Expression CompilerExtend the expression compiler with typed let-bindings, lexical shadowing, Boolean conditionals, static judgments and verified stack bytecode.
- Typed Functions, Lexical Closures and Bytecode Call FramesCompile typed first-class functions, lexical closures and higher-order calls with explicit VM activation frames and independent execution tests.
- Mutable Cells, Shared Closures and Typed Recursive FunctionsExtend typed functions with mutable lexical cells, assignment and let-rec initialization, then verify aliasing and recursive VM execution.
- Lexical Addresses, Typed Bytecode Verification and a Slot-Based Virtual MachineResolve lexical variables to indexed slots, analyze bytecode control flow and stack types, and verify execution against an independent VM.
- Versioned Bytecode Serialization, Integrity Checks and Verified LoadingDesign a bounded, versioned bytecode wire format with deterministic JSON, integrity checking, strict decoding and mandatory VM verification.
- Heap Reachability, Object Lifetimes and Stop-the-World Mark-and-SweepDerive object reachability and a bounded mark-and-sweep collector with shared closure cells, cycles, explicit roots and independent tests.
- Garbage Collection Inside the Slot VM: Roots, Closures and Recursive CyclesIntegrate explicit-root mark-and-sweep with the verified slot VM, preserving mutable closures and reclaiming unreachable recursive cycles.
Computer Architecture (5)
Bits, ISA, cache mapping and pipeline hazard models; coherence remains a gap.
- Digital logic fundamentals: Boolean gates, truth tables and binary addersDerive AND, OR, NOT and XOR from truth tables and construct verified half-adders, full-adders and fixed-width addition.
- Sequential logic fundamentals: clocked state, registers and finite-state machinesDerive clocked state transitions, D flip-flops, registers and finite-state machines with executable invariants and traces.
- Machine Representation, CPU Instructions and Cache MappingDerive two's complement, endianness, ISA execution and direct-mapped cache conflicts with reproducible Python models and boundary tests.
- CPU fundamentals: datapath, control and the fetch–decode–execute cycleTrace PC, accumulator, memory, ALU and branches using a bounded 8-bit instructional CPU with explicit instruction semantics.
- CPU Pipelines: Data Hazards, Forwarding and Branch PredictionDerive instruction latency, throughput, stalls, load-use dependencies and two-bit branch prediction with independently tested pipeline models.
Data Structures & Algorithms (23)
Data representation, proofs and algorithms.
- Arrays and Strings: Representation, Costs and Correct IterationUnderstand contiguous arrays, dynamic growth, indexing, slices, Unicode strings and boundary invariants with tested examples.
- Abstract data types: interfaces, representation invariants and costsSeparate an ADT contract from storage, derive a bounded circular queue and verify FIFO, wraparound and complexity.
- Dynamic arrays: capacity, shrinking and amortized analysisImplement a resizable array with append, pop, reference clearing and quarter-full shrinking, then prove amortized costs.
- Linked Lists: Nodes, Reversal, Cycles and OwnershipImplement and prove singly linked-list reversal and Floyd cycle detection; compare pointer operations with dynamic-array costs.
- Stacks and Queues: LIFO, FIFO, Deques and InvariantsDistinguish stack and queue contracts, derive their invariants, implement balanced-delimiter scanning and BFS-compatible queues.
- Hash Tables, Collisions and InvariantsUnderstand hash functions, collision resolution, load factors and adversarial inputs, with a correct frequency-counting example and edge cases.
- Binary Trees and BSTs: Traversals, Ordering and HeightExplain binary-tree structure, DFS/BFS traversals, BST ordering and height-dependent complexity with an iterative tested implementation.
- Binary Heaps and Priority QueuesExplain heap shape and order invariants, derive logarithmic updates and linear heapify, and solve top-k with executable examples.
- Graph Traversal with BFS and DFSDerive breadth-first and depth-first search, shortest paths in unweighted graphs, visited-state invariants and O(V+E) complexity.
- Sorting Algorithms: Stability, Mergesort, Quicksort and HeapsortDerive insertion, merge, quick and heap sorting, compare worst-case costs and stability, and verify two complete implementations.
- Binary Search: Bounds, Invariants and Monotone PredicatesDerive binary search with a partition invariant, implement exact bounds, analyze complexity and explain when the method is invalid.
- Two Pointers and Prefix Sums: Invariants and Subarray QueriesDerive opposite-end pointers and prefix sums, prove their invariants, and solve range and negative-value subarray problems with tests.
- Two Pointers and Sliding WindowsDerive linear-time window algorithms using monotonic conditions, loop invariants and exact edge-case reasoning instead of memorized templates.
- Monotonic Stacks: Next Greater, Temperatures and Histogram AreasProve linear-time monotonic-stack bounds, calculate next-greater positions and largest histogram rectangles with runnable tests.
- Tree Algorithms: Level Order, LCA, Diameter and BST ValidationDerive breadth-first levels, lowest common ancestor, tree diameter and inherited BST ordering with iterative implementations.
- Shortest Paths: Dijkstra, Bellman–Ford and Negative CyclesProve shortest-path relaxation, implement Dijkstra with a heap, compare Bellman–Ford and analyze negative cycles and weighted graphs.
- Greedy Interval Scheduling: Exchange Proofs and CounterexamplesProve earliest-finish interval scheduling, test boundary cases and distinguish greedy cardinality from weighted optimization.
- Backtracking: State Spaces, Pruning and CorrectnessDerive backtracking search trees, pruning safety, N-Queens constraints, complexity bounds and verifiable recursive implementations.
- Dynamic Programming: States and RecurrencesLearn to define states, derive recurrence relations, prove transition correctness and select memoization or tabulation with exact cost bounds.
- Tries, Prefix Search and String KeysDerive trie invariants and prefix search, implement insert, contains and completion, and analyze key length and memory trade-offs.
- Disjoint Set Union: Connectivity, Compression and KruskalDerive union-find invariants, path compression, union by size, amortized bounds and minimum spanning tree use with verified Python code.
- Strongly Connected Components and Condensation GraphsDerive strongly connected components, prove why condensation is a DAG and implement iterative Kosaraju with complexity and edge-case checks.
- Maximum Flow, Minimum Cuts and Bipartite MatchingDerive flow conservation, residual networks, augmenting paths, the max-flow min-cut theorem and bipartite matching reduction with tested code.
Operating Systems & Concurrency (10)
Processes, memory, threads and synchronization.
- How programs run: command-line arguments, environment, streams and exit statusTrace a program invocation using C11 arguments, environment variables, stdout, stderr and subprocess tests.
- Processes, Virtual Memory and System CallsDerive process isolation, virtual-address translation, page tables, TLBs, context switching, syscalls and protection guarantees.
- Heap Allocation: Free Lists, Fragmentation and CoalescingModel first-fit and best-fit heap allocation, contiguous free blocks, external and internal fragmentation, splitting and coalescing with independent tests.
- File Descriptors, Buffered I/O and fsync Crash BoundariesTrace open file descriptions, dup, shared offsets, read/write, buffering, fsync and crash recovery with independently verified Python models.
- Filesystem Internals: Inodes, Block Allocation, Journaling and RecoveryModel inode identity, directory entries, noncontiguous block allocation and commit/replay crash boundaries with tested finite-state examples.
- CPU Scheduling: FCFS, Round Robin, Response and FairnessDerive FCFS and Round Robin scheduling, preemption, arrival ties, turnaround and waiting with executable models and independent tick oracles.
- Concurrency: Races, Locks, Conditions and DeadlocksDerive synchronization invariants, critical sections, race conditions, condition-variable protocols, deadlocks and bounded queues.
- Priority Scheduling: MLFQ, Aging and Priority InheritanceDerive MLFQ scheduling, periodic priority boosts, starvation and lock priority inheritance with independently verifiable models.
- Memory Models: Atomics, Happens-Before and VisibilityExplain C++ data races, per-object modification order, release/acquire, relaxed operations, sequential consistency and publication safety.
- C++17 Engineering Workshop: Thread-Safe Token Bucket and CIBuild and test a native C++17 token bucket with steady clock injection, mutex invariants, input validation and compiler-backed CI.
Computer Networks (7)
IPv4 prefix routing and DNS cache fundamentals; transport mechanics remain to expand.
- HTTP fundamentals: requests, responses, methods and client-server boundariesUnderstand web requests, status codes, GET/POST/PUT/DELETE semantics and basic API responsibilities before advanced system design.
- IP Routing and DNS: Prefix Selection, Resolution and TTL CachesDerive IPv4 longest-prefix routing and DNS resolver caching, record TTL expiry and failure semantics with independent Python test oracles.
- IP Packet Size: IPv4 Fragmentation and Path MTU DiscoveryDerive the 8-byte IPv4 fragment offset, MF/DF semantics, ordered reassembly, and classical PMTUD under explicit finite models.
- DNS Authority, CNAME Chains and Negative CachingDerive DNS zone authority, recursive referrals, CNAME chains, NXDOMAIN/NODATA cache keys and SOA-based negative TTLs with independent tests.
- Networking Fundamentals: DNS, TCP, TLS and HTTPTrace a web request through DNS, transport, TLS and HTTP; derive latency and failure budgets and distinguish TCP from QUIC.
- TCP Byte Streams: Message Framing, ACKs and Flow ControlDerive TCP stream framing, relative sequence numbers, cumulative acknowledgments and sender windows using independently verified Python models.
- TCP Retransmission Timers: RTT Estimation, Karn's Rule and Congestion WindowsDerive RFC 6298 SRTT/RTTVAR/RTO and backoff, then distinguish a simplified cwnd/ssthresh round model from actual TCP Reno.
Security & Cryptography (3)
Security protocols; cryptographic foundations still missing.
- TLS 1.3: Handshake Authentication, HKDF and Traffic KeysTrace TLS 1.3 authentication and key derivation, distinguish HKDF from encryption, and verify HKDF-SHA256 and TLS labels against standard vectors.
- API Security: Identity, Authorization and Threat ModelsDistinguish authentication from object authorization, analyze OAuth and JWT boundaries, and derive tenant isolation and API threat controls.
- OAuth 2.0 Security: PKCE, Token Binding and ReplayDerive the authorization-code PKCE flow, threat boundaries, refresh-token rotation, audience checks and replay resistance from IETF standards.
Software Engineering & Design (22)
OOP, SOLID, patterns, testing and quality.
- Modular programming: cohesion, explicit interfaces and pure functionsLearn how to decompose programs into cohesive modules, separate computation from input/output and test boundaries without frameworks.
- Git fundamentals: working tree, index, commits and branch historyUnderstand three Git states, reproducible commits, branches and merges, with a tested isolated repository workflow.
- Testing, Contracts and Maintainable ChangesBuild correct, reviewable changes using invariants, test boundaries, integration contracts, regression cases and explicit operational risk analysis.
- Clean Code Fundamentals: Cohesion, Coupling and Change-Safe DesignDerive readable and maintainable code boundaries using cohesion, coupling, pure functions, explicit contracts, refactoring and tested inventory examples.
- Object-Oriented Design: Encapsulation, Composition and PolymorphismDesign object-oriented boundaries with encapsulation, composition, polymorphism, contracts and a tested order-pricing model.
- Low-Level Design: Contracts, State Machines and Dependency BoundariesDesign maintainable components from invariants, state transitions, interfaces and dependency direction, with a tested reservation model.
- SOLID, Dependency Inversion and Behavioral ContractsApply SRP, OCP, LSP, ISP and DIP pragmatically with Python protocols, stable boundaries and verified behavior tests.
- Software architecture: dependency boundaries and modular designDerive layered and ports-and-adapters architectures, enforce module dependencies, document decisions and test a modular monolith.
- Domain modeling: entities, value objects and aggregate invariantsDistinguish identity from immutable values, select aggregate boundaries and enforce order invariants with executable contracts.
- Software Testing Strategies: Units, Contracts, Integration and E2ESeparate unit, property, integration, contract and end-to-end tests with executable examples and clear limits of evidence.
- Refactoring and Design Patterns: Strategy, Adapter and Behavior PreservationRefactor safely with behavioral tests; compare Strategy, Adapter and Decorator with concrete Python examples and trade-offs.
- Design Pattern Families: Builder, Facade and ObserverDerive creational, structural and behavioral design choices using tested Builder, Facade and Observer examples and explicit failure contracts.
- State and Command patterns: transitions, replay and failure contractsUse explicit state transitions and command objects to separate business decisions from requests, with tests for versions and duplicate execution.
- Creational patterns: Factory Method, Abstract Factory and simple factoriesCompare constructor selection, overridable creation hooks and compatible object families with tested export pipelines and explicit failures.
- Debugging and Profiling: Reproduction, CPU, Memory and TracingDiagnose bugs through reproducible cases, independent oracles, CPU profiles, memory traces and production telemetry.
- Build fundamentals: dependency graphs, incremental compilation and GNU MakeDerive a build DAG and test C11 recompilation rules with header dependencies, phony targets and failure propagation.
- Maintainable Implementation Workshop: Token Bucket, Clock Injection and TestsImplement a reviewable token-bucket limiter with an injected clock, explicit invariants and deterministic tests; assess distributed limits.
- Software Project Lifecycle: From Requirements to OperationsTrace a software project from acceptance criteria and design through tested delivery, measured releases, incident learning and maintenance.
- CI/CD and Release Engineering: Canary, Schema Evolution and RollbackDesign CI gates, immutable artifacts, canary decisions, safe database migrations, secrets and recovery procedures.
- Production Incident Response, Recovery and PostmortemsBuild an incident command structure, stabilize service, quantify user impact, preserve evidence and write testable postmortem actions.
- Formal Verification: Invariants, State Exploration and TLA+Learn safety versus liveness, atomicity and refinement through finite-state model checking of a concurrent reservation protocol, with TLA+ foundations.
- Property-Based Algorithm Testing: Oracles, Shrinking and Metamorphic ChecksGenerate adversarial cases with Hypothesis; compare binary search and signed-subarray algorithms against independent oracles.
Databases & Storage (8)
Queries, transactions, indexes and recovery.
- Relational database fundamentals: keys, joins and data integrityDerive tables, primary and foreign keys, normalization and SQL joins from a small data model with executable constraints.
- SQLite application fundamentals: parameterized CRUD and atomic transactionsBuild and test a small SQLite repository with bound parameters, constrained balances and transaction rollback.
- SQLite schema migrations: user_version, compatibility and rollbackEvolve a SQLite database safely from two schema versions while preserving rows and rejecting inconsistent states.
- Transactions, Isolation and Distributed ConsistencyDistinguish ACID isolation, serializability, linearizability, replication lag and practical consistency anomalies using explicit operation histories.
- Transactional Indexes: MVCC, Uniqueness and Serializable IsolationExplain unique constraints under concurrency, multi-version indexes, predicate locking, write skew, isolation retries and indexing trade-offs.
- SQL Query Planning: Selectivity, Statistics, Indexes and JoinsUnderstand SQL cost-based plans, cardinality estimation, composite indexes, join strategies and EXPLAIN ANALYZE with reproducible math.
- Database Storage: Pages, MVCC, B-Trees and Write-Ahead LogsTrace tuple storage, B-tree page splits, MVCC version visibility and write-ahead crash recovery using documented PostgreSQL internals.
- Database Replication, Failover and Data Loss BoundariesExplain WAL shipping, asynchronous and synchronous standby acknowledgments, replica lag, read consistency, retention slots and safe failover.
Distributed Systems (8)
Messaging, replication, coordination and resilience.
- Caching: Correctness, Invalidation and FailureReason about cache-aside, TTL, stampedes, stale reads, hit rates and invalidation under explicit consistency and availability requirements.
- Load Balancing: Capacity, Routing and Failure RecoveryDesign HTTP load balancing with explicit routing algorithms, quantitative capacity, health checks, failure budgets and retry safety.
- Rate Limiting: Token Buckets and Distributed GuaranteesDerive token-bucket admission, compare counting windows, enforce HTTP 429 and discuss consistency, concurrency and failure handling.
- Queues, Delivery Semantics and IdempotencyDesign asynchronous processing with at-least-once delivery, acknowledgments, dead-letter queues, retries, idempotent consumers and backpressure.
- Data Partitioning and Sharding: Keys, Hotspots and RebalancingDesign partitions and shards from access patterns, quantify hotspots, model stable hashing, handle migration and global constraints.
- Distributed Consensus: Raft, Quorums and Replicated LogsDerive quorum intersection and Raft terms, elections, log matching, commit rules, safety and limits during network partitions.
- Network Partition Models: Exhaustive Quorum Connectivity ChecksEnumerate every undirected network graph for three and five voters, prove majority exclusivity, and identify untested partition behaviors.
- Observability: Metrics, Logs, Traces and SLOsModel end-to-end latency, golden signals, trace propagation, SLO error budgets and high-cardinality pitfalls with tested calculations.
System Design (13)
Requirements, capacity, APIs and architectures.
- Capacity Estimation and System ConstraintsBuild capacity estimates from explicit workload assumptions, utilization, peak traffic, storage growth and queueing effects without false precision.
- System Design Method: Requirements, Sizing, Interfaces and FailuresLearn a complete system design method through requirements, workload estimation, APIs, data ownership, failure handling and verifiable SLOs.
- HTTP API Contracts: Pagination, Idempotency and Conditional UpdatesDesign HTTP resources, cursor pagination, ETags, idempotent commands, error representations and compatible API evolution.
- Storage Selection: Relational, Document, Key-Value and Object StoresChoose storage by access patterns, consistency invariants and cost; compare relational, document, key-value, blob and search models.
- Service Boundaries: Modular Monoliths, Microservices and EventsChoose software service boundaries by ownership, consistency, synchronous failure and measured scaling trade-offs.
- Reliable APIs: Timeouts, Retries, Idempotency and BackpressureDerive deadline budgets, retry amplification and idempotent commands; design failure responses, admission control and API problem details.
- System design: authoritative writes, projections and consistencyDesign write paths and read projections with replay-safe event processing, consistency targets, lag budgets and recovery verification.
- System Design Case Study: Durable Multi-Channel NotificationsDesign a complete notification platform with SLOs, APIs, transactional outbox, queue capacity, provider failures and recovery tests.
- Case Study: Design a URL ShortenerDesign a URL-shortening service from requirements through ID generation, storage, redirects, caching, abuse prevention and measured capacity.
- System Design Case: Orders, Inventory Reservations and PaymentsDesign order checkout with atomic stock reservation, durable idempotency, transactional outbox and safe payment saga recovery.
- System design: ticket holds, concurrent booking and expiryDesign seat holds with atomic booking, stable idempotency keys, expiration, isolation strategies and tested failure scenarios.
- System Design Case: Social Feed, Fanout and Timeline RankingDesign a read-heavy feed using hybrid fanout, durable posts, chronological cursors, candidate hydration and privacy filters.
- System Design Architecture Review: Checkout Invariants and RecoveryReview a proposed checkout architecture for overselling, dual-write loss, payment ambiguity, queue overload and tenant isolation.
Assessment & Engineering Judgment (11)
Exercises, design reviews and communication.
- Algorithm Interview Workshop: Interval Rooms and Negative-Sum WindowsPractice two original coding problems using a heap and a monotonic deque, with proofs, counterexamples and independent exhaustive tests.
- Independent Coding Assessment: Coupon Routes and Parallel Task RoundsSolve two original, unspoiled graph challenges with precise contracts, public fixtures, a grader and a transparent evaluation rubric.
- Independent Coding Assessment II: Minimax Batches and Dynamic IslandsSolve two original unsolved challenges on monotone capacity search and incremental grid connectivity, with 18 public fixtures.
- Independent Assessment III: Dynamic Programming and Idempotent Event ProcessingSolve two original unsolved exercises on contiguous partition costs and strict idempotent balance projection, with public graders and review criteria.
- Legacy-Code Assessment: Characterization, Tenant Scoping and Safe PaginationInvestigate an intentionally flawed ticket search, characterize its behavior, then implement a corrected, independently graded contract without exposing private fields.
- System Design Interview Workshop: Multi-Tenant Webhook DeliverySolve a complete webhook-delivery design with workload estimates, durable outbox, idempotency, retries, queue recovery and changed constraints.
- Adaptive System Design Drill: Document Processing Under Changing RequirementsRedesign a multi-tenant document pipeline as traffic, noisy neighbors, outages, deletion rules and data residency evolve.
- Independent System Design Assessment: Usage Metering, Late Events and Billing ReconciliationDesign a tenant-isolated usage ledger with quantitative capacity estimates, deterministic replay, late-event corrections, failure tests and an auditable design review.
- Explaining Engineering Decisions with EvidencePresent technical decisions and past projects using a precise situation-action-result structure, trade-offs and falsifiable impact metrics.
- Concurrency Interview Workshop: Races, CAS and InterleavingsDerive a two-worker lost-update counterexample, fix it with versioned CAS, enumerate schedules and test thread synchronization.
- Fault-Injection Workshop: Durable Outbox, Crashes and Duplicate DeliveryTest precommit and postcommit crashes, at-least-once outbox publication, receiver deduplication and recovery boundaries.
Specialized Systems Laboratories (11)
Elective infrastructure experiments.
- PostgreSQL Integration Lab: Concurrent Reservations and Crash RecoveryUse independent processes and a real PostgreSQL service to test conditional stock updates, idempotency and durable outbox commits.
- PostgreSQL Serializable Lab: Write Skew and Whole-Transaction RetriesReproduce real PostgreSQL write skew at READ COMMITTED, block it with SERIALIZABLE and retry the full transaction.
- SQLite Multi-Process Workshop: Atomic Reservations and Crash RecoveryTest real concurrent processes, file-backed SQLite transactions, stock constraints and replay after hard process termination.
- PostgreSQL Physical Replication Lab: Standby Replay and Manual PromotionExercise real PostgreSQL 17 primary/standby replication using pg_basebackup, observe replay, stop the primary and promote the standby.
- PostgreSQL Failover Safety: Fencing Receipts and Promotion GatesImplement and test fail-closed promotion decisions, reject stale fence evidence and examine real PostgreSQL standby promotion boundaries.
- PostgreSQL Recovery Measurements: RPO, RTO and Network SplitMeasure controlled PostgreSQL promotion phases, observe a replayed commit and show why an isolated primary still needs fencing.
- RabbitMQ Integration Lab: Redelivery and Transactional InboxTest a real RabbitMQ consumer disconnect, redelivered messages and PostgreSQL inbox deduplication with manual acknowledgments.
- RabbitMQ Restart Lab: Durable Queues and Confirmed MessagesRestart a real single-node RabbitMQ container after a confirmed persistent publish and verify exact recovery, without claiming quorum failover.
- RabbitMQ Quorum Leader Failover: Three-Node Executable LabTest real RabbitMQ quorum replication: publish with confirms, stop the initial leader, recover data, and confirm writes on the surviving majority.
- RabbitMQ Quorum Majority Loss: Fail Closed and Recover WritesTest loss of a three-member queue majority, bounded publisher confirms, and successful writes after restoration on real RabbitMQ nodes.
- RabbitMQ Live Network Partition: Running Brokers Without a QuorumDisconnect a running broker from its Docker network, observe minority confirmation behavior and restore the real quorum.