<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Compound Engineer — new lessons</title>
    <link>https://compoundengineer.com</link>
    <description>Visual, step-by-step explanations of DSA, system design, AI and ML systems, DevOps and career roadmaps — built so hard ideas stick before your next interview.</description>
    <language>en</language>
    <atom:link href="https://compoundengineer.com/rss.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Design a Real-Time Spam and Fraud Detection System</title>
      <link>https://compoundengineer.com/library/ai-system-design/design-a-real-time-spam-and-fraud-detection-system</link>
      <guid isPermaLink="true">https://compoundengineer.com/library/ai-system-design/design-a-real-time-spam-and-fraud-detection-system</guid>
      <pubDate>Tue, 27 Oct 2026 00:00:00 GMT</pubDate>
      <category>Case studies</category>
      <description>How to defend a real-time spam and fraud detector in an interview, from baseline and capacity math to labels, failures and evaluation.</description>
    </item>
    <item>
      <title>Largest Rectangle in Histogram</title>
      <link>https://compoundengineer.com/library/dsa/largest-rectangle-in-histogram</link>
      <guid isPermaLink="true">https://compoundengineer.com/library/dsa/largest-rectangle-in-histogram</guid>
      <pubDate>Tue, 27 Oct 2026 00:00:00 GMT</pubDate>
      <category>Stacks</category>
      <description>Find the biggest rectangle in a bar chart. Work out the nearest shorter bar on each side of every bar, then find them all in one pass with a stack.</description>
    </item>
    <item>
      <title>Container With Most Water</title>
      <link>https://compoundengineer.com/library/dsa/container-with-most-water</link>
      <guid isPermaLink="true">https://compoundengineer.com/library/dsa/container-with-most-water</guid>
      <pubDate>Tue, 27 Oct 2026 00:00:00 GMT</pubDate>
      <category>Sliding Window</category>
      <description>Choose two vertical lines that hold the most water. Start with the widest pair and always move the shorter line inward, which turns an O(n²) search into one pass.</description>
    </item>
    <item>
      <title>Monotonic Stack</title>
      <link>https://compoundengineer.com/library/dsa/monotonic-stack</link>
      <guid isPermaLink="true">https://compoundengineer.com/library/dsa/monotonic-stack</guid>
      <pubDate>Tue, 27 Oct 2026 00:00:00 GMT</pubDate>
      <category>Concepts</category>
      <description>A stack that keeps its values in order lets every element find its next smaller (or larger) neighbour in one pass. How it works, why it is O(n), and where it shows up.</description>
    </item>
    <item>
      <title>Depth-First Search</title>
      <link>https://compoundengineer.com/library/dsa/depth-first-search</link>
      <guid isPermaLink="true">https://compoundengineer.com/library/dsa/depth-first-search</guid>
      <pubDate>Mon, 26 Oct 2026 00:00:00 GMT</pubDate>
      <category>Concepts</category>
      <description>Explore everything reachable from a start by going as deep as possible before backing up. The visited set, the call stack, and where depth-first search is the right tool.</description>
    </item>
    <item>
      <title>Union-Find</title>
      <link>https://compoundengineer.com/library/dsa/union-find</link>
      <guid isPermaLink="true">https://compoundengineer.com/library/dsa/union-find</guid>
      <pubDate>Mon, 26 Oct 2026 00:00:00 GMT</pubDate>
      <category>Concepts</category>
      <description>Keep track of which items belong together as links arrive, in almost constant time. Parent pointers, union by size, path halving, and why it beats searching again after every link.</description>
    </item>
    <item>
      <title>Critical Connections in a Network</title>
      <link>https://compoundengineer.com/library/dsa/critical-connections-in-a-network</link>
      <guid isPermaLink="true">https://compoundengineer.com/library/dsa/critical-connections-in-a-network</guid>
      <pubDate>Mon, 26 Oct 2026 00:00:00 GMT</pubDate>
      <category>Graphs &amp; Union-Find</category>
      <description>Find every link whose loss cuts the network in two. Why &quot;remove each link and search again&quot; is too slow, and how one DFS with discovery times finds all the bridges.</description>
    </item>
    <item>
      <title>Dijkstra's Algorithm</title>
      <link>https://compoundengineer.com/library/dsa/dijkstras-algorithm</link>
      <guid isPermaLink="true">https://compoundengineer.com/library/dsa/dijkstras-algorithm</guid>
      <pubDate>Mon, 26 Oct 2026 00:00:00 GMT</pubDate>
      <category>Concepts</category>
      <description>Shortest paths in a weighted network, one node at a time. Why the closest unfinished node is always final, how a heap finds it, and why a negative edge breaks the idea.</description>
    </item>
    <item>
      <title>Bridges and Low-Link Values</title>
      <link>https://compoundengineer.com/library/dsa/bridges-and-low-link</link>
      <guid isPermaLink="true">https://compoundengineer.com/library/dsa/bridges-and-low-link</guid>
      <pubDate>Mon, 26 Oct 2026 00:00:00 GMT</pubDate>
      <category>Concepts</category>
      <description>Find every link whose loss splits a network, in one DFS. Discovery times, low-link values, and the one comparison that decides whether an edge is a bridge.</description>
    </item>
    <item>
      <title>Combination Sum</title>
      <link>https://compoundengineer.com/library/dsa/combination-sum</link>
      <guid isPermaLink="true">https://compoundengineer.com/library/dsa/combination-sum</guid>
      <pubDate>Sun, 25 Oct 2026 00:00:00 GMT</pubDate>
      <category>Recursion &amp; Backtracking</category>
      <description>Find every way to hit a target by reusing numbers. Why passing a start index to the recursion removes duplicate combinations without any set.</description>
    </item>
    <item>
      <title>Design a Parking Lot</title>
      <link>https://compoundengineer.com/library/code-system-design/design-a-parking-lot</link>
      <guid isPermaLink="true">https://compoundengineer.com/library/code-system-design/design-a-parking-lot</guid>
      <pubDate>Sun, 25 Oct 2026 00:00:00 GMT</pubDate>
      <category>Classic design problems</category>
      <description>Design a parking lot the way an interview goes. Ask the questions, find the classes, then write the code and handle two cars arriving at once.</description>
    </item>
    <item>
      <title>K Closest Points to Origin</title>
      <link>https://compoundengineer.com/library/dsa/k-closest-points-to-origin</link>
      <guid isPermaLink="true">https://compoundengineer.com/library/dsa/k-closest-points-to-origin</guid>
      <pubDate>Sun, 25 Oct 2026 00:00:00 GMT</pubDate>
      <category>Heaps &amp; Priority Queues</category>
      <description>Return the k points nearest the origin. Why a max-heap of size k beats sorting everything, and why the heap's top is always the point to throw out.</description>
    </item>
    <item>
      <title>Longest Substring Without Repeating Characters</title>
      <link>https://compoundengineer.com/library/dsa/longest-substring-without-repeating-characters</link>
      <guid isPermaLink="true">https://compoundengineer.com/library/dsa/longest-substring-without-repeating-characters</guid>
      <pubDate>Sun, 25 Oct 2026 00:00:00 GMT</pubDate>
      <category>Sliding Window</category>
      <description>Find the longest stretch of a string with no repeated letter. Grow a window to the right, and when a letter repeats, shrink it from the left until the repeat is gone.</description>
    </item>
    <item>
      <title>Number of Islands</title>
      <link>https://compoundengineer.com/library/dsa/number-of-islands</link>
      <guid isPermaLink="true">https://compoundengineer.com/library/dsa/number-of-islands</guid>
      <pubDate>Sun, 25 Oct 2026 00:00:00 GMT</pubDate>
      <category>Graphs &amp; Union-Find</category>
      <description>Count the groups of connected land in a grid. Why the first land cell you meet starts a new island, and how a BFS flood fill that sinks cells as it queues them counts each island exactly once.</description>
    </item>
    <item>
      <title>Coin Change</title>
      <link>https://compoundengineer.com/library/dsa/coin-change</link>
      <guid isPermaLink="true">https://compoundengineer.com/library/dsa/coin-change</guid>
      <pubDate>Sun, 25 Oct 2026 00:00:00 GMT</pubDate>
      <category>Dynamic Programming</category>
      <description>Find the fewest coins that add up to an amount. Build the answer for every smaller amount first, because the best way to make a is one coin plus the best way to make what is left.</description>
    </item>
    <item>
      <title>Course Schedule II</title>
      <link>https://compoundengineer.com/library/dsa/course-schedule-ii</link>
      <guid isPermaLink="true">https://compoundengineer.com/library/dsa/course-schedule-ii</guid>
      <pubDate>Sun, 25 Oct 2026 00:00:00 GMT</pubDate>
      <category>Graphs &amp; Union-Find</category>
      <description>Order courses so every prerequisite comes first, or report that no order exists. Why a course with zero unmet prerequisites is always safe to take next, and how a leftover course reveals a cycle.</description>
    </item>
    <item>
      <title>Task Scheduler</title>
      <link>https://compoundengineer.com/library/dsa/task-scheduler</link>
      <guid isPermaLink="true">https://compoundengineer.com/library/dsa/task-scheduler</guid>
      <pubDate>Sun, 25 Oct 2026 00:00:00 GMT</pubDate>
      <category>Heaps &amp; Priority Queues</category>
      <description>Run all tasks with a cooldown between two runs of the same task, in the fewest time slots. Why always running the task with the most copies left is optimal, simulated with a max-heap and a cooldown queue.</description>
    </item>
    <item>
      <title>Word Search</title>
      <link>https://compoundengineer.com/library/dsa/word-search</link>
      <guid isPermaLink="true">https://compoundengineer.com/library/dsa/word-search</guid>
      <pubDate>Sun, 25 Oct 2026 00:00:00 GMT</pubDate>
      <category>Recursion &amp; Backtracking</category>
      <description>Find a word by walking through a grid of letters. Why the search marks each cell as visited on the way in and must restore it on the way out.</description>
    </item>
    <item>
      <title>Longest Increasing Subsequence</title>
      <link>https://compoundengineer.com/library/dsa/longest-increasing-subsequence</link>
      <guid isPermaLink="true">https://compoundengineer.com/library/dsa/longest-increasing-subsequence</guid>
      <pubDate>Sun, 25 Oct 2026 00:00:00 GMT</pubDate>
      <category>Dynamic Programming</category>
      <description>Find the length of the longest strictly increasing subsequence. Keep the smallest possible tail for every length, and binary search that sorted list to place each number.</description>
    </item>
    <item>
      <title>Merge k Sorted Lists</title>
      <link>https://compoundengineer.com/library/dsa/merge-k-sorted-lists</link>
      <guid isPermaLink="true">https://compoundengineer.com/library/dsa/merge-k-sorted-lists</guid>
      <pubDate>Sun, 25 Oct 2026 00:00:00 GMT</pubDate>
      <category>Heaps &amp; Priority Queues</category>
      <description>Merge k sorted linked lists into one sorted list. Why the next node of the answer is always one of the k list heads, and how a min-heap picks it in O(log k).</description>
    </item>
    <item>
      <title>Minimum Window Substring</title>
      <link>https://compoundengineer.com/library/dsa/minimum-window-substring</link>
      <guid isPermaLink="true">https://compoundengineer.com/library/dsa/minimum-window-substring</guid>
      <pubDate>Sun, 25 Oct 2026 00:00:00 GMT</pubDate>
      <category>Sliding Window</category>
      <description>Find the shortest part of a string that contains every letter of another string. Grow a window until it is valid, then shrink it from the left for as long as it stays valid.</description>
    </item>
    <item>
      <title>N-Queens</title>
      <link>https://compoundengineer.com/library/dsa/n-queens</link>
      <guid isPermaLink="true">https://compoundengineer.com/library/dsa/n-queens</guid>
      <pubDate>Sun, 25 Oct 2026 00:00:00 GMT</pubDate>
      <category>Recursion &amp; Backtracking</category>
      <description>Place n queens on an n by n board so none attack each other. Why one queen per row and three small sets let the search drop a bad board the moment it appears.</description>
    </item>
    <item>
      <title>Find Median from Data Stream</title>
      <link>https://compoundengineer.com/library/dsa/find-median-from-data-stream</link>
      <guid isPermaLink="true">https://compoundengineer.com/library/dsa/find-median-from-data-stream</guid>
      <pubDate>Sun, 25 Oct 2026 00:00:00 GMT</pubDate>
      <category>Heaps &amp; Priority Queues</category>
      <description>Keep the median of a growing stream available in O(1). Split the numbers into a lower half in a max-heap and an upper half in a min-heap, and the median is always sitting on the tops.</description>
    </item>
    <item>
      <title>Word Ladder</title>
      <link>https://compoundengineer.com/library/dsa/word-ladder</link>
      <guid isPermaLink="true">https://compoundengineer.com/library/dsa/word-ladder</guid>
      <pubDate>Sun, 25 Oct 2026 00:00:00 GMT</pubDate>
      <category>Graphs &amp; Union-Find</category>
      <description>Turn one word into another by changing a single letter at a time, using only words from a list. Why breadth-first search gives the shortest ladder, and why each word must be marked visited the moment it is queued.</description>
    </item>
    <item>
      <title>Edit Distance</title>
      <link>https://compoundengineer.com/library/dsa/edit-distance</link>
      <guid isPermaLink="true">https://compoundengineer.com/library/dsa/edit-distance</guid>
      <pubDate>Sun, 25 Oct 2026 00:00:00 GMT</pubDate>
      <category>Dynamic Programming</category>
      <description>Find the fewest insert, delete and replace operations that turn one word into another. Fill a table where each cell is the best cost for a pair of prefixes, built from its left, top and diagonal neighbours.</description>
    </item>
    <item>
      <title>Swim in Rising Water</title>
      <link>https://compoundengineer.com/library/dsa/swim-in-rising-water</link>
      <guid isPermaLink="true">https://compoundengineer.com/library/dsa/swim-in-rising-water</guid>
      <pubDate>Sun, 25 Oct 2026 00:00:00 GMT</pubDate>
      <category>Graphs &amp; Union-Find</category>
      <description>Cross a grid while the water rises, so a path costs its tallest cell. Why a priority queue that always steps onto the lowest reachable cell finds the earliest moment you can swim across, and how Union-Find gets there another way.</description>
    </item>
    <item>
      <title>Maximal Rectangle</title>
      <link>https://compoundengineer.com/library/dsa/maximal-rectangle</link>
      <guid isPermaLink="true">https://compoundengineer.com/library/dsa/maximal-rectangle</guid>
      <pubDate>Sun, 25 Oct 2026 00:00:00 GMT</pubDate>
      <category>Dynamic Programming</category>
      <description>Find the largest rectangle of 1s in a binary matrix. Turn each row into a histogram of consecutive 1s above it, then solve Largest Rectangle in Histogram with a monotonic stack.</description>
    </item>
    <item>
      <title>House Robber</title>
      <link>https://compoundengineer.com/library/dsa/house-robber</link>
      <guid isPermaLink="true">https://compoundengineer.com/library/dsa/house-robber</guid>
      <pubDate>Sat, 24 Oct 2026 00:00:00 GMT</pubDate>
      <category>Dynamic Programming</category>
      <description>Rob the most money from a row of houses without hitting two neighbours. Build the best total house by house, where each house either adds its loot to the best from two houses back, or is skipped.</description>
    </item>
    <item>
      <title>Maximum Product Subarray</title>
      <link>https://compoundengineer.com/library/dsa/maximum-product-subarray</link>
      <guid isPermaLink="true">https://compoundengineer.com/library/dsa/maximum-product-subarray</guid>
      <pubDate>Sat, 24 Oct 2026 00:00:00 GMT</pubDate>
      <category>Dynamic Programming</category>
      <description>Find the contiguous subarray with the largest product. A negative number can turn the smallest product into the largest, so track both the maximum and the minimum product ending at each index.</description>
    </item>
    <item>
      <title>Sliding Window Maximum</title>
      <link>https://compoundengineer.com/library/dsa/sliding-window-maximum</link>
      <guid isPermaLink="true">https://compoundengineer.com/library/dsa/sliding-window-maximum</guid>
      <pubDate>Sat, 24 Oct 2026 00:00:00 GMT</pubDate>
      <category>Sliding Window</category>
      <description>Find the maximum of every window of size k in one pass. Keep a deque of indices whose values only decrease, and each element is added and removed at most once.</description>
    </item>
  </channel>
</rss>
