Engineering notes
The parts that don’t fit in a launch post.
Writing on RAG, MCP server design, prompt injection, permission-aware retrieval and the DevOps underneath AI systems.
We’d rather show the working than assert competence, so these include the turns that were wrong and the reason we took them.
The AI service catalogue is a build-or-buy decision with a residency catch
AWS's ML guide lists twenty-four services. Choosing between them is not a modelling question — it is a question about where inputs travel, what record survives the call, and which of these still exists in three years.
aws · machine-learning · rag · governance
Analytics is a governance decision with a query engine attached
Analytics stacks are compared on freshness, scale and cost. In a regulated estate the constraint that decides is who may see which rows — and it is settled long before anyone chooses an engine.
aws · analytics · data · governance
Choose the message bus for the bad day
Queues and event buses all look alike when everything works. They are chosen by what happens when a consumer dies mid-batch — delivery semantics, ordering, and whether history can be replayed.
aws · messaging · architecture · reliability
Pick the database for the query you cannot avoid
Eleven services, six comparison tables, and one of them is already end-of-life. Database selection is decided by the query you cannot avoid and by whether two users may see different rows.
aws · databases · architecture
Storage is chosen by access pattern, not by durability
Every managed storage service quotes durability that is effectively identical. The decision is made somewhere else entirely — by how the data is reached, and by who can prove who reached it.
aws · storage · architecture
The compute decision is not about compute
AWS's compute guide compares twenty-one services on features. Two questions that appear in no comparison table eliminate most of them before you have opened it.
aws · compute · architecture