Magrathea Software ← Home

Field Notes

Blog

Field notes from building and running Magrathea's products: practical guides, engineering lessons, and dispatches from every world in orbit.


Guardrails for a public, anonymous AI endpoint

Anonymous guests can ask our fantasy AI anything, so the free endpoint needed defending. Why we rejected the obvious LLM-classifier pre-check on latency grounds, and the three layers we shipped instead: a Bedrock Guardrail scoped to the question bytes only, a scope clause a guardrail can't express, and server-assembled prompts.

Read →

Migrating a legacy MySQL app to DynamoDB without a big-bang cutover

A decade-old booster club platform moved from RDS to DynamoDB with no maintenance window, because the migration was idempotent, incremental, and scoped: a command we ran dozens of times before it meant anything. Plus the three things that bit us, and two gaps still open.

Read →

Running an overnight team of AI coding agents

For weeks a nightly batch of coding agents worked our GitHub issue queue while we slept. The real logs: an eight-issue night with dependency-aware scheduling, empty-queue nights, a subagent that went off-script, and an issue that fixed itself in production. The harness, not the model, turned out to be the product.

Read →

Why elite QBs and TEs go later than the math says

Our value model ranked elite quarterbacks and tight ends earlier than real drafters take them. Instead of assuming the market was wrong, we gave the model perfect hindsight across six seasons. It proved the market right, and showed where value-over-replacement quietly lies.

Read →

We ran the math and kickers should go in round 3: here's why that's wrong

Value-over-replacement priced the top kicker at pick 28 in our draft model. It was honest math and a terrible strategy, because the "free" baseline it assumed doesn't match the waiver wire. The trap, and the one-line fix.

Read →

The Cognito migration trap: why we rolled our own JWT auth

Cognito user pools can't export password hashes. One product got stuck mid-migration because of it, so RotoAlpha moved to custom HS256 JWT auth before launch to avoid the same trap. The mechanics, the replacement stack, and the honest costs.

Read →

Lessons from building a Jira bulk operations app on Atlassian Forge

Developer field notes: the @forge/events consumer payload gotcha, idempotent queue chaining for long runs, rate-limit rescheduling, and the JQL editor autocomplete key remap.

Read →

How to bulk edit Jira issues with JQL, step by step

Three worked examples (a label cleanup, a mass reassignment, and closing stale issues), each previewed before a single issue changes.

Read →

How to bulk edit more than 1,000 issues in Jira Cloud

Why the 1,000-issue limit exists, every workaround that actually works in 2026 (JQL slicing, CSV re-import, REST API scripts), and the trade-offs of each.

Read →