Blog
Articles, guides, and notes on software engineering.
Contract Testing and Pact
A summary of my research into contract testing and Pact. It explains how contract testing verifies the interactions between a consumer and a provider, the difference between consumer-driven and provider-driven approaches, and how Pact works for testing between microservices.
Recent Posts
SLO Service Level Objectives: A Practical Guide to Implementing SLI, SLO, and Error Budgets
A review of Implementing Service Level Objectives (SLO). A practical guide to adopting SLIs, SLOs, and error budgets. Starting from defining services and users, it frames reliability as whether users can do what they need, showing how to set meaningful targets while avoiding over-engineering reliability.
Relearning the Basics of TypeScript
A set of notes from revisiting the fundamentals of TypeScript. Starting with a review of JavaScript basics such as variable scope, it works through TypeScript's type system and core syntax, organizing the key points and practical takeaways.
Disadvantages of Jest Snapshot Testing
Understand the drawbacks of Jest snapshot testing including test fragility, unclear assertions, and why assertion tests are better.
Web API Testing Techniques
A review of Web API Testing Techniques. A book that explains API testing through frameworks like asking questions with the 5W1H and the ten Ps model for grasping testability. From building test strategy and plans to security perspectives via STRIDE and threat trees, it offers views useful in practice.
About Sets
A summary of the basics of set theory. Starting from the definition of a set as a collection of elements satisfying certain conditions, it covers fundamental concepts such as subsets, unions, and intersections, and their applications to data structures, relational database theory, and logical expressions, framed around building problem-solving skills for software engineers.
Habits for Health
Documenting my habits for health. Partly poetic, with the hope of future reflection and improvement.
Large-Scale Data Management: Best Practices for Enterprise Architecture
A review of Large-Scale Data Management. It points out the limits of managing data centrally and presents thinking for moving to a scalable architecture that keeps up with change. With ideas like avoiding data warehouse silos, it lets you rethink data management from an architectural viewpoint.
Microservices Architecture, 2nd Edition
A review of Building Microservices, 2nd Edition. A book worth reading if you are working on or considering microservices. It thoroughly addresses the architectural qualities (non-functional requirements) distributed systems demand, offering value even beyond a microservices-only view. Chapter 1 is a well-organized concept summary.
Building & Pushing Docker Images with GoReleaser
Automate Docker image builds across multiple platforms using GoReleaser with GitHub Actions for streamlined CI/CD deployment.
From Monolith to Microservices: A Practical Migration Guide to Evolve Monoliths
A review of Monolith to Microservices. A book focused specifically on approaches for migrating from a monolith to microservices. Its longest chapter tackles database decomposition, the biggest hurdle in migration, offering practical guidance for evolving a system step by step.
Bitemporal Modeling: Valid Time and Transaction Time Explained
Bitemporal modeling explained: how a bitemporal data model tracks two timelines, valid time and transaction time, how it differs from non-temporal and uni-temporal models, and the challenges of implementing it in a relational database.
Building Secure and Reliable Systems: Design, Implementation, and Maintenance from Google SRE
A review of Building Secure and Reliable Systems. A book that frames security and reliability not as things simply implemented but as emergent properties arising from deployment and operations. Drawing on Google SRE's insights, it argues for weaving both into design from a project's earliest stages.
Mistakes in Software Architecture: Development and Evaluation of Non-Functional Requirements
A review of a book on mistakes in software architecture. Though old (published in 2010), it discusses architecture topics that still resonate today, in a casual style. Closer to an essay than a technical book, its later chapters (from chapter 6) are where the technical substance lies.
Exploring Permission Management Design
Understand ACL, RBAC, and ABAC permission design methods with functional/data scope, control targets, and operational constraints.
Unit Testing Best Practices: A Practical Guide for Developers
A review of Unit Testing Best Practices. A book that compiles the thinking and approaches needed for high-quality test design. Centered on what good tests should have, such as protection against regressions, resistance to refactoring, and maintainability, it shows with many examples how to design tests with cost-effectiveness in mind.
Trade-offs and Mistakes in Software Design: Making Better Choices in Programming
A review of Software Design Trade-offs and Errors. A book for learning the importance of weighing design trade-offs against each other, along with concrete examples of software design trade-offs. It teaches that considering even the reasons you did not choose an option leads to better choices.
Learning Ruby
Master Ruby fundamentals using official documentation, classic books, object-oriented design patterns and practical implementation practice.
About Ruby Block Syntax
Learn Ruby block syntax with do..end and {} forms, passing blocks to methods, yield statements, and Proc/lambda closure behavior.
About Ruby Modules
Understand Ruby modules for namespacing, mixin multiple inheritance, and providing common methods without class instantiation.