Hello
RSS FeedWelcome to my engineering blog! I'm Lynn Wang, and here I explore software engineering, system design, and the process of building reliable applications. This blog serves as a space for my technical deep dives and shared experiences in the world of software development.
Feel free to browse my posts or check out the about page to learn more about me.
Featured
-
Putting Workron on Kubernetes: The Integration Bug Unit Tests Couldn't Reach
Deploying Workron to a local Kubernetes cluster as the first real integration test, and the JSON tag mismatch the cluster surfaced in five minutes.
-
Draining the Gang: Coordinated Preemption with Checkpoint/Resume
Updated:Closing the stuck-gang gap: a coordinated drain path where one task's failure pulls its siblings down cleanly, with a retry-budget refund and opaque checkpoints that survive the round-trip.
-
All or Nothing: Gang Scheduling in Workron
Adding gang scheduling to Workron: a reserved state, an admission cycle that places N tasks simultaneously, and why running siblings are left untouched when one task fails.
-
Making the Invisible Visible: Structured Logging, Metrics, and Request Tracing
Replacing log.Printf with slog, adding Prometheus metrics, and building request ID tracing. How observability turned Workron from a system that works into one that explains itself.
-
From SQLite to PostgreSQL: Unlocking Concurrent Job Claiming with SKIP LOCKED
Why I went back on my own decision to stop at SQLite, what FOR UPDATE SKIP LOCKED actually does, and how context.Context propagation turned a one-file change into a twenty-file refactor.
-
DAG Dependencies: Teaching a Job Scheduler to Wait
Adding job dependencies to Workron — a new status, a cycle detection algorithm that guards against a problem that can't happen yet, and a SQL trick for querying into JSON arrays.
-
Surviving the Crash: Adding SQLite Persistence Without Touching Business Logic
Swapping Workron's in-memory store for SQLite, and the interface design that made it a one-file change outside the store package.
-
Splitting and Surviving Failures: HTTP Workers and Heartbeat Detection in Go
Updated:Splitting Workron into separate binaries, then solving the harder problem: detecting when a worker dies mid-job without telling anyone.
-
Building the Concurrent Monolith: Atomic Job Claiming in Go
Updated:How to build a job queue where multiple goroutines compete for work without stepping on each other, mutex-protected maps, atomic claiming, and retry logic.
-
Before the Code: Designing a Distributed Job Scheduler in Go
Updated:Architectural decisions, trade-offs, and the blueprint behind building a job scheduler from scratch.