Skip to main content

Articles

Essays on software architecture, digital commerce, and the systems we build now.

The Most Dangerous Code Has a Save ButtonPart 20

Configuration is code with a weaker deployment process -- why tax tables, pricing rules, and admin-panel settings deserve types, validation at authoring time, and a deterministic evaluator.

July 18, 202611 min read

Name the DragonPart 19

Why four thousand green tests can still miss a business rule -- and how DDD, BDD, TDD, and property-based testing turn an unnamed assumption into an executable specification.

July 11, 202614 min read

What Time Is It?Part 18

Why treating Instant.now() as a plain value instead of an explicit input is a silent source of pricing and business-logic bugs in commerce systems.

July 5, 202612 min read

Exactly Once Is a LiePart 17

Why exactly-once delivery is impossible over an unreliable network, and how modeling an effect as a function of its intent -- not bolting on dedupe infrastructure -- is what actually makes a retry safe.

June 28, 202611 min read

Large Action Models Need Small Action SurfacesPart 16

Why commerce platforms should give large action models a small, governed set of typed actions rather than broad endpoint access — separating authentication from authority, and deciding before executing.

June 15, 202613 min read

A Case for CapabilitiesPart 15

Why agent-facing commerce platforms should model business capabilities as a typed algebra before mapping them onto any protocol -- MCP, UCP, or otherwise.

June 7, 20268 min read

The Aggregate Cost of CompositionPart 14

Why the real cost of composed commerce systems isn't integration or maintenance, but the incident cost of reconstructing a coherent business story from many locally-true systems — and how functional, event-driven design reduces the interest rate on that ambiguity.

May 30, 202610 min read

It Was Never about the MoneyPart 13

Why modeling money as a bare number instead of a typed Amount or Price with currency and precision is the real source of bugs that later look like unit or locale problems.

May 23, 20269 min read

When Good Enough is NotPart 12

Why commerce systems that read fine to a human buyer routinely fail to give a purchasing agent a decision it can safely act on -- and how algebraic data types close that gap.

April 28, 202612 min read

Capability Surfaces: A Mediating Architecture for Agent-Native Commerce

How a mediating architectural pattern called capability surfaces reduces agent-merchant integration complexity from O(A×M) to O(A+M), enabling any compliant agent to transact with any compliant merchant without bespoke integration.

April 21, 202621 min read

Delegating the Deal: Human Authority, Accountability, and Oversight in Agent-Mediated Commerce

An examination of what changes when humans delegate purchasing authority to autonomous software agents, and the accountability, oversight, and trust infrastructure required for agent-mediated commerce to function within organizational contexts.

April 21, 202622 min read

The Economics of Agent-Mediated Commerce: Competitive Restructuring in B2B Markets

An analysis of how agent-mediated purchasing restructures competitive dynamics in B2B markets, shifting competition from attention capture and UX investment toward data completeness, interface reliability, and fulfillment accuracy.

April 21, 202617 min read

A Protocol Stack for Agent-Native Commerce: MCP, Domain Profiles, and Open Interoperability

A layered protocol stack perspective on agentic-commerce interoperability: MCP as a general capability mechanism, commerce-domain profiles as shared vocabulary, and capability registries as discovery infrastructure.

April 21, 202619 min read

The Invisible Buyer Has Arrived

Your next customer might not be human — and that changes everything about how you compete.

April 9, 202612 min read

Is the FP Juice worth the Squeeze?Part 11

A practical examination of whether adopting functional programming principles materially reduces enterprise risk and improves delivery predictability.

March 15, 20265 min read

When MVPs Grow TeethPart 10

How pragmatic domain models accumulate impossible states over time, and why algebraic data types prevent them by design.

March 8, 20266 min read

Folding in TraceabilityPart 9

How immutable event journals combined with pure fold functions create accountability by design in commerce systems.

March 1, 20264 min read

Not All Errors are ExceptionalPart 8

Why modeling business outcomes with Either instead of exceptions preserves meaning, enables auditing, and makes systems easier to trust.

February 22, 20266 min read

Modeling Absence without AmbiguityPart 7

How Option types model legitimate absence more honestly than null, eliminating hidden assumptions and defensive code throughout a system.

February 15, 20265 min read

Why Pattern Matching MattersPart 6

How algebraic data types and pattern matching let the compiler enforce business logic completeness, eliminating entire categories of runtime errors in commerce systems.

February 8, 20266 min read

Beyond the For-Loop: Mastering map, filter, and flatMapPart 5

How map, filter, and flatMap eliminate loop mechanics to expose pure business logic, making commerce transformation pipelines readable and predictable as they grow.

February 1, 20265 min read

Unpacking Agentic Commerce

How the shift from human to automated agent-based commerce requires systems to expose stable capability surfaces rather than internal microservice plumbing.

February 1, 20263 min read

Thinking in Expressions, Not StatementsPart 4

How shifting from statement-based to expression-based thinking eliminates hidden state and cognitive overhead in system design.

January 25, 20264 min read

Pure Functions: Your First Step Toward Bug-Free ConcurrencyPart 3

How pure functions — same inputs, same outputs, no side effects — eliminate entire categories of concurrency bugs and make pricing, eligibility, and promotion logic reliably testable at scale.

January 18, 20269 min read

Immutability by Default: The Foundation of Reliable SystemsPart 2

Why treating values as immutable facts — not mutable records — is the architectural foundation for distributed systems that behave predictably under concurrency, deployment, and time.

January 11, 20269 min read

Functional Programming Isn't Just for Academics: Why It Matters for the Systems We Build NowPart 1

An exploration of why functional programming principles address modern software development challenges, including distributed systems, and state management — moving beyond purely academic applications.

January 4, 20268 min read

An Introduction to Reactive Commerce

How applying reactive microservice architectures can invigorate digital commerce platforms and where it makes the most difference.

December 20, 20223 min read

Headless Commerce: Advice for Goal Hangers

Strategic guidance on implementing headless commerce architectures without losing sight of business outcomes.

December 16, 20225 min read

Agility and the Headless Commerce Debate

Making a headless commerce decision for the whole business, not just the engineering team.

July 7, 20217 min read

Why Do They Call Them Apartments When They're All Stuck Together?

Exploring microservices architecture, system boundaries, and the practical realities of decomposition in commerce platforms.

March 14, 20215 min read

Modeling Distribution on Tracing Ideals: A Novice's View on COVID-19 Vaccine Management

Contemplation of a COVID-19 vaccine distribution and administration plan that attempts to optimize need and effectiveness, and where blockchain might fit.

December 6, 20206 min read