Bits, Trades & Systems
Posts
Series
Tags
About
Archive
Archive
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