picks
52 articles
Reading Platform Engineering Through Systems Thinking
Platform engineering and systems thinking seem to share a lot of ground. This post puts that hunch into words by applying stocks, flows, delays, archetypes, and leverage points to read platform behavior and the failures that keep recurring.
Systems Thinking Basics: Seeing the World as Stocks and Feedback
A plain-language tour of systems thinking based on Donella Meadows' Thinking in Systems: stocks, flows, feedback loops, archetypes, and leverage points.
Accidental Complexity and the Absence of Decision Records
How accidental complexity emerges, and why the absence of ADRs and Design Docs makes it hard to tell what is essential from what is accidental.
Three Common Patterns for Distributed Transactions — 2PC, Saga, and Outbox
A concise comparison of the three canonical distributed transaction patterns in microservices — 2PC, Saga, and Outbox — covering their mechanics, trade-offs, and when to use each.
The Abstraction Trap in Architecture Design
Why sharing domain logic can quietly turn into architectural debt, while technical concerns can safely be shared — with nuance around authorization and PII-sensitive logging.
Viability Conditions for Building a Platform
How do you decide whether to build an internal platform? This article organizes the viability conditions from the perspectives of core/supporting/generic subdomains, comparison with external services, leverage, and organizational capacity, and examines how far domain analysis alone can take you.
What's the Difference Between Product Development and Platform Development?
Exploring how product development and platform development differ across three dimensions — decision criteria, design philosophy, and investment perspective.
Migrating bmf-tech.com from gobel to gohan — A Full Static Site Transition
The complete process of migrating bmf-tech.com from a self-built headless CMS (gobel) with MySQL and Vue.js to a fully static site on gohan, hosted on Cloudflare Pages. Covers 700+ articles, English slug generation, image migration, redirects, and a Go-based preflight checker.
Considering Engineering in the Age of AI
Establish prompt governance with Golden Dataset validation, LLM-as-Judge evaluation, and prompt injection security.
LLM Prompt Management and Evaluation Platform Using GitHub Agentic Workflow
Manage LLM prompts as code using GitHub Agentic Workflows: Copilot-powered automation with golden datasets and evaluation.
Career Portfolio Creation Guide
Create a strategic career portfolio to clarify skills, assess market value, set goals, and optimize daily decision-making.
Good Architecture Strategy, Bad Architecture Strategy
Exploring the differences between effective and ineffective architecture strategies.
Why and When to Write an Architecture Strategy
Develop architecture strategies to eliminate ad-hoc technology decisions and establish technology standards across teams.
Differentiating Architecture Strategy, Tactics, and Design
Differentiate architecture strategy, tactics, and design using 5W1H framework to clarify why, what, how, when, where, and who decisions.
Difference Between Requirements and Constraints
Distinguish requirements from constraints in software design using ISO 29148 definitions for effective architecture trade-offs.
Key Points to Consider When Writing an ADR
Master ADR writing by focusing on atomic decisions, documenting trade-offs, team discussions, and technical writing principles for architecture.
What is Team Topologies? How to Structure Engineering Teams
Learn Team Topologies—the four team types (stream-aligned, platform, enabling, complicated-subsystem) and three interaction modes for effective software delivery organization.
Why Software Development Teams Should Define MVV
Understand MVV definition for software teams, mission clarity, vision alignment, and team personality development.
What is Platform Engineering? Building Internal Developer Platforms
Learn what platform engineering is, how internal developer platforms (IDPs) work, and how platform teams reduce cognitive load and improve developer productivity.
Understanding Terminal Specifications for TUI Development
Explore terminal specifications, raw mode, ANSI escape sequences, and termios for TUI development with practical Go implementations.
What is the Architecture Advice Process (AAP)?
Implement Architecture Advice Process for decentralized decision-making with ADR and architectural governance frameworks.
The Importance of Explicitly Stating Constraints and Trade-offs in Technical Decision Making
Document technical decisions by explicitly stating constraints and trade-offs to enable future re-evaluation and org growth.
Basic Patterns of Cache Strategies
Learn the five cache strategies: Cache Aside, Read Through, Write Through, Write Back, and Write Around. Covers read/write flows, consistency trade-offs, and mermaid diagram walkthroughs.
About Processing Models of Web Applications
Architect web applications with Event Loop, Thread, and Process models for IO-bound and CPU-bound concurrent workloads.
ACID vs BASE: Understanding Database Consistency Models
Compare ACID and BASE consistency models. Understand the trade-offs involved, when to use each, and how the CAP theorem connects to your database design choices.
CAP Theorem Explained: Understanding Distributed Database Trade-offs
Understand the CAP theorem and PACELC theorem with clear examples. Learn the distributed system trade-offs between consistency, availability, and partition tolerance.
A Retrospective Framework 'bmf' to Encourage Selection and Focus
Introducing a new retrospective framework to enhance focus and selection.
Cohesion and Coupling
Understand cohesion and coupling as software design metrics. Learn the 7 levels of cohesion (coincidental to functional) and 6 levels of coupling (content to data) with practical examples.
Access Control Patterns Using OPA
Explore four access control patterns using Open Policy Agent including Allow/Deny, SQL generation, and AST approaches with responsibility separation.
Understanding IO and CPU Characteristics in Ruby and Rails
Understand Ruby GVL, Puma concurrency, IO-bound vs CPU-bound workloads, thread/process tuning, and GC impact on Rails performance.
Considerations and Solutions for Pagination Impact in OPA
Master pagination with Open Policy Agent, offset pagination, cursor pagination, and access control filtering.
Considering the Shelf Life of Design
Consider design shelf life across business, organization, product, and technical perspectives. Balance constraints and trade-offs.
Measuring Scalability
Measure system scalability using throughput, latency, efficiency metrics, mathematical models like Amdahl's Law, and practical benchmarking.
Things to Consider When Writing Architecture Documents
Guidelines for creating effective architecture documents in system design.
Structure of My System Specification Document
Learn to structure system specification documents with sections for architecture, data models, APIs, and sequence diagrams for design clarity.
Bounded Contexts
Understand bounded contexts in domain-driven design to clarify word meanings, organize responsibilities, and improve system design.
What Is EventStorming
Learn EventStorming, a workshop technique born from domain-driven design that uses sticky notes to rapidly map a business domain and build shared understanding between developers and domain experts.
Implementation of Access Control System for Microservices Using OPA
Implement fine-grained access control for distributed microservices using Open Policy Agent and declarative Rego policy language.
Understanding Story Points Using the Cynefin Framework
An idea on how to think about the criteria for story points.
Considering Architecture Strategy
Understand architecture strategy as systematic policy for building and evolving systems, covering vision, principles, and scalability planning.
Starting Guide to Load Testing
A guide to understanding and starting load testing.
About Sets
Summarizing the basics of sets.
From Custom HTTP Router to New ServeMux
Migrate from a custom HTTP router goblin to Go 1.22 enhanced net/http ServeMux. Covers new routing patterns, performance comparison with third-party routers, and when ServeMux is enough.
MySQL Locks Explained: Preventing Deadlocks and Improving Performance
Understand MySQL locking mechanisms—table locks, row locks, gap locks, and intent locks. Learn how deadlocks occur and how to prevent and diagnose them effectively.
What is a Database Index? How It Works and When You Need It
Understand how database indexes work internally—B-tree and hash structures—when to add or avoid indexes, and how to measure index effectiveness using EXPLAIN.
How to Deal with Uncertainty in Software Development Projects
Address software project uncertainty through agile planning. Distinguish known unknowns from unknown unknowns to minimize risks.
Improving Code Performance with Go
Learn practical Go performance optimization: pprof profiling, benchmark tests, escape analysis, memory allocation reduction, and real examples from optimizing a custom HTTP router.
MySQL Transaction Isolation Levels: Preventing Dirty Reads, Phantom Reads, and More
Learn MySQL's four transaction isolation levels, the anomalies each prevents (dirty read, non-repeatable read, phantom read), and how to choose the right level.
Transaction Overview
Understand database transaction fundamentals including ACID properties, concurrency control, and isolation for data integrity.
Devoured System Design Resources
A compilation of resources related to system design.
Technologies Supporting bmf-tech
Explore Docker, Golang, Vue.js, Nginx, Prometheus, and Grafana powering modern blogging infrastructure and monitoring systems.
Introduction to Building an HTTP Router with net/http
This article explains how to create a custom HTTP router using Golang's standard package net/http.