Reading Paths

Series

Curated routes through posts that belong together. Start with a series when you want context instead of a reverse chronological archive.

Backend Systems and Architecture

Queues, caching, locks, APIs, and the tradeoffs that show up when systems carry real traffic.

8 posts
Software Engineering

Choosing the Right Queue System

A practical guide for choosing between BullMQ, PgBoss, RabbitMQ, Kafka, SQS, SNS, and other queue systems.

System DesignQueuesMessaging
Software Engineering

Understanding Caching Strategies: From Cache-Aside to Write-Behind

I've been digging into caching strategies lately, specifically how different patterns handle reads and writes. Here's what I learned and when to use each one.

CachingSystem DesignSoftware Engineering
Software Engineering

PostgreSQL Advisory Locks: What They Are and When You Actually Need Them

I've been studying PostgreSQL locking beyond the basics. Advisory locks are one of those things you don't know you need until you're debugging a race condition at 2 AM.

PostgreSQLDatabaseSystem Design
Software Engineering

PgBoss vs BullMQ: How Two Job Queue Architectures Work Under the Hood

I've been working with PgBoss at Xendit and got curious about how it compares to BullMQ. Turns out they solve the same problem with completely different architectures.

PostgreSQLRedisSystem Design
Software Engineering

API Design: Design-First vs Code-First

Dalam pengembangan perangkat lunak kontemporer, desain API memainkan peran kritis dalam kesuksesan sebuah proyek

API DesignAPI DevelopmentSoftware Engineering
Software Engineering

Welcome to My New Blog: Migrating from WordPress to Next.js

Hello, world. 🎉 Welcome to my shiny new blog, now powered by the magic of Next

Software EngineeringNext.jsTypeScript
Algorithms

Leetcode - Logger Rate Limiter Solution

Building a logger rate limiter is a common system design challenge

LeetCodeAlgorithmsSystem Design
Software Engineering

SOLID: Good OOP Principles

SOLID principles kept coming up in interview prep and code reviews

OOPDesign PatternsSoftware Engineering

Algorithm Patterns

Problem solving patterns from LeetCode, grouped around arrays, linked lists, heaps, stacks, and pointers.

28 posts
Algorithms

Leetcode - Merge k Sorted Lists Solution

Efficiently merging k sorted linked lists into one sorted list

AlgorithmsLeetCodeLinked Lists
Algorithms

Leetcode - N-Queens II Solution

Counting the distinct ways to place n queens on a chessboard without any conflicts

AlgorithmsLeetCodeBacktracking
Algorithms

Leetcode - Valid Number Solution

Determining if a string represents a valid number sounds straightforward, but the edge cases make this problem deceptively tricky

AlgorithmsLeetCodeString Processing
Algorithms

Leetcode - Rotate Array Solution

Rotating an array sounds simple enough. Take [1,2,3,4,5,6,7] and rotate it right by 3 positions to get [5,6,7,1,2,3,4]

AlgorithmsLeetCodeArray Manipulation
Algorithms

Leetcode - N-Queens Solution

Finding all distinct board configurations for placing n queens without conflicts

AlgorithmsLeetCodeBacktracking
Data Structures

Understanding Priority Queue (Min-Heap)

Priority queues are usually implemented using heaps, but I wanted to understand how heaps actually work under the hood

Data StructuresAlgorithmsPriority Queue
Algorithms

Leetcode - Candy Solution

Distributing candy to children based on their ratings sounds simple at first - just give more candy to kids with higher ratings

AlgorithmsLeetCodeGreedy
Algorithms

Leetcode - Best Time to Buy and Sell Stock II Solution

After solving the single transaction stock problem, I was curious about what would happen if I could make multiple transactions

AlgorithmsLeetCodeGreedy
Algorithms

Leetcode - Best Time to Buy and Sell Stock Solution

Finding the best time to buy and sell stock sounds like a finance problem, but it's actually a great algorithm challenge

AlgorithmsLeetCodeTwo Pointers
Algorithms

Leetcode - Reverse Linked List Solution

Reversing a linked list is a fundamental skill that comes up in many coding interviews

AlgorithmsLeetCodeLinked Lists
Algorithms

Introduction to In-Place Manipulation of a Linked List

Reversing a linked list seems like it would require creating a new list

Data StructuresAlgorithmsLinked Lists
Data Structures

Introduction to Priority Queue

Sometimes you need to process items by priority, not just in the order they arrived

Data StructuresAlgorithmsPriority Queue
Algorithms

Leetcode - Container With Most Water Solution

Finding the container that holds the most water looked like it would need nested loops at first

AlgorithmsLeetCodeTwo Pointers
Algorithms

Leetcode - Trapping Rain Water Solution

Calculating how much rainwater can be trapped between bars looks like a complex geometry problem at first

AlgorithmsLeetCodeTwo Pointers
Algorithms

Leetcode - Palindrome Permutation Solution

Checking if a string can be rearranged into a palindrome seems like it would require generating all permutations, which would be O(n

AlgorithmsLeetCodeFrequency Counting
Algorithms

Introduction to Knowing What to Track

Many algorithm problems boil down to one question: what should I track

Data StructuresAlgorithmsPatterns
Algorithms

Leetcode - Logger Rate Limiter Solution

Building a logger rate limiter is a common system design challenge

LeetCodeAlgorithmsSystem Design
Algorithms

Leetcode - Design HashMap Solution

Designing my own HashMap from scratch sounded intimidating at first

LeetCodeAlgorithmsData Structures
Data Structures

Introduction to Hash Map

Hash maps show up everywhere in algorithm problems

Data StructuresAlgorithmsHashMap
Algorithms

Leetcode - Implement Queue Using Stacks Solution

Implementing a queue using only two stacks sounds impossible at first

LeetCodeAlgorithmsData Structures
Algorithms

Leetcode - Remove All Adjacent Duplicates In String Solution

Removing adjacent duplicates from a string sounds simple at first, but it gets tricky when removals create new adjacent pairs

AlgorithmsLeetCodeStack
Data Structures

Introduction to Stacks

Stacks are everywhere in programming: function calls, undo/redo, expression evaluation

Data StructuresAlgorithmsStack
Algorithms

Leetcode - Linked List Cycle Solution

Detecting cycles in linked lists is a classic interview problem

AlgorithmsLeetCodeLinked Lists
Algorithms

Leetcode - Happy Number Solution

Happy Number sounds like a fun math puzzle, but it's actually a clever way to practice cycle detection algorithms

AlgorithmsLeetCodeCycle Detection
Algorithms

Fast and Slow Pointers

Detecting cycles in a linked list seems like it would require storing all visited nodes

AlgorithmsData StructuresLinked Lists
Algorithms

Leetcode - Sum of Three Values Solution

Finding three numbers that sum to a target value sounds like it needs three nested loops

AlgorithmsLeetCodeTwo Pointers
Algorithms

Leetcode - Valid Palindrome Solution

Checking if a string reads the same forward and backward seems like a simple problem

AlgorithmsLeetCodeTwo Pointers
Data Structures

Introduction to Two Pointers

Nested loops were my go-to solution for array problems until I discovered the two pointers technique

Data StructuresAlgorithmsTwo Pointers

Career, Resilience, and Work

Personal posts about hard seasons, growth, team fit, leadership, and rebuilding after setbacks.

2 posts

Life, Love, and Music

Older personal writing about music, relationships, family, and the emotions that shaped the person behind the work.

5 posts