2025  6

June  1

Go 1.23 Range Over Functions: What It’s For and What It Isn’t

June 18, 2025 · 5 min · MW

May  1

Evaluating LLM-Integrated Systems: What Works and What Doesn’t

May 7, 2025 · 6 min · MW

April  1

Distributed Consistency Models: What Your Service Actually Guarantees

April 16, 2025 · 6 min · MW

March  1

AI-Native Development: What It Actually Means to Use These Tools Well

March 5, 2025 · 6 min · MW

January  2

Staff Engineer or Engineering Manager: On Choosing the Road That Doesn’t Come Back

January 22, 2025 · 5 min · MW

Building with AI Coding Tools: What Actually Changes and What Doesn’t

January 22, 2025 · 6 min · MW

2024  9

November  1

Cross-Team Technical Alignment at Scale

November 20, 2024 · 6 min · MW

October  1

Tail-Based Trace Sampling: Why Head Sampling Is Usually Wrong

October 9, 2024 · 5 min · MW

September  1

RAG Systems in Production: What the Tutorials Don’t Cover

September 11, 2024 · 7 min · MW

August  1

Writing RFCs for Wide Audiences

August 21, 2024 · 6 min · MW

July  1

LLM Integration Patterns for Backend Engineers

July 10, 2024 · 6 min · MW

May  2

Observability at Scale: What ‘Good’ Looks Like When You Have Too Much Data

May 29, 2024 · 5 min · MW

Evaluating LLM Applications: Why ‘It Looks Good’ Is Not Enough

May 14, 2024 · 6 min · MW

March  1

Cache Design as a Reliability Practice, Not an Optimisation

March 27, 2024 · 6 min · MW

February  1

Engineering at Enterprise Scale: What Changes When the System Is Actually Big

February 14, 2024 · 4 min · MW

2023  8

November  1

Eleven Years In: A Retrospective on Careers, Choices, and Compounding Knowledge

November 15, 2023 · 5 min · MW

October  1

Go’s Race Detector in CI: Catching Data Races Before They Catch You

October 4, 2023 · 6 min · MW

August  1

Navigating Org Change as an Engineer

August 16, 2023 · 5 min · MW

July  1

Go’s net/http: Building Production HTTP Servers Without a Framework

July 5, 2023 · 6 min · MW

May  1

ClickHouse for Application Analytics: Fast Aggregations Without Spark

May 17, 2023 · 5 min · MW

April  1

Database Access Patterns in Go: sqlx, pgx, and When to Use an ORM

April 5, 2023 · 6 min · MW

February  1

Feature Flags at Scale: Beyond the On/Off Switch

February 28, 2023 · 6 min · MW

January  1

Writing Idiomatic Go

January 11, 2023 · 6 min · MW

2022  9

November  1

Structured Logging in Go: slog, zerolog, and What Actually Matters

November 23, 2022 · 5 min · MW

October  1

Postmortems as a Learning Tool: Structure, Culture, and Follow-Through

October 5, 2022 · 6 min · MW

August  1

Memory Layout in Go: Structs, Alignment, and Cache Performance

August 17, 2022 · 5 min · MW

July  1

On-Call Culture That Doesn’t Burn Out Your Team

July 6, 2022 · 5 min · MW

May  2

OpenTelemetry in Go: Distributed Tracing That Doesn’t Get in the Way

May 31, 2022 · 5 min · MW

Kafka at Startup Scale

May 18, 2022 · 6 min · MW

April  1

Platform Engineering Is a Product Problem, Not a Technology Problem

April 6, 2022 · 4 min · MW

February  1

Engineering Roadmaps: Planning for Uncertainty

February 16, 2022 · 5 min · MW

January  1

Embedding in Go: Composition Over Inheritance Done Right

January 5, 2022 · 5 min · MW

2021  8

November  1

Building Reliable Pipelines with Go: Retry, Circuit Breaker, and Backoff

November 17, 2021 · 6 min · MW

October  1

Technical Debt Is a Balance Sheet Item, Not a Moral Failing

October 6, 2021 · 6 min · MW

July  1

Hiring Senior Engineers: What the Interview Loop Can’t Tell You

July 7, 2021 · 5 min · MW

April  1

Go 1.18 Generics: Real Use Cases Worth the Complexity

April 7, 2021 · 5 min · MW

March  1

After the Startup: Joining a Larger Organisation Without Losing Your Mind

March 17, 2021 · 3 min · MW

February  2

Writing Technical RFCs That Actually Get Read

February 24, 2021 · 5 min · MW

