Writing
Tagged “Complexity”
- Stable Verbs, Dynamic Affordances
A tool catalog can describe what cancelOrder means without saying whether it applies to this order now. A resource can report current applicability without redefining the operation on every response. The useful synthesis is a stable typed vocabulary plus contextual affordances, with execution-time revalidation and an experiment honest enough to test whether the extra layer earns its keep. Third of three.
- What Runtime Affordances Cost — and Buy
Runtime controls keep the server authoritative about current transitions and invocation targets, but they move work from build time into execution. The relevant question is not whether HATEOAS won: it is whether applicability and binding change often enough to justify traversal, dynamic failure, and weaker static closure. Second of three on hypermedia and agents.
- The Browser Was Only Half the Client
A browser can operate a site it has never seen because it shares the work with a person. That does not make hypermedia useless to machines, but it does reveal what the constraint can and cannot supply: controls can bind known operations to current resources without teaching a client what those operations mean. First of three on the contracts hidden inside HATEOAS.
- Performance Is Making Gradle Less Gradle
Gradle 9.7 promotes Isolated Projects to incubating, and the headline is parallel project configuration. The real story is that Gradle can only parallelize configuration because it has started making entire categories of previously legal build logic illegal. Performance pressure is quietly turning a programmable build system into a declarative one — and TypeScript is doing the same thing from the opposite direction.
- Who Pays for the Pressure
Bad API design is rarely bad taste. It is pressure correctly identified and incorrectly located — real forces from inside the implementation escaping into the contract, where every caller pays for them forever. Read through Google Cloud IoT Core, Datadog monitors, and the designs that got the same problems right.
- The Lookup That Saves the Handshake
RFC 9146 adds a connection identifier to DTLS 1.2, usually summarised as NAT rebinding support. That summary hides the design: what the CID really does is move where the protocol anchors its state, from an address it never chose to an identifier it owns. Nine bytes, and a case study in deep modules and interface ownership.
- Risk, Complexity, and Pressure
Architecture Must Follow Pressure sits between George Fairbanks's risk-driven architecture and John Ousterhout's philosophy of software design.