 Command

Pranesh Nikhar's personal site. Vim-style keybinds for navigation; theme + font pickers below.

Theme
 Font Body Code
Reader
Keybinds
Navigation
j / ↓ Next item k / ↑ Previous item g First item in region G Last item in region zz Center focused item h / l Move left/right region ] / [ Next/previous heading } / { Next/previous block d / u Half-page down/up
Layout
<zh> / <zl> Toggle left/right sidebar <zr> Toggle reader view <zj> / <zk> Focus main/navbar <S-h/j/k/l> Focus left/main/navbar/right ⌃H / ⌃L Focus left/right sidebar ⌃J / ⌃K Focus main/navbar ⇧C / ⇧E Collapse / expand all sections
Dialogs
⌃P / : Command palette ⌃X Theme picker / Search ? Show keybinds Esc / ⌃C Close dialog
History
n Next document b Previous document ⌃O History back ⌃I History forward
 Search
about: Pranesh Nikhar about/more: 🪪 More docs/test: Docs Test ideas: 💡 Ideas more: ➕ More now: Now posts: 📬 Posts projects: 📚 Projects webtui: Style posts/agentic-eda: 📊 AgenticEDA — Automated Exploratory Data Analysis with LangGraph posts/cap-theorem-outage-story: 🌐 CAP Theorem with a Real Outage Story posts/codepilot: ✈️ CodePilot — From Requirements to Deployable FastAPI Backend posts/common-auth-mistakes: 🔐 Common Auth Mistakes Developers Make posts/compiled-vs-jit-vs-interpreted: ⚡ Why Is X Language Fast or Slow? — Compiled vs JIT vs Interpreted posts/cs-degree-gaps: 🎓 Things CS Degrees Don't Teach You posts/cve-2025-breach-analysis: 🛡️ CVE-2025 Breach Analysis — Midnight Blizzard and the 16 Billion Credential Leak posts/fixloop: 🔄 FixLoop — AI Agent Loop for Self-Correcting Code posts/functional-vs-oop: ⚡ Functional vs OOP — Same Problem, Both Ways posts/getman: 🦾 Getman — Declarative API Tester for CLI & TUI posts/how-compilers-optimize: ⚙️ How Compilers Actually Optimize Your Code posts/http3-quic: ⚡ HTTP/3 and QUIC — Why They Matter posts/leetcode-vs-engineering: 🧩 LeetCode vs Real Engineering Skills posts/llm-from-scratch: 🧠 LLM from Scratch — GPT-Style Transformer in PyTorch posts/lsm-trees-bloom-filters: 🌳 LSM Trees & Bloom Filters — Production Deep Dive posts/mcp-workflow-builder: 🔧 MCP Workflow Builder — Visual DAG for MCP Tools posts/persistent-memory: 🧠 Persistent Memory — Long-Term Memory for AI Agents via MCP posts/playcli: 🎬 PlayCLI — Terminal Video Player posts/postgres-mvcc: 🗄️ How PostgreSQL MVCC Works — Multi-Version Concurrency Control Deep Dive posts/raft-consensus: ⛵ Raft Consensus Algorithm Explained posts/rust-borrow-checker: 🦀 Rust Borrow Checker — Catches Real Bugs posts/titan: 🤖 Titan — Terminal AI Coding Agent posts/what-happens-url: 🌐 What Happens Between Typing a URL and Seeing the Page posts/what-happens-when-you-run-a-program: ⚙️ What Actually Happens When You Run a Program posts/zero-knowledge-proofs: 🔐 Zero-Knowledge Proofs Explained Simply webtui/components/accordion: Accordion webtui/components/badge: Badge webtui/components/button: Button webtui/components/checkbox: Checkbox webtui/components/dialog: Dialog webtui/components/input: Input webtui/components/popover: Popover webtui/components/pre: Pre webtui/components/progress: Progress webtui/components/radio: Radio webtui/components/range: Range webtui/components/separator: Separator webtui/components/spinner: Spinner webtui/components/switch: Switch webtui/components/table: Table webtui/components/textarea: Textarea webtui/components/tooltip: Popover webtui/components/typography: Typography webtui/components/view: View webtui/contributing/contributing: Contributing webtui/contributing/contributing: ## Local Development webtui/contributing/contributing: ## Issues webtui/contributing/contributing: ## Pull Requests webtui/contributing/style-guide: Style Guide webtui/contributing/style-guide: ## CSS Units webtui/contributing/style-guide: ## Selectors webtui/contributing/style-guide: ## Documentation webtui/installation/astro: Astro webtui/installation/astro: ## Scoping webtui/installation/astro: ### Frontmatter Imports webtui/installation/astro: ### ‹style› tag webtui/installation/astro: ### Full Library Import webtui/installation/nextjs: Next.js webtui/installation/vite: Vite webtui/plugins/plugin-dev: Developing Plugins webtui/plugins/plugin-dev: ### Style Layers webtui/plugins/plugin-nf: Nerd Font Plugin webtui/plugins/theme-catppuccin: Catppuccin Theme webtui/plugins/theme-custom: Custom Theme webtui/plugins/theme-everforest: Everforest Theme webtui/plugins/theme-gruvbox: Gruvbox Theme webtui/plugins/theme-nord: Nord Theme webtui/plugins/theme-vitesse: Vitesse Theme webtui/start/ascii-boxes: ASCII Boxes webtui/start/changelog: Changelog webtui/start/installation: Installation webtui/start/installation: ## Installation webtui/start/installation: ## Using CSS webtui/start/installation: ## Using ESM webtui/start/installation: ## Using a CDN webtui/start/installation: ## Full Library Import webtui/start/installation: ### CSS webtui/start/installation: ### ESM webtui/start/installation: ### CDN webtui/start/intro: Introduction webtui/start/intro: ## Features webtui/start/plugins: Plugins webtui/start/plugins: ## Official Plugins webtui/start/plugins: ### Themes webtui/start/plugins: ## Community Plugins webtui/start/theming: Theming webtui/start/theming: ## CSS Variables webtui/start/theming: ### Font Styles webtui/start/theming: ### Colors webtui/start/theming: ### Light & Dark webtui/start/theming: ## Theme Plugins webtui/start/theming: ### Using Multiple Theme Accents webtui/start/tuis-vs-guis: TUIs vs GUIs webtui/start/tuis-vs-guis: ## Monospace Fonts webtui/start/tuis-vs-guis: ## Character Cells
 Theme Current: Light j/k or ↑/↓ + Enter

🧩 LeetCode vs Real Engineering Skills

LeetCode measures pattern recognition and speed under pressure. Real engineering is about system design, debugging, communication, and trade-offs. Here is how to navigate both worlds.

🎯 The Great Interview Debate

“LeetCode is to engineering what spelling bees are to writing novels — related, but not the same.”

This quote captures the tension perfectly. Spelling bee champions know every obscure word in the dictionary. That’s useful for writing, but it doesn’t make you a novelist. Similarly, being able to invert a binary tree on a whiteboard doesn’t make you a great software engineer.

Yet the industry spends billions of hours on LeetCode-style interviews every year. Why? And what are we missing?


1️⃣ What LeetCode Actually Measures

LeetCode problems test a specific, narrow set of skills:

SkillWhat It TestsRelevance to Engineering
Pattern recognitionCan you spot that this is a sliding window problem?Moderate — helps with algorithmic thinking
Data structure fluencyDo you know when to use a HashMap vs a Trie?Moderate — occasionally useful
Speed under pressureCan you write correct code in 30 minutesLow — most engineering work is async and researched
Edge case thinkingDo you handle empty inputs, overflow, nulls?High — valuable everywhere
Working memoryCan you hold the problem + constraints in your head?Low — we use notebooks, docs, PR templates
CommunicationCan you explain your approach verbally?High — but LeetCode communication is artificial

What LeetCode DOES NOT Measure

Missing SkillWhy It Matters
System designReal systems have databases, caches, queues, load balancers, failures
Debugging existing codeMost engineering time is spent reading, not writing
Working with legacy systems90% of codebases are older than the engineers working on them
Cross-team communicationPR reviews, design docs, stakeholder discussions
Trade-off reasoning”It depends” is usually the correct answer
Testing instinctsWhat to test, what not to test, how to mock
Operational excellenceMonitoring, alerting, incident response, on-call
CI/CD fluencyShipping code is a pipeline, not a push
Code review etiquetteHow to give and receive constructive feedback
Estimation accuracyHow long will this actually take?

2️⃣ Why Companies Still Use LeetCode

If LeetCode is such a flawed signal, why does every company from startups to FAANG use it?

Reason 1: Standardized Signal at Scale

Google receives 3+ million applications per year. There is no way to give every candidate a realistic engineering task. LeetCode provides a standardized, zero-context, easily gradable signal. It’s the SAT of software engineering — imperfect but scalable.

Company Size   | Candidates/yr | Interview Method
Small startup  | <1,000        | Take-home project + pair programming
Mid-size       | 1,000–50,000  | LeetCode + system design
Large (FAANG)  | 50,000–3M+    | Multi-round LeetCode + system design + behavioral

Reason 2: Filtering by Preparation

Companies know that LeetCode problems don’t correlate perfectly with job performance. But they correlate with preparation. A candidate who studied 100 hours for interviews is likely serious about the job. It’s a proxy for determination and follow-through.

Reason 3: Avoiding False Positives

Engineering hires are expensive. A bad hire costs 6–12 months of salary in lost productivity, team morale damage, and recruiter fees. LeetCode problems have a low false-positive rate — it’s hard to accidentally solve a hard DP problem. Companies optimize for avoiding bad hires over finding every good one.

Reason 4: Status Quo

Everyone does it. Changing an interview process at a 50,000-person company takes years of data collection, cross-team buy-in, and retraining. Most companies never get past the data collection phase.


3️⃣ The Research: Do LeetCode Scores Predict Job Performance?

The evidence is mixed. A 2018 study by the National Bureau of Economic Research found that cognitive ability tests (which LeetCode approximates) predict job performance with r ≈ 0.3–0.5, but structured interviews and work-sample tests have higher validity (r ≈ 0.5–0.6).

MethodValidity (r)
Work sample tests0.54
Structured interviews0.51
Cognitive ability tests0.40
Unstructured interviews0.27
Years of experience0.18
Reference checks0.18
Education credentials0.10

The best signal is a work sample — give the candidate a realistic task similar to what they’d do on the job. But work samples don’t scale well. LeetCode is a second-best proxy that scales infinitely.


4️⃣ Strategies for Both Worlds

For LeetCode: Efficient Preparation

Treat LeetCode like SAT prep — a finite, learnable game:

Priority order for study:

1. Arrays & Strings (30% of interview problems)
2. HashMaps / Sets    (20%)
3. Trees & Graphs     (15%)
4. Two Pointers       (10%)
5. Dynamic Programming (10%)
6. Recursion / Backtracking (5%)
7. Heaps / Stacks     (5%)
8. Tries / Bit Manip  (3%)
9. Specialized (KMP, Dijkstra, Floyd's) (2%)

The 80/20 approach: Solve 2–3 problems per category until you can identify the pattern blind. Don’t memorize solutions — memorize pattern identification cues:

CuePattern
”Contiguous subarray”Sliding window
”Shortest path in grid”BFS
”All possible combinations”Backtracking
”O(log n) required”Binary search
”K smallest/largest”Heap
”Optimal substructure”DP
”Find cycles”Floyd’s / Union-Find

Timing yourself is the most overlooked skill. Set 25-minute timers for each problem. The ability to stop when the time is up and move on is more valuable than solving every problem.

For Real Engineering: Build

Real SkillHow to Build It
System designRead Alex Xu’s book, then design your own Twitter clone
DebuggingSpend time on an open-source project; fix actual bugs
Legacy codeContribute to a 10+ year old project (Linux, PostgreSQL, Git)
TestingWrite tests for every side project; break things on purpose
OperationsRun your own server, set up monitoring, handle an outage
Code reviewReview 10 PRs on open-source projects before writing your own
Trade-off thinkingWrite a design doc for every non-trivial feature you build

5️⃣ The Hot Take

Here’s the uncomfortable truth that nobody in the interview prep industry wants to admit:

LeetCode interviews select for people who are good at LeetCode interviews.

This is a distinct skill from software engineering. There is overlap — algorithmic thinking, edge-case reasoning, communication under pressure — but the correlation is weaker than we pretend.

The worst case is the LeetCode specialist: someone who has solved 800+ problems but has never maintained a production system, never debugged a segfault at 2 AM, never written a migration that touches 10 million rows without downtime. These engineers exist, and they often pass interviews easily.

The opposite case — the exceptional engineer who can’t pass LeetCode — also exists. These are the engineers who have designed systems serving billions of requests, mentored dozens of junior engineers, written libraries used by thousands of teams — but freeze when asked to implement LRU cache on a whiteboard. Many of them are unfairly filtered out.

What a Better System Looks Like

Stage 1: Take-home project (4 hours max)
  → Realistic, async, open-notes
  → Screens for: code quality, testing, architecture

Stage 2: System design (1 hour)
  → Evaluate: trade-off reasoning, communication, breadth

Stage 3: Pair programming (1 hour)
  → Work on the team's actual codebase
  → Evaluate: reading code, asking questions, collaboration

Stage 4: Behavioral / culture (1 hour)
  → Evaluate: conflict resolution, ownership, growth mindset

This system exists at some companies (Stripe, Basecamp, early Google). It produces better hires. But it requires more interviewer training and more time per candidate — luxuries most companies don’t have.


6️⃣ Practical Advice

If you’re a job seeker:

  1. Do 100–150 focused LeetCode problems, not 800 random ones. Target the patterns, not the number.
  2. Spend 70% of prep time on real engineering skills — build a project, contribute to open source, write docs.
  3. Practice explaining your thought process out loud, even when alone. Interviewers hire the person, not the code.
  4. Know your resume projects inside out — every trade-off, every failure, every alternative you considered.
  5. System design beats LeetCode at senior levels. At Staff+ and above, you’ll be asked about architecture, not algorithms.

If you’re a hiring manager:

  1. Calibrate your LeetCode bar to the role. Backend infrastructure engineers need more algorithmic depth than frontend engineers.
  2. Combine LeetCode with a work sample. A 30-minute pair programming session on your actual codebase is worth more than any number of whiteboard problems.
  3. Train your interviewers. Most interviewers are bad at evaluating candidates consistently. Invest in rubrics and calibration sessions.
  4. Consider async evaluations. Coding assessments that the candidate completes on their own time, with their own tools, produce less biased signals.

💡 Key Takeaways

  1. LeetCode measures pattern recognition and speed under pressure — real engineering is about trade-offs, communication, and operations
  2. Companies use LeetCode because it scales, not because it’s the best signal
  3. The correlation between LeetCode performance and job performance is modest (r ≈ 0.3–0.4)
  4. Work samples are the gold standard but don’t scale to millions of candidates
  5. Be honest about what the interview measures — and study accordingly without confusing the signal with the thing itself
  6. The best engineers are good at both — they can pass algorithmic screens AND design and ship real systems

LeetCode is a filter, not a destination. Solve enough to pass the gate, then focus your energy on the skills that actually matter.


📖 Series Navigation

 praneshnikhar.site / posts / leetcode-vs-engineering · Top 1:1