Blog
Articles, guides, and notes on software engineering.
Parallel Testing with PHPUnit on CircleCI
Execute PHPUnit tests in parallel on CircleCI using shell scripts to generate dynamic configuration and split containers.
Recent Posts
Contextual Logging with slog
Learn contextual structured logging in Go using log/slog (Go 1.21+). Covers custom slog.Handler, structured JSON output, and injecting trace IDs from context into every log entry.
More Effective Agile
More Effective Agile
Modular Monolith Architecture: A Practical Guide and When to Choose It Over Microservices
Learn what a modular monolith is, how it differs from microservices and traditional monoliths, and when it is the better architectural choice for your team.
CQRS Explained: When to Use Command Query Responsibility Segregation
Learn what CQRS (Command Query Responsibility Segregation) is, how it differs from CRUD, and when applying it actually improves your system design and scalability.
The Saga Pattern Explained: Managing Distributed Transactions in Microservices
Learn how the Saga pattern manages distributed transactions in microservices. Compare choreography vs orchestration-based sagas and their practical trade-offs.
Side Effects of Go's response.WriteHeader
Learn why calling Go response.WriteHeader multiple times triggers the superfluous call warning. Covers how the first status code wins and how to fix duplicate WriteHeader in HTTP handlers.
Proposal to Extend ServeMux Functionality in Go Accepted
The proposal to add dynamic routing and path parameters to Go net/http ServeMux was accepted. Learn what this means for third-party routers like goblin and the future of routing in Go.
What is BFF (Backend For Frontend)? Benefits and Implementation Guide
A summary of what I researched about BFF.
Notes on Building a Notification Platform
Understand notification platform design for multi-channel delivery including email, push, SMS integration.
100 Tips for Go: How to Address Common Developer Mistakes
100 Tips for Go: How to Address Common Developer Mistakes
About Go's http.RoundTripper
Learn what Go http.RoundTripper interface is and how to use it as HTTP client middleware. Includes a custom RoundTripper for request logging and response latency measurement.
Implementing Fan-In and Fan-Out in Go
Implement fan-in and fan-out concurrent patterns in Go using channels and goroutines. Fan-in aggregates multiple producer outputs; fan-out distributes one input across multiple workers.
About Template Method and Strategy Patterns
Master Template Method and Strategy patterns—two behavioral design patterns for controlling process flow and runtime method selection.
Distributed Services with Go
Distributed Services with Go
Running k3s with multipass
Exploring the use of multipass to run k3s for personal development applications.
Implementing Sliding Window
Implement sliding window algorithms for efficient subarray searching with optimized time complexity and rate limiter applications.
Monorepos Explained: Benefits, Drawbacks, and When to Use Them
Understand what monorepos are, the tooling involved (Nx, Turborepo, Bazel), and the practical trade-offs between monorepos and polyrepos for growing engineering teams.
Practical Go Language
Practical Go Language
Search Patterns in Binary Search Trees
Learn DFS and BFS search patterns for binary search trees, including preorder, inorder, and postorder traversal methods.