Martin Hicks

@martinhicks.dev

Software developer & AWS consultant. Co-founder at @sinovi.uk. I build DynamoDB tooling: Dynoxide, the Parity Suite conformance board, and a browser-based place to learn data modelling. martinhicks.dev dynoxide.dev paritysuite.org accesspatterns.dev

On 9th October a DynamoDB read of an item with a vector in it cost 2 read units. On 22nd October the same read cost 1. I can't find anything from AWS about it, and the 400KB limit still counts the vector the old way. #dynamodb https://martinhicks.dev/articles/dynamodb-vector-read-billing

DynamoDB changed how it bills a vector read

A DynamoDB read of an item with a vector attribute cost 2 read units on 9th October 2026 and 1 on 22nd October. What changed, what didn't, and what I can't explain.

martinhicks.dev

Very cool. Being able to run a conventional web server, handle concurrent requests and pay for active CPU time changes some of the architectural trade-offs of serverless. Looking forward to getting hands-on with this and seeing how it performs in practice. aws.amazon.com/blogs/aws/an...

Announcing AWS Lambda Web Functions | Amazon Web Services

AWS Lambda Web Functions is a serverless compute primitive that runs your HTTP framework natively, delivering fast, consistent responses through multi-concurrent execution and automated global distrib...

aws.amazon.com

AWS shipped DynamoDB vector search straight to GA. Its docs get readiness wrong three ways: the tutorial contradicts three other pages, the state machine names a state the index never enters, and the ready signal comes early. https://martinhicks.dev/articles/dynamodb-vector-search-docs-get-wrong

When a DynamoDB vector index is actually ready

AWS says a DynamoDB vector index is ready when IndexStatus is ACTIVE and Backfilling is false. I measured it against real DynamoDB, and that state never happens.

martinhicks.dev

My own DynamoDB emulator started failing a conformance test it used to pass. I hadn't touched the code. AWS changed a validation rule in eu-west-2, then reverted it weeks later - my suite trusted that one region as ground truth. martinhicks.dev/articles/you...

You can't pin DynamoDB to one region

A conformance suite is only as good as its ground truth. Mine used one AWS region, until DynamoDB changed its behaviour there, then reverted it, and I had to rethink what correct meant.

martinhicks.dev

DynamoDB is a brilliant database but can be a hard one to learn - it punishes your SQL instincts. So I built accesspatterns.dev: a real DynamoDB engine in a browser tab, with a course, access-pattern models and a full console. Learn it by running it, no account needed. #dynamodb #aws #dynoxide

accesspatterns.dev: a DynamoDB engine in your browser

A real DynamoDB-compatible engine runs in your browser, backed by SQLite. Run queries, scans and writes to see how DynamoDB behaves and which rows each one returns.

accesspatterns.dev

My DynamoDB conformance suite went red this week and the test that failed was real AWS itself. It's reworded a chunk of its validation errors - and the change hasn't reached every region yet. Two had it, two didn't. I caught a… https://martinhicks.dev/articles/dynamodb-changed-its-validation-errors

I watched DynamoDB change under my conformance suite

My DynamoDB conformance suite went red and the test that failed was real AWS. It had reworded its validation errors, and the change hasn't reached every region yet.

martinhicks.dev

Which frontier model you build on matters. Just as important is where the capability lives in your business once it works. Not in any single function. Build the squad. Own the platform. Let the org chart catch up. https://martinhicks.dev/articles/build-the-squad-own-the-platform

Build the squad. Own the platform. The org chart will catch up.

Deploying AI agents is an organisational problem, not just a technical one. My answer: build a deployment squad and own the platform layer.

martinhicks.dev

Dynoxide 0.10.0 is out. The same DynamoDB engine now runs in a browser tab, on OPFS, no server. Plus an official ~5 MB Docker image, a drop-in for amazon/dynamodb-local. First breaking release too. #rustlang #dynamodb https://martinhicks.dev/articles/dynoxide-0100-browser-and-docker

Dynoxide 0.10.0: it runs in the browser now

Dynoxide 0.10.0 compiles to WebAssembly and runs in the browser on OPFS, ships an official ~5 MB Docker image, and adds a storage-backend trait. Plus what breaks.

martinhicks.dev

My DynamoDB conformance suite has a proper home now: dynamodb-conformance.org Eight emulators. 684 tests. One independent suite scoring all of them against DynamoDB's real-world behaviour. Runs weekly. Matrix, run history, per-target pages. Every figure pulled straight from each run.

Filed my first GitHub Security Advisory yesterday after a DNS rebinding CVE turned up in one of dynoxide's transitive deps. The fix was the easy bit. The GHSA was new ground and less daunting than I'd built it up to be. Wrote up what I learned: martinhicks.dev/articles/fil...

Filing my first security advisory

I filed my first GitHub Security Advisory for dynoxide after a DNS rebinding CVE landed via rmcp. Notes on the form, the order of operations, and the bug.

martinhicks.dev

Just shipped dynoxide 0.9.13. Closes a DNS rebinding CVE in rmcp (which powers the MCP HTTP transport) plus a related cross-origin CSRF gap. If you're running `dynoxide mcp --http`, you'll want to upgrade. github.com/nubo-db/dyno...

Release v0.9.13 · nubo-db/dynoxide

Security Close a DNS rebinding vulnerability in the MCP HTTP transport (GHSA-fvh2-gm75-j4j7 / CVE-2026-42559) by upgrading rmcp from 1.1.1 to 1.6.0 in both lockfiles. A malicious page could make ...

github.com

Spent the last few weeks getting dynoxide fully extracted from the Nubo workspace it grew out of. It's now developed entirely in the open, no more private-to-public shuffling. Three patches shipped since. #dynamodb #aws https://martinhicks.dev/articles/dynoxide-patch-notes-0910-0912

Dynoxide patch notes: 0.9.10 to 0.9.12

Three patches to dynoxide. 16 error-string fixes, an MCP server that wouldn't die on Ctrl+C, a stale port, and a code comment that lied all along.

martinhicks.dev