Why I Started
I’d been putting it off for months. Everyone in the dev community talks about LeetCode like it’s some rite of passage, and I kept telling myself I’d get to it after finishing the current project. Then I found NeetCode’s roadmap — a curated list of 150 problems that map to real patterns — and something clicked. I started the grind not because I had interviews lined up, but because I wanted to close the gap between the code I write at work and the code I knew I should be capable of writing.
The Patterns That Actually Clicked
The first few weeks were humbling. I’d spend 45 minutes on an “easy” problem, eventually look at the solution, and feel like I’d never seen this language before. But somewhere around week three, sliding window started to make sense. Then two pointers. Then I hit the trees section and everything slowed down again.
What changed things was tracking the pattern, not the problem. Instead of asking “how do I solve this,” I started asking “which pattern does this problem smell like?” A problem with a shrinking and growing range? Sliding window. Two arrays to compare element by element? Two pointers or a hash map. Once I started categorizing before coding, my solve rate went up noticeably and problems stopped feeling like puzzles dropped from nowhere.
What Daily Practice Taught Me About Discipline
The grind is less about intelligence and more about consistency. Doing one problem a day feels slow. Doing one problem a day for six months is 180+ problems and a muscle memory for pattern recognition that you simply cannot shortcut your way to. The discipline I built from this carries into everything else — the side projects I finish instead of abandon, the documentation I actually write instead of defer.
I also learned to be comfortable being stuck. That sounds small. But as a developer who prefers building to debugging, sitting with a problem for 20 minutes without progress used to feel like failure. Now it just feels like process. That reframe alone has made me a calmer engineer.
What I’d Do Differently
Less time re-solving problems I already understand. There’s a temptation to go back and polish solutions to problems you’ve already beaten, but that time is better spent on the next category you haven’t touched. I’d also start the dynamic programming section earlier — I avoided it because it felt abstract, but it’s one of the most pattern-able sections once you commit to it.
If you’re thinking about starting, use NeetCode’s roadmap and don’t grind random problems. The structure is the point.