Decision Log

Calls I made, and how they aged.

Anyone can list successes. Judgment shows in the dated record: what I bet, what it cost, and what I got wrong. Engagements are anonymized; the decisions and outcomes are real.

01

2025

Aged well

Deterministic guardrails over prompt-based safety

The bet: For the multi-agent skill tracker, every irreversible action was gated by code-enforced boundaries rather than instructions in the prompt, despite the extra build time.

How it aged: The system survived its first genuinely adversarial inputs without an incident. The prompt-only pilots I benchmarked against in the same period all had at least one visible failure. I now consider this non-negotiable, and wrote the reasoning up as a concept entry.

02

2025

Wrong

Bet that agent frameworks would consolidate quickly

The bet: I advised standardizing early on a single orchestration framework, expecting the ecosystem to converge within a year and early standardization to pay off.

How it aged: The ecosystem did not consolidate; it fragmented further, and the framework we standardized on changed its core abstractions twice. What actually held value was the layer underneath — versioned tools with contracts. I now keep framework coupling thin and treat the tool catalog as the durable asset.

03

2024

Aged well

Semantic layer before more AI features

The bet: When an internal AI assistant reported a wrong churn number to the CFO, the popular fix was better prompts. I froze new AI features for a quarter and built a governed metric layer instead.

How it aged: Zero KPI drift incidents since launch, and every subsequent AI feature shipped faster because definitions were already machine-readable. Freezing visible features to fix an invisible layer was unpopular for exactly one quarter.

04

2024

Aged well

Open table formats over a single-vendor engine

The bet: For the enterprise medallion build, I kept all storage on open formats even though the vendor-native path was faster to ship and the sales pressure to go native was considerable.

How it aged: Two years later the client renegotiated compute pricing from a position of strength because the data was portable. The 'slower' path cost us roughly six weeks up front and returned it many times over in leverage.

05

2023

Aged well

Lakehouse over regional warehouses

The bet: Three regions each wanted to keep their own warehouse with a sync layer on top. I bet the political capital on one lakehouse with asymmetric regional replication instead.

How it aged: The quarterly number-reconciliation ritual disappeared, and the ML and agent workloads that arrived in 2024–2025 would have been unbuildable on the federated design. The political fight was real, and worth it.

06

2023

Aged well

Domain pods over a bigger central team

The bet: With delivery slowing at 40 people, the default request was more hiring into the central team. I reorganized into domain pods with a platform pod instead, and froze hiring for two quarters.

How it aged: Throughput per head recovered to what it had been at half the size. One caveat I under-called: two pod leads needed a different job than the one they thought they had accepted, and I paid a quarter of drift for not writing the role down earlier.

07

2022

Wrong

Betting on a data catalog to fix discovery

The bet: I sponsored a full enterprise data catalog rollout, expecting tooling to solve the 'nobody knows what data exists' problem.

How it aged: Adoption never crossed 20%. The catalog documented a mess instead of fixing it. What worked later was ownership plus deprecation — fewer, named, maintained data products need less discovery tooling. I now treat catalogs as the last 10%, not the first.

08

2022

Mixed

Delaying streaming adoption

The bet: Against strong internal enthusiasm, I kept the stack on well-operated batch and micro-batch, arguing that no decision at the company actually needed sub-minute data.

How it aged: Right for two years — we saved significant complexity and cost. But I held the position about six months too long: one pricing use case genuinely needed streaming, and we started it late. The lesson is not 'streaming yes/no' but re-testing the assumption on a schedule.

09

2021

Aged well

Standardizing transformations on dbt early

The bet: I moved all transformation logic to dbt when it was still a contrarian choice in the enterprise, betting that version-controlled, tested SQL would outlast hand-rolled pipeline code.

How it aged: The codebase survived two platform migrations precisely because transformations were portable and tested. Some early macros aged into technical debt — discipline about macro complexity matters more than I appreciated at the time.

Scoring rule: a decision is "aged well" only if I would make the same call again with the same information. Reviewed and extended as engagements close.

Want to interrogate one of these?