Trapped By Our Tools
summary
Argues CRUD vocabulary narrows design and shows concrete alternatives: replaces REST verbs with Absinthe GraphQL mutations and subscriptions, records domain actions in a shipment_events table (type plus JSONB) and adds a last_event_id retry loop, uses Ecto.Multi and serializable Postgres transactions with automatic retry (ten attempts) to serialize per‑shipment processing, and drives downstream updates from events rather than ad hoc CRUD side effects so the system reasons in activity and avoids races without adding distributed process coordination.
AI-written summary · about
chapters (10)
- 0:00Introduction and context
- 1:28Activity vs entity thinking
- 10:17Activity-oriented code strategies
- 16:14GraphQL subscriptions and events
- 18:27Event sourcing without full rewrite
- 23:24Implementing event logs in Postgres
- 27:59Serializable transactions for safety
- 33:37Incremental adoption approach
- 37:32Benefits of activity-driven systems
- 39:08Q&A on implementation and results
related talks
38mNo REST for the Wicked. Building a GraphQL
45mA shot of Absinthe: from zero to GraphQL in 40 minutes
47mSchema Design in the Age of AI: Pragmatic Patterns to Evolve and Ship Fast
52mCQRS, DDD and GraphQL, a perfect fit?
55mGraphQL - APIs the New Way
47mGood behaviour: Cultivating Healthy Elixir Teams & Codebases
46mCQRS, DDD and GraphQL, a perfect fit
30mSchema Design Patterns: Leveraging Existing REST APIs for Rapid GraphQL
