1. Introduction
  2. Nomenclature
  3. Part 1: Foundation
  4. The machine model
    1. Solutions
  5. Numbers and how they fit
    1. Solutions
  6. The np.ndarray is a table
    1. Solutions
  7. Cost is layout, and you have a budget
    1. Solutions
  8. Part 2: Identity & structure
  9. Identity is an integer
    1. Solutions
  10. A row is a tuple
    1. Solutions
  11. Structure of arrays (SoA)
    1. Solutions
  12. Where there's one, there's many
    1. Solutions
  13. Sort breaks indices
    1. Solutions
  14. Stable IDs and generations
    1. Solutions
  15. Part 3: Time & passes
  16. The tick
    1. Solutions
  17. Event time vs tick time
    1. Solutions
  18. A system is a function over tables
    1. Solutions
  19. Systems compose into a DAG
    1. Solutions
  20. State changes between ticks
    1. Solutions
  21. Determinism by order
    1. Solutions
  22. Part 4: Existence-based processing
  23. Presence replaces flags
    1. Solutions
  24. Add/remove = insert/delete
    1. Solutions
  25. EBP dispatch
    1. Solutions
  26. Empty tables are free
    1. Solutions
  27. Part 5: Memory & lifecycle
  28. swap_remove
    1. Solutions
  29. Mutations buffer; cleanup is batched
    1. Solutions
  30. Index maps
    1. Solutions
  31. Append-only and recycling
    1. Solutions
  32. One writer, many readers
    1. Solutions
  33. Part 6: Scale
  34. Subscription tables, keyed by slot
    1. Solutions
  35. Working set vs cache
    1. Solutions
  36. Proximity is a property of position
    1. Solutions
  37. The wall at 10K → 1M
    1. Solutions
  38. Moving beyond the wall
    1. Solutions
  39. Part 7: Concurrency
  40. Disjoint write-sets parallelize freely
    1. Solutions
  41. Partition, don't lock
    1. Solutions
  42. False sharing
    1. Solutions
  43. Order is the contract
    1. Solutions
  44. Part 8: I/O & persistence
  45. The boundary is the queue
    1. Solutions
  46. Persistence is table serialization
    1. Solutions
  47. The log is the world
    1. Solutions
  48. Storage systems: bandwidth and IOPS
    1. Solutions
  49. Part 9: System of systems
  50. System of systems
    1. Solutions
  51. Part 10: Discipline
  52. Mechanism vs policy
    1. Solutions
  53. Deferred abstraction
    1. Solutions
  54. You can only fix what you wrote
    1. Solutions
  55. Tests are systems; TDD from day one
    1. Solutions
  56. Act one closes
  57. What you have built
  58. Part 11: Living with it
  59. Living with it
  60. Part 12: Operations
  61. The log survives power loss
    1. Solutions
  62. Observation is a read-only system
    1. Solutions
  63. Reductions don't parallelize freely
    1. Solutions
  64. The worst case is the only case
    1. Solutions
  65. It runs without you
  66. Part 13: Knowing the limits
  67. Knowing the limits
  68. Flattening a tree is compiling it
    1. Solutions
  69. Staleness flows downhill
    1. Solutions
  70. A spreadsheet is a dependency graph
    1. Solutions
  71. The same numbers, a different total
    1. Solutions
  72. The ceiling is bandwidth, not cores
    1. Solutions
  73. Closure
  74. What cannot happen
  75. For lecturers
  76. Concept DAG
  77. Glossary
  78. Simulator specification