Engineering Velocity at a Startup: What Actually Made Us Fast

February 9, 2021 · 6 min · MW

January  1

gRPC in Production: Lessons After Two Years

January 13, 2021 · 4 min · MW

2020  10

November  1

Choosing a Time-Series Database in 2020

November 18, 2020 · 5 min · MW

October  1

Generics Are Coming to Go: What the Proposal Actually Solves

October 5, 2020 · 5 min · MW

August  2

The Platform vs Product Tension in a Growing Startup

August 12, 2020 · 5 min · MW

Go’s Scheduler: GOMAXPROCS, Work Stealing, and Why It Matters

August 12, 2020 · 5 min · MW

July  1

Building a High-Throughput Event Pipeline in Go Without Losing Your Mind

July 1, 2020 · 6 min · MW

May  1

From IC to Lead: The First 90 Days Managing a Technical Team

May 13, 2020 · 5 min · MW

April  1

Profiling Go Services in Production with pprof

April 1, 2020 · 5 min · MW

March  1

Go Benchmarks: Writing Ones That Actually Tell You Something

March 17, 2020 · 6 min · MW

February  1

Context Propagation in Go: Deadlines, Cancellation, and Tracing

February 19, 2020 · 5 min · MW

January  1

Go Module System: Dependency Management Done Right (Mostly)

January 8, 2020 · 5 min · MW

2019  6

September  1

Error Handling in Go: Patterns That Actually Work at Scale

September 11, 2019 · 7 min · MW

August  1

Channels vs Mutexes: When to Use Which in Go

August 7, 2019 · 5 min · MW

June  1

Building the First Production Service at a Startup: Decisions Under Uncertainty

June 26, 2019 · 5 min · MW

April  1

Goroutines Are Not Threads: The Mental Model Shift

April 22, 2019 · 6 min · MW

February  1

Go for the Seasoned Java Developer: What Feels Familiar, What Doesn’t

February 20, 2019 · 4 min · MW

January  1

Why I Left: On Risk, Pace, and Ownership

January 9, 2019 · 4 min · MW

2018  7

October  1

Schema Evolution in Avro: The Hard Lessons from Production

October 4, 2018 · 5 min · MW

August  1

What Big-Bank Engineering Taught Me About System Design

August 23, 2018 · 4 min · MW

July  1

Event Sourcing in Financial Systems: Real Benefits, Real Costs

July 11, 2018 · 6 min · MW

June  1

Backpressure in Practice: Keeping Fast Producers from Killing Slow Consumers

June 14, 2018 · 6 min · MW

May  1

Project Loom Preview: Virtual Threads and What They Mean for Server Code

May 24, 2018 · 5 min · MW

March  1

Two Years of Clojure in Production: Honest Retrospective

March 1, 2018 · 4 min · MW

January  1

Distributed Transactions Are a Lie (And What to Do Instead)

January 17, 2018 · 5 min · MW

2017  8

November  1

From Java 8 to Java 11 in a Regulated Environment: What Actually Broke

November 8, 2017 · 5 min · MW

October  1

Building MiFID II Trade Reporting Infrastructure: An Engineer’s View

October 3, 2017 · 6 min · MW

September  1

Stream Processing with Kafka Streams vs Flink: A Real Comparison

September 27, 2017 · 4 min · MW

August  1

Persistent Data Structures Are Not Just for Functional Purists

August 16, 2017 · 5 min · MW

April  2

Reading GC Logs Like a Detective

April 18, 2017 · 6 min · MW

Column Stores for Analytics: Why Row-Based Is Wrong for This Problem

April 5, 2017 · 4 min · MW

February  1

Spec-Driven Development in Clojure: Validating Financial Data at the Edge

February 22, 2017 · 5 min · MW

January  1

Kafka in Finance: What ‘Exactly Once’ Actually Costs You

January 10, 2017 · 4 min · MW

2016  7

November  2

Clojure Data Pipelines: Transducers in Production Risk Processing

November 23, 2016 · 5 min · MW

Threading Models in Java: Which One Does Your System Actually Need?

November 9, 2016 · 5 min · MW

October  1

KDB+/Q for Java Developers: Reading the Matrix

October 11, 2016 · 6 min · MW

August  1

Heap Dumps and Flight Recorder: Diagnosing JVM Memory Problems in Production

August 24, 2016 · 6 min · MW

July  1

Time-Series Data at a Bank: Why Relational Databases Break and What Comes Next

July 6, 2016 · 5 min · MW

April  1

Why the Risk Team Chose Clojure (And Why It Made Sense)

April 5, 2016 · 4 min · MW

