41554 blogs · [ { "id": "01a0b9c0-b36d-70e8-ab1c-047c8fd96033", "title": "Sex, AI, and the Apocalypse", "url": "https://iankduncan.com/personal/2026-09-16-sex-ai-and-the-apocalypse/", "published_at": "2026-09-16T00:00:00+00:00" }, { "id": "01a08785-4bfa-71ec-bcff-0a53fd3aeee5", "title": "Getting Freaky in the Age of AI", "url": "https://iankduncan.com/engineering/2026-08-07-getting-freaky-in-the-age-of-ai/", "published_at": "2026-08-07T00:00:00+00:00" }, { "id": "01a08785-4bfa-71ec-bcff-0a53fe170839", "title": "The Mathematics of Build Queue Optimization and Auto-Scaling", "url": "https://iankduncan.com/engineering/autoscaling-build-fleets-queueing-theory/", "published_at": "2026-07-16T00:00:00+00:00" }, { "id": "01a08785-4bfa-71ec-bcff-0a53fec89bfc", "title": "Deconstruct the Monolith: Composable App Bootstrapping with Fractal Layer", "url": "https://iankduncan.com/engineering/2026-06-29-deconstruct-the-monolith-fractal-layer/", "published_at": "2026-06-29T00:00:00+00:00" }, { "id": "01a08785-4bfa-71ec-bcff-0a53ff3084cc", "title": "Brief aan de Eerste Kamer over box 3 · A letter to the Dutch Senate on Box 3", "url": "https://iankduncan.com/personal/2026-06-12-box3-eerste-kamer/", "published_at": "2026-06-12T00:00:00+00:00" }, { "id": "01a08785-4bfa-71ec-bcff-0a540000b007", "title": "Essential Complexity", "url": "https://iankduncan.com/notes/2026-06-10-essential-complexity/", "published_at": "2026-06-10T00:00:00+00:00" }, { "id": "01a08785-4bfa-71ec-bcff-0a54006316b0", "title": "Phronema", "url": "https://iankduncan.com/notes/2026-06-10-phronema/", "published_at": "2026-06-10T00:00:00+00:00" }, { "id": "01a08785-4bfa-71ec-bcff-0a5400b95626", "title": "Premature Optimization", "url": "https://iankduncan.com/notes/2026-06-10-premature-optimization/", "published_at": "2026-06-10T00:00:00+00:00" }, { "id": "01a08785-4bfa-71ec-bcff-0a5400ddf09b", "title": "YAGNI", "url": "https://iankduncan.com/notes/2026-06-10-yagni/", "published_at": "2026-06-10T00:00:00+00:00" }, { "id": "01a08785-4bfa-71ec-bcff-0a5401af0b18", "title": "What's in the Box? A Field Guide to AI Models", "url": "https://iankduncan.com/engineering/2026-06-09-beginners-guide-to-ai-models/", "published_at": "2026-06-09T00:00:00+00:00" }, { "id": "01a08785-4bfa-71ec-bcff-0a5401b144e6", "title": "Stealing from Biologists to Compile Haskell Faster", "url": "https://iankduncan.com/engineering/2026-05-30-stealing-from-biologists-to-compile-haskell-faster/", "published_at": "2026-05-30T00:00:00+00:00" }, { "id": "01a08785-4bfa-71ec-bcff-0a5401bfe2a2", "title": "Making Haskell Talk to PostgreSQL Without Suffering", "url": "https://iankduncan.com/engineering/2026-02-20-haskell-postgresql-without-suffering/", "published_at": "2026-02-20T00:00:00+00:00" }, { "id": "01a08785-4bfa-71ec-bcff-0a5401d9c085", "title": "Archive: Automatic Optimal Pipelining of Redis Commands", "url": "https://iankduncan.com/engineering/2026-02-17-archive-redis-pipelining/", "published_at": "2026-02-17T00:00:00+00:00" }, { "id": "01a08785-4bfa-71ec-bcff-0a54022c5878", "title": "TIL: HTTP/3 Is Not Always Faster Than HTTP/2", "url": "https://iankduncan.com/engineering/2026-02-10-http3-not-always-faster/", "published_at": "2026-02-10T00:00:00+00:00" }, { "id": "01a08785-4bfa-71ec-bcff-0a54030a0320", "title": "What Functional Programmers Get Wrong About Systems", "url": "https://iankduncan.com/engineering/2026-02-09-what-functional-programmers-get-wrong-about-systems/", "published_at": "2026-02-09T00:00:00+00:00" }, { "id": "01a08785-4bfa-71ec-bcff-0a540382c4c5", "title": "Your Best Thinking Is Wasted on the Wrong Decisions", "url": "https://iankduncan.com/engineering/2026-02-07-your-best-thinking-is-wasted-on-the-wrong-decisions/", "published_at": "2026-02-07T00:00:00+00:00" }, { "id": "01a08785-4bfa-71ec-bcff-0a5404391c8d", "title": "In Praise of Control Planes, or: Why You Need a Place to Stand", "url": "https://iankduncan.com/engineering/2026-02-07-in-praise-of-control-planes/", "published_at": "2026-02-07T00:00:00+00:00" }, { "id": "01a08785-4bfa-71ec-bcff-0a5404b3a0be", "title": "No, Really, Bash Is Not Enough: Why Large-Scale CI Needs an Orchestrator", "url": "https://iankduncan.com/engineering/2026-02-06-bash-is-not-enough/", "published_at": "2026-02-06T00:00:00+00:00" }, { "id": "01a08785-4bfa-71ec-bcff-0a54059ca5f3", "title": "GitHub Actions Is Slowly Killing Your Engineering Team", "url": "https://iankduncan.com/engineering/2026-02-05-github-actions-killing-your-team/", "published_at": "2026-02-05T00:00:00+00:00" }, { "id": "01a08785-4bfa-71ec-bcff-0a5405e23fd0", "title": "Punycode: My New Favorite Algorithm", "url": "https://iankduncan.com/engineering/2025-12-01-punycode/", "published_at": "2025-12-01T00:00:00+00:00" }, { "id": "01a08785-4bfa-71ec-bcff-0a5406aa4bcc", "title": "The CRDT Dictionary: A Field Guide to Conflict-Free Replicated Data Types", "url": "https://iankduncan.com/engineering/2025-11-27-crdt-dictionary/", "published_at": "2025-11-27T00:00:00+00:00" }, { "id": "01a08785-4bfa-71ec-bcff-0a5407a53047", "title": "JSON Schema Demystified: Understanding Schemas, Dialects, Vocabularies, and Metaschemas", "url": "https://iankduncan.com/engineering/2025-11-24-json-schema-demystified/", "published_at": "2025-11-24T00:00:00+00:00" }, { "id": "01a08785-4bfa-71ec-bcff-0a5408692b5c", "title": "Event Design for Streaming Systems: A Primer", "url": "https://iankduncan.com/engineering/2025-11-14-event-design-for-streaming-systems/", "published_at": "2025-11-14T00:00:00+00:00" }, { "id": "01a08785-4bfa-71ec-bcff-0a540894121e", "title": "Accidental or Essential? Understanding Complexity in Software Design", "url": "https://iankduncan.com/engineering/2025-05-26-when-is-complexity-accidental/", "published_at": "2025-05-26T00:00:00+00:00" }, { "id": "01a08785-4bfa-71ec-bcff-0a5409684604", "title": "What You Need to Know About Trump\\", "url": "https://iankduncan.com/personal/2025-04-24-civil-rights-executive-order/", "published_at": "2025-04-24T00:00:00+00:00" }, { "id": "01a08785-4bfa-71ec-bcff-0a540996a893", "title": "Actuarial Murder and Other Diffuse Acts of Violence", "url": "https://iankduncan.com/personal/2025-02-21-actuarial-murder/", "published_at": "2025-02-21T00:00:00+00:00" }, { "id": "01a08785-4bfa-71ec-bcff-0a540a8aa470", "title": "The Cadence of Salting", "url": "https://iankduncan.com/cooking/2025-01-13-salting-cadence/", "published_at": "2025-01-13T00:00:00+00:00" }, { "id": "01a08785-4bfa-71ec-bcff-0a540ac7dd9d", "title": "Embracing Flexibility in Haskell Libraries: The Power of Records of Functions", "url": "https://iankduncan.com/engineering/2024-01-26-records-of-effects/", "published_at": "2024-01-26T00:00:00+00:00" }, { "id": "01a08785-4bfa-71ec-bcff-0a540b5d61ee", "title": "Hi, Barbie! Higher kinded records made easy(er)", "url": "https://iankduncan.com/engineering/2024-01-11-hi-barbie-higher-kinded-records-made-easy/", "published_at": "2024-01-11T00:00:00+00:00" }, { "id": "01a08785-4bfa-71ec-bcff-0a540bca2b43", "title": "Haskell Best Practices– Wildcards aren\\", "url": "https://iankduncan.com/engineering/haskell-best-practices-really-exhaustive-pattern-matching/", "published_at": "2023-08-31T00:00:00+00:00" }, { "id": "01a08785-4bfa-71ec-bcff-0a540bcbf630", "title": "There and Back Again: Turning Haskell functions into RPC calls- Part 2", "url": "https://iankduncan.com/engineering/2023-08-30-functions-into-rpc-definitions-pt2/", "published_at": "2023-08-30T00:00:00+00:00" }, { "id": "01a08785-4bfa-71ec-bcff-0a540cb47e03", "title": "There and Back Again: Turning Haskell functions into RPC calls- Part 1", "url": "https://iankduncan.com/engineering/2023-08-30-functions-into-rpc-definitions/", "published_at": "2023-08-30T00:00:00+00:00" }, { "id": "01a08785-4bfa-71ec-bcff-0a540d70a591", "title": "Integrating a large Tokio-based Rust library with Haskell", "url": "https://iankduncan.com/engineering/2023-08-30-integrating-haskell-and-tokio/", "published_at": "2023-08-30T00:00:00+00:00" }, { "id": "01a08785-4bfa-71ec-bcff-0a540dbde0f4", "title": "One Serialization Class to Rule Them All", "url": "https://iankduncan.com/engineering/2023-08-29-one-serialization-class-to-rule-them-all/", "published_at": "2023-08-29T00:00:00+00:00" }, { "id": "01a08785-4bfa-71ec-bcff-0a540e7f550f", "title": "OpenTelemetry Gotchas– Phantom Spans", "url": "https://iankduncan.com/engineering/2023-08-28-opentelemetry-gotchas-phantom-spans/", "published_at": "2023-08-28T00:00:00+00:00" }, { "id": "01a08785-4bfa-71ec-bcff-0a540ec55d56", "title": "The Cruel Part Is", "url": "https://iankduncan.com/personal/the-cruel-part-is/", "published_at": "2023-01-01T00:00:00+00:00" }, { "id": "01a08785-4bfa-71ec-bcff-0a540f0df1ff", "title": "Vignettes", "url": "https://iankduncan.com/personal/vignettes/", "published_at": "2023-01-01T00:00:00+00:00" }, { "id": "01a08785-4bfa-71ec-bcff-0a540f795046", "title": "Garbage in, Never out", "url": "https://iankduncan.com/personal/2021-10-04-garbage-in-never-out/", "published_at": "2021-10-04T00:00:00+00:00" }, { "id": "01a08785-4bfa-71ec-bcff-0a540fd20ee5", "title": "Using React with GHCJS", "url": "https://iankduncan.com/engineering/2014-12-16-react-js-with-ghcjs/", "published_at": "2014-12-16T00:00:00+00:00" }, { "id": "01a08785-4bfa-71ec-bcff-0a5410480018", "title": "Introducing Growler, a simple HTTP server toolkit", "url": "https://iankduncan.com/engineering/2014-11-13-introducing-growler/", "published_at": "2014-11-13T00:00:00+00:00" } ] posts Claim your blog
Back to iankduncan.com
Blog · corpus.blog/blogs/iankduncan.com/posts

iankduncan.com

iankduncan.com

2026

2025

2024

2023

2021

2014