- →
Harness Engineering: How OpenAI Builds Software Agent-First
OpenAI reported shipping a million-line beta product in five months with no manually written source code — a small team directing Codex agents. The methodology behind it is harness engineering: you stop writing code and start building the rig that lets agents write it reliably.
aiagentsharness-engineeringcodexllmengineering - →
Loop Engineering: Stop Prompting, Start Designing the Loop
The skill that matters with coding agents is no longer the words you type — it's the loop you put them in. A field guide to loop engineering: what the loop is, what makes a good one, how to stack loops, and how to keep it safe.
aiagentsloop-engineeringllmengineering - →
Scenario-Based Prep — Part 5: Strategy & Advanced Scenarios
Market expansion with CAGE, pricing with Jobs-To-Be-Done, an advanced federated-learning rollout weighing privacy against complexity, and a full mock walkthrough that ties the whole method together.
scenario-basedleadershipstrategypricingprep - →
Scenario-Based Prep — Part 4: Decisions & Prioritization
Running a decision meeting with RAPID, engineering-versus-product trade-offs from first principles, handling a compliance flag mid-build with Pause–Assess–Align, and translating technical reality for a mixed audience.
scenario-basedleadershipdecision-makingprioritizationprep - →
Scenario-Based Prep — Part 3: Customer & Crisis Scenarios
Four of the most common high-pressure prompts — an enterprise escalation, a launch with a safety flag, crisis communication, and an incident postmortem — each with a realistic prompt, a strong answer, the pitfalls, and likely follow-ups.
scenario-basedleadershipcrisispostmortemprep - →
Scenario-Based Prep — Part 2: The Frameworks Toolkit
Eight named frameworks that make your reasoning fast and legible — RAPID, Risk Matrix, Pause–Assess–Align, the Five P's, Five Whys, RACI, CAGE, and Jobs-To-Be-Done. What each is, when to reach for it, and a one-line example.
scenario-basedframeworksleadershipjudgmentprep - →
Scenario-Based Prep — Part 1: The Universal Method
High-stakes situational rounds aren't testing whether you know the answer — they're testing how you get to one. A single repeatable structure: slow down, clarify the decision, map stakeholders, weigh trade-offs, recommend, and close with ownership.
scenario-basedleadershipjudgmentframeworksprep - →
NeetCode 150 in Java — Part 18: Bit Manipulation (Finale)
Single Number and Reverse Integer — the last two problems — plus a look back at the pattern map that ties the whole Blind 75 and NeetCode 150 together.
dsajavabit-manipulationxorneetcode - →
NeetCode 150 in Java — Part 17: Math & Geometry
Plus One, Pow(x, n), Multiply Strings, and Detect Squares. Carry propagation, binary exponentiation, grade-school multiplication without BigInteger, and counting squares with a point map.
dsajavamathgeometryneetcode - →
NeetCode 150 in Java — Part 16: Partitions, Intervals & Math
Partition Labels, Valid Parenthesis String, Minimum Interval to Include Each Query, and Happy Number. Greedy last-occurrence partitioning, a two-bound validity sweep, offline queries with a heap, and cycle detection on digit sums.
dsajavagreedyintervalsmathneetcode - →
NeetCode 150 in Java — Part 15: Greedy
Jump Game II, Gas Station, Hand of Straights, and Merge Triplets to Form Target. When a single local rule — extend the reach, restart the tank, build from the smallest — provably beats a full DP.
dsajavagreedyneetcode - →
NeetCode 150 in Java — Part 14: 2-D Dynamic Programming II
Distinct Subsequences, Edit Distance, Burst Balloons, and Regular Expression Matching. The hardest DP tier — counting subsequences, transforming strings, interval DP on the last choice, and matching with wildcards.
dsajavadynamic-programminginterval-dpneetcode - →
NeetCode 150 in Java — Part 13: 2-D Dynamic Programming I
Best Time to Buy/Sell with Cooldown, Target Sum, Interleaving String, and Longest Increasing Path in a Matrix. State machines, subset-sum with signs, two-string grids, and DFS + memo on a grid.
dsajavadynamic-programmingmemoizationneetcode - →
NeetCode 150 in Java — Part 12: Itineraries & DP Openers
Reconstruct Itinerary, Min Cost Climbing Stairs, Partition Equal Subset Sum, and Coin Change II. Hierholzer's Eulerian path, a 1D cost recurrence, and subset-sum as 0/1 knapsack — counting vs. reaching.
dsajavagraphsdynamic-programmingknapsackneetcode - →
NeetCode 150 in Java — Part 11: Advanced Graphs
Network Delay Time, Cheapest Flights Within K Stops, Min Cost to Connect Points, and Swim in Rising Water. Dijkstra, Bellman-Ford with a hop limit, Prim's MST, and Dijkstra on a modified cost.
dsajavagraphsdijkstramstneetcode - →
NeetCode 150 in Java — Part 10: Graphs II
Surrounded Regions, Course Schedule II, Redundant Connection, and Word Ladder. Flooding from the border inward, topological ordering, Union-Find to spot the cycle-closing edge, and BFS over word transformations.
dsajavagraphsunion-findtopological-sortbfsneetcode - →
NeetCode 150 in Java — Part 9: N-Queens & Graphs I
N-Queens, Max Area of Island, Rotting Oranges, and Walls and Gates. Constraint-set backtracking, DFS area, and multi-source BFS that expands from many origins at once.
dsajavabacktrackinggraphsbfsneetcode - →
NeetCode 150 in Java — Part 8: Backtracking
Combination Sum II, Permutations, Letter Combinations of a Phone Number, and Palindrome Partitioning. The choose-explore-un-choose template across four shapes: dedup combinations, used-array permutations, digit maps, and partition cuts.
dsajavabacktrackingneetcode - →
NeetCode 150 in Java — Part 7: Trees & Backtracking
Balanced Binary Tree, Binary Tree Right Side View, Count Good Nodes, and Subsets II. Height-with-a-flag, BFS last-node, carrying a running max down a path, and de-duplicating backtracking.
dsajavatreesbacktrackingneetcode - →
NeetCode 150 in Java — Part 6: Design & Trees
Task Scheduler, Design Twitter, LRU Cache, and Diameter of Binary Tree. Greedy scheduling with counts, composing structures for a feed, the hashmap + doubly-linked-list cache, and return-one-update-a-global.
dsajavadesignheaptreesneetcode - →
NeetCode 150 in Java — Part 5: Heap / Priority Queue
Kth Largest Element in a Stream, Last Stone Weight, K Closest Points to Origin, and Kth Largest Element in an Array. The heap's core jobs — streaming K, repeated extremes, and partial selection.
dsajavaheapquickselectneetcode - →
NeetCode 150 in Java — Part 4: Linked List
Add Two Numbers, Copy List with Random Pointer, Find the Duplicate Number, and Reverse Nodes in k-Group. List arithmetic with carry, interleaved cloning, cycle detection on an array, and block-wise reversal.
dsajavalinked-listfast-slow-pointersneetcode - →
NeetCode 150 in Java — Part 3: Arrays, Two Pointers & Binary Search
Valid Sudoku, Trapping Rain Water, Time Based Key-Value Store, and Median of Two Sorted Arrays. Hashing grid constraints, two-pointer water, binary search over timestamps, and the log-time partition median.
dsajavaarraystwo-pointersbinary-searchneetcode - →
NeetCode 150 in Java — Part 2: Stack II & Sliding Window
Car Fleet, Largest Rectangle in Histogram, Sliding Window Maximum, and Permutation in String. More monotonic-stack power, plus the monotonic deque and fixed-window frequency matching.
dsajavastacksliding-windowmonotonic-stackneetcode - →
NeetCode 150 in Java — Part 1: Stack
Min Stack, Evaluate Reverse Polish Notation, Generate Parentheses, and Daily Temperatures. Augmenting a stack with extra state, evaluating postfix, backtracking with a stack of choices, and the monotonic stack.
dsajavastackmonotonic-stackneetcode - →
Blind 75 in Java — Part 19: Bit Manipulation
Sum of Two Integers, Number of 1 Bits, Counting Bits, Missing Number, and Reverse Bits. XOR as a difference detector, Kernighan's lowest-bit trick, and simulating addition with logic gates — closing out the Blind 75.
dsajavabit-manipulationxorblind75neetcode - →
Blind 75 in Java — Part 18: Dynamic Programming II
Longest Increasing Subsequence, Longest Common Subsequence, Word Break, Unique Paths, and Decode Ways. Subsequence DP, the 2D grid table, and reading a string as a sequence of DP decisions.
dsajavadynamic-programmingblind75neetcode - →
Blind 75 in Java — Part 17: Dynamic Programming I
Climbing Stairs, House Robber, House Robber II, Coin Change, and Jump Game. The 1D DP recurrences — plus the trick for turning a circular constraint into two linear passes.
dsajavadynamic-programminggreedyblind75neetcode - →
Blind 75 in Java — Part 16: Intervals
Insert Interval, Merge Intervals, Non-overlapping Intervals, and Meeting Rooms I & II. Almost every interval problem starts the same way: sort by an endpoint, then sweep once.
dsajavaintervalssortinggreedyblind75neetcode - →
Blind 75 in Java — Part 15: Graphs II (Union-Find & Topo Sort)
Number of Connected Components, Graph Valid Tree, Alien Dictionary, and Longest Consecutive Sequence. Union-Find for connectivity, and building a topological order from pairwise clues.
dsajavagraphsunion-findtopological-sortblind75neetcode - →
Blind 75 in Java — Part 14: Graphs I
Number of Islands, Clone Graph, Course Schedule, and Pacific Atlantic Water Flow. Grid DFS for components, hash-map cloning, cycle detection via topological sort, and multi-source reverse flooding.
dsajavagraphsbfsdfsblind75neetcode - →
Blind 75 in Java — Part 13: Backtracking & Trie
Subsets, Combination Sum, Word Search II, and Add and Search Words. The choose → explore → un-choose template, and pairing a Trie with DFS to search many words at once.
dsajavabacktrackingtrieblind75neetcode - →
Blind 75 in Java — Part 12: Trees III & Trie
Binary Tree Maximum Path Sum, Serialize and Deserialize Binary Tree, Construct Tree from Preorder & Inorder, and Implement Trie. Returning one value while updating a global, encoding structure, and the prefix tree.
dsajavatreestrieblind75neetcode - →
Blind 75 in Java — Part 11: Trees II (BFS & BST)
Binary Tree Level Order Traversal, Validate BST, Kth Smallest in a BST, and Lowest Common Ancestor of a BST. Level-order with a queue, and the BST invariant that makes in-order traversal come out sorted.
dsajavatreesbstbfsblind75neetcode - →
Blind 75 in Java — Part 10: Trees I
Invert Binary Tree, Maximum Depth, Same Tree, and Subtree of Another Tree. One recursive shape — solve the children, combine at the root — powers nearly every tree problem.
dsajavatreesrecursionblind75neetcode - →
Blind 75 in Java — Part 9: Linked List II & Heap
Reorder List, Merge K Sorted Lists, Top K Frequent Elements, and Find Median from Data Stream. Composing list primitives, and the priority-queue trio: k-way merge, top-K, and the two-heap median.
dsajavalinked-listheapblind75neetcode - →
Blind 75 in Java — Part 8: Linked List I
Reverse Linked List, Linked List Cycle, Merge Two Sorted Lists, and Remove Nth Node From End. The core toolkit: three-pointer reversal, Floyd's fast/slow, and the dummy head that erases edge cases.
dsajavalinked-listtwo-pointersblind75neetcode - →
Blind 75 in Java — Part 7: Matrix
Set Matrix Zeroes, Spiral Matrix, Rotate Image, and Word Search. Using the matrix itself as scratch space, walking shrinking boundaries, decomposing rotation into transpose + reverse, and backtracking over a grid.
dsajavamatrixbacktrackingblind75neetcode - →
Blind 75 in Java — Part 6: Strings & Stack
Valid Parentheses, Encode and Decode Strings, Longest Palindromic Substring, and Palindromic Substrings. A stack for matching, a length-prefix protocol for serialization, and expand-around-center for palindromes.
dsajavastringsstackblind75neetcode - →
Blind 75 in Java — Part 5: Arrays II (Prefix, Kadane, Rotated Search)
Product of Array Except Self, Maximum Subarray, Maximum Product Subarray, and Search in Rotated Sorted Array. Four array problems whose tricks — prefix/suffix passes, running extremes, and 'which half is sorted' — recur everywhere.
dsajavaarrayskadaneblind75neetcode - →
Blind 75 in Java — Part 4: Binary Search
Binary Search, Search a 2D Matrix, Koko Eating Bananas, and Find Minimum in Rotated Sorted Array. Once you can phrase a problem as 'find the boundary in a monotonic space,' you can halve it — even when there's no array to sort.
dsajavabinary-searchblind75neetcode - →
Blind 75 in Java — Part 3: Sliding Window
Best Time to Buy/Sell Stock, Longest Substring Without Repeating Characters, Longest Repeating Character Replacement, and Minimum Window Substring. Two pointers moving the same direction, expanding and shrinking a window over the data.
dsajavastringssliding-windowblind75neetcode - →
Blind 75 in Java — Part 2: Two Pointers
Valid Palindrome, Two Sum II, 3Sum, and Container With Most Water. When the data is sorted or symmetric, two indices walking toward (or with) each other beat a hash map on space and often on clarity.
dsajavaarraystwo-pointersblind75neetcode - →
Blind 75 in Java — Part 1: Arrays & Hashing
The first four problems every prep list opens with — Contains Duplicate, Valid Anagram, Two Sum, and Group Anagrams. The real lesson isn't the answers, it's learning to reach for a hash map the moment you see 'have I seen this before?'
dsajavaarrayshashingblind75neetcode - →
PostgreSQL Deep Dive — Storage, Indexing, Concurrency, and Scaling
How PostgreSQL actually works under the hood: heap file storage, MVCC, VACUUM, B-tree and GIN indexes, query planning, replication, partitioning, and the scaling limits you'll hit in production.
databasepostgresqlinternalsconcurrencyindexingscaling - →
MongoDB Deep Dive — Storage, Indexing, Concurrency, and Scaling
How MongoDB works: WiredTiger storage engine, document model, BSON, write concern, read concern, replica sets, sharding with consistent hashing, and the aggregation pipeline.
databasemongodbinternalsshardingreplicationindexing - →
Databases Interview Cheatsheet — PostgreSQL vs MongoDB vs Cassandra
Quick-revision guide covering everything that matters for database interviews: storage engines, consistency models, CAP positions, indexing, sharding, consistent hashing, Bloom filters, LSM trees, B-trees, failure modes, and system design decision framework.
databasepostgresqlmongodbcassandrasystem-designinterviewconsistent-hashinglsm-tree - →
Cassandra Deep Dive — Storage, Consistent Hashing, Compaction, and Scaling
How Cassandra achieves linear horizontal scalability: consistent hashing on the ring, the LSM tree storage engine, SSTables, Bloom filters, compaction strategies, tunable consistency, and the leaderless replication model.
databasecassandrainternalsconsistent-hashinglsm-treebloom-filtersscaling - →
LLM Agent Cost, Token & Latency Optimization — The Complete Production Guide
Everything that makes or breaks the business case for deploying a custom agentic solution: how costs compound in agent loops, the 8 optimization levers that matter, real numbers from DoorDash, Ramp, Airbnb, Care Access, and others — and how to build the ROI case for your organization.
llmagentscost-optimizationproductiontoken-efficiencyprompt-cachinglatency - →
The Complete LLM Evals Guide — Everything You Need to Know
A comprehensive, interview-ready guide to LLM evaluation: error analysis, dataset building, LLM-as-judge, code-based evals, agent evals, and real stories from DoorDash, GitHub, Asana, and others. Based on Hamel Husain, Eugene Yan, and Anthropic's published work.
evalsllmevaluationllm-as-judgeproductiontestingagents - →
Blog 14: Real-World RAG — Case Studies and Lessons from Production
What does RAG look like when it runs at real scale? Case studies from DoorDash, LinkedIn, Cloudflare, Cohere, and others — with the lessons that don't make it into the papers.
ragcase-studiesproductiondoordashlinkedin - →
Blog 13: Production RAG — Cost, Latency, Safety, and Observability at Scale
Getting a RAG prototype to work is easy. Running it in production at scale — with acceptable cost, latency, safety, and observability — is the hard part. This blog covers the levers that matter.
ragproductioncost-optimizationcachingobservabilitysecurity - →
Blog 12: Evaluation — Measuring Whether Your RAG Actually Works
You can't improve what you don't measure. RAG evaluation is a discipline in itself: building golden datasets, choosing metrics for retrieval and generation, running LLM-as-judge, and catching regressions before they ship.
ragevaluationragasllm-judgetesting - →
Blog 11: Advanced & Agentic RAG — Self-RAG, CRAG, GraphRAG, and Beyond
Beyond the basic retrieve-then-generate loop: adaptive retrieval that decides when and how to retrieve, graph-structured knowledge, multi-hop reasoning, and multi-vector representations — the techniques that unlock hard questions.
ragagentic-ragself-raggraphragcragraptor - →
Blog 10: Generation, Grounding & Citations — Taming Hallucination
Retrieval is half the battle. At generation time, answers must be grounded in retrieved context, cited to sources, and the system must know when to say 'I don't know' instead of hallucinating.
raggenerationgroundinghallucinationcitations - →
Blog 9: Retrieval & Re-ranking — Wide Net, Precise Cut
Naive top-k retrieval is fast but crude. Production RAG uses a two-stage pattern: retrieve wide with a bi-encoder for recall, then re-rank precise with a cross-encoder. Here's why and how.
ragretrievalre-rankingcross-encoder - →
Blog 8: Routing & Query Construction — When It's Not a Vector Problem
Most real company data lives in SQL warehouses and graph DBs, not just a pile of text. The senior insight: know when to embed and when to query. 'This is a SQL problem, not a vector problem' is one of the highest-value things you can say.
ragroutingtext-to-sqlquery-construction - →
Blog 7: Query Translation — Fixing Bad Queries Before Retrieval
Most retrieval failures are query problems, not index problems. Query translation rewrites or expands the question before it hits the retriever, bridging the vocabulary gap between user and document.
ragquery-translationretrievalhyde - →
Blog 6: Vector Stores & Similarity Search at Scale
Once chunks are embedded, you need somewhere to store them and a way to find the nearest ones — fast, across millions of vectors. This is what vector stores do, and how to choose one.
ragvector-storesannsimilarity-search - →
Blog 5: Embeddings — How Machines Map Language to Meaning
Embeddings are the core magic of semantic search — texts with similar meaning produce vectors that are close in space. Here's how they work, how to pick one, and what goes wrong.
ragembeddingsvector-searchsemantic-search - →
Blog 4: Chunking — The Most Underrated Decision in RAG
Chunking sounds trivial but it's one of the highest-leverage decisions in the whole pipeline. Get it wrong and retrieval is doomed no matter how good your embeddings are.
ragchunkingindexingembeddings - →
Blog 3: Document Ingestion & Parsing — Where RAG Really Lives or Dies
Parsing is the most important and least glamorous step in RAG. Bad parsing caps everything downstream. Here's what breaks, format by format, and how to handle it.
ragingestionparsingpdfocr - →
Blog 2: Tracing a Question Through a RAG System End-to-End
Follow a single query through every stage of a production RAG pipeline — from the moment a user types until they read a grounded, cited answer.
ragfoundationspipeline - →
Blog 1: What is RAG — The Open-Book Exam for AI
Large language models are brilliant students who've read everything — but they're taking a closed-book exam. RAG hands them the book. Here's why that changes everything.
ragfoundationsllm - →
Why India Doesn't Queue
A structural exploration of civic behavior in the world's largest democracy — why the same person who pushes at Mumbai's boarding gate waits quietly at Changi 90 minutes later.
societyindiacivicessay - →
On writing software
What it actually feels like to build things that work — and why that first Hello World still matters.
softwarecraft