January  1

When the Scale Changes: Moving into Institutional Finance

January 6, 2016 · 4 min · MW

2015  8

November  1

Five Years in High-Frequency Trading: What I Actually Learned

November 12, 2015 · 6 min · MW

October  1

ZGC and Shenandoah: What Low-Pause GC Means for Trading Systems

October 1, 2015 · 5 min · MW

August  1

Scala Akka Actors for Trading Workflows: Promises and Pitfalls

August 19, 2015 · 4 min · MW

July  1

Risk Aggregation in Real Time: Design Constraints from the Dealing Desk

July 8, 2015 · 6 min · MW

May  1

Understanding Safepoints: The JVM Pauses Nobody Talks About

May 27, 2015 · 4 min · MW

April  1

Memory-Mapped Files in Java: Chronicle and the Art of Zero-Copy I/O

April 15, 2015 · 5 min · MW

March  1

Building a Trade Blotter That Doesn’t Lie Under Load

March 4, 2015 · 5 min · MW

January  1

Chronicle Queue vs Kafka: Choosing a Persistent Journal at Nanosecond Scale

January 21, 2015 · 4 min · MW

2014  9

December  1

End-of-Year Architecture Review: What Held, What Failed, What Changed

December 10, 2014 · 4 min · MW

October  1

Benchmarking Without Lying: JMH, Coordinated Omission, and Honest Numbers

October 29, 2014 · 4 min · MW

September  1

Aeron: Reliable UDP Multicast for Market Data Distribution

September 17, 2014 · 6 min · MW

August  1

Choosing a GC Collector for Low-Latency Java: A Practical Comparison

August 6, 2014 · 5 min · MW

June  1

Slippage, Spread, and Rejection: Engineering Around Market Microstructure

June 25, 2014 · 5 min · MW

May  1

Busy Spinning vs Blocking: Thread Strategies for Ultra-Low Latency

May 14, 2014 · 5 min · MW

April  1

Off-Heap Memory in Java: sun.misc.Unsafe and Chronicle Map

April 2, 2014 · 6 min · MW

February  1

FX Pricing Engine Architecture: From Feeds to Executable Quotes

February 19, 2014 · 5 min · MW

January  1

Scala on the Hot Path: Where the Abstraction Cost Goes

January 8, 2014 · 6 min · MW

2013  9

November  1

Why Average Latency Is a Lie: HdrHistogram and Measuring What Matters

November 27, 2013 · 5 min · MW

October  1

Order Book Implementation: Data Structures for Price-Level Aggregation

October 16, 2013 · 5 min · MW

September  1

Java Chronicle: Off-Heap Persistence Without Serialisation Overhead

September 5, 2013 · 4 min · MW

July  1

JVM JIT Compilation: What the C2 Compiler Does to Your Loops

July 30, 2013 · 6 min · MW

June  1

Market Connectivity: Building a Low-Latency Feed Handler

June 11, 2013 · 6 min · MW

May  1

Comparing ArrayBlockingQueue to the Disruptor: Numbers Don’t Lie

May 22, 2013 · 4 min · MW

April  1

Disruptor Deep Dive: Memory Layout, Cache Lines, and False Sharing

April 9, 2013 · 5 min · MW

February  1

The LMAX Disruptor: How a Ring Buffer Changed My Mental Model of Queues

February 28, 2013 · 4 min · MW

January  1

Introduction to Lock-Free Programming in Java

January 17, 2013 · 5 min · MW

2012  8

December  1

Mechanical Sympathy: Writing Java That Respects the Hardware

December 4, 2012 · 4 min · MW

November  1

Stop-the-World GC Pauses Killed Our SLA — And What We Did About It

November 13, 2012 · 3 min · MW

September  1

Latency vs Throughput: The False Dichotomy I Learned the Hard Way

September 25, 2012 · 5 min · MW

August  1

FIX Protocol 101: What Every Finance Engineer Must Know

August 7, 2012 · 5 min · MW

June  1

Why Your Java App Is Slow Before It Even Starts: Classloading Deep Dive

June 18, 2012 · 5 min · MW

May  1

Building a Price Feed Aggregator in Java: First Attempt

May 9, 2012 · 6 min · MW

March  1

Understanding the FX Spot Market from an Engineer’s Chair

March 21, 2012 · 5 min · MW

February  1

From Zero to Production: My First Month in Electronic Trading

February 8, 2012 · 3 min · MW
Available for consulting Distributed systems · Low-latency architecture · Go · LLM integration & RAG · Technical leadership
hello@turboawesome.win