Why Am I Bad at DSA

Why am I bad at DSA? You know the concepts but can't combine them. Learn the composition gap most courses skip and how to close it.

15 minutes
Easy
Beginner

What you will learn

Why knowing individual data structures doesn't translate to solving problems

What the composition gap is and why most courses never address it

How to reason about combining components for novel problems

The repeatable process for identifying bottlenecks and fixing them

Why design problems feel harder than topic-specific problems

How contextual interference builds flexible problem-solving skill

You understand hash maps. Linked lists make sense too. You can implement either one from scratch. Then a problem asks you to combine them into something you've never built before, and you're completely stuck. Not confused about the parts. Stuck on how the parts fit together. So you keep asking: why am I bad at DSA? The gap isn't talent. It's a missing skill that most courses never teach.

TL;DR
Most engineers struggle with DSA because they learn components (individual topics like arrays, hash maps, and trees) without learning composition (how to combine them for novel problems). You aren't bad at DSA. You were never taught the reasoning layer that connects simple parts into working solutions.

The Composition Gap Nobody Talks About

Every DSA course follows roughly the same format. Cover arrays, then hash maps, then linked lists, then trees. Each topic gets its own module, its own problems, its own explanations. You master each one in isolation, and the course marks it complete.

Then you hit a problem like LRU Cache. LRU Cache requires a hash map and a doubly linked list working together. Not side by side. Woven together. The hash map doesn't just store values. It stores pointers into the linked list so that a lookup can trigger a list reorder in O(1) time. The composition isn't obvious from understanding either component alone.

This is what trips up most engineers. They don't lack knowledge of the individual parts. They lack the composition reasoning that connects those parts into something new. Typical DSA courses cover what each part does. They don't cover how to decide which ones to combine, or how to wire them together when a problem demands it.

The result is a specific kind of frustration. You look at the solution afterward and think, "I knew all of these pieces." You did. The missing skill was never about the pieces.

“DSA difficulty isn't about understanding hard concepts. It's about combining simple ones in ways you weren't taught to think about.”
The composition gap

Why Individual Mastery Isn't Enough

What makes this invisible is that every checkpoint in typical DSA courses tests components, not composition. You finish the hash map module by solving hash map problems. You finish the linked list module by solving linked list problems. Every assessment confirms you've learned the parts.

But interviews don't test parts. They test assembly. Consider how the LRU Cache composition actually gets discovered. You start with the requirements: get and put in O(1), with eviction of the least recently used entry when capacity is full. A hash map gives you O(1) lookup. A doubly linked list gives you O(1) removal and insertion at both ends. Those are the components.

The composition question is: what operation is slow, and what fixes it? Looking up a node's position in the linked list is O(n). That's the bottleneck. A hash map fixes slow lookup. But the hash map can't just store values. It needs to store references to list nodes so that a get operation can jump directly to the right node and move it to the front. That's the composition step. It follows a learnable pattern: identify the bottleneck operation, pick the component that eliminates it, then connect them through shared references.

Most "hard" problems aren't introducing new concepts. They're asking you to compose familiar ones in a specific way. Once you see that, the difficulty rating starts to make more sense. Hard doesn't mean "requires advanced knowledge." It usually means "requires combining two or three simple parts that you've only ever used alone."

💡Key Insight
The question isn't "do you know enough components?" It's "can you reason about how they connect when a problem requires more than one?"

What Composition Reasoning Looks Like

Composition reasoning isn't a creative leap. It's a repeatable process that follows consistent steps, and it's trainable.

The pattern works like this across many multi-structure problems:

  1. 1Identify what's slow. What operation does the problem require that your initial approach can't do efficiently?
  2. 2Pick what fixes it. Which part handles that specific operation well?
  3. 3Define the connection. How do the two parts reference each other? What does one store that points into the other?
  4. 4Verify the composition. Does every required operation now hit the target complexity?

For LRU Cache, this produces: linked list handles ordering, hash map handles lookup, hash map values point to list nodes. Every required operation is O(1).

How composition reasoning changes the learning sequence
1
Master each component's core operations
What does it do well? What's expensive? Where does it break down?
2
Study common composition pairings
How do hash map + linked list, hash map + heap, and tree + array combinations work?
3
Practice the bottleneck question
Given a set of requirements, identify the slow operation and pick the component that fixes it.
4
Build composed solutions under constraints
Timed practice where the problem requires connecting two or more components from scratch.

On Codeintuition, problems are ordered so that you encounter composition naturally. You don't just learn a hash map in isolation and move on. You build toward problems where the hash map becomes one component of a larger whole. By the time you reach a composed problem, you've already practiced asking "what's slow?" and "what fixes it?" dozens of times.

⚠️ Warning
The composition gap stays hidden in typical practice because problems are categorized by single topics. A "hash map" problem never asks you to combine it with a linked list. A "linked list" problem never asks you to augment it with a hash map. You can pass every topic quiz and still lack the skill interviews actually test.

What Changes When You Learn to Compose

Without composition reasoning, design problems feel like they require creativity you don't have. You mentally flip through individual components, and none of them alone fits.

With it, you read the same requirements and see a composition question. What operations need to be fast? What component handles each one? How do they connect? The answer builds itself from the constraints.

Across 200,000+ submissions on Codeintuition, 58% of engineers who completed the learning path pass timed assessments. That's roughly triple the industry average. The gap isn't that these engineers are smarter. It's that they practiced assembling solutions from components instead of recalling solutions from memory.

Contextual interference, a principle from motor learning research, explains part of why interleaved composition practice works better than blocked topic practice. When you study hash maps on Monday and linked lists on Tuesday, each topic feels easy in isolation. When a Wednesday problem forces you to combine them, the interference between the two contexts is what builds the durable skill. It's harder during practice, but the retrieval pathways it creates are more flexible.

Where to Start

If you've been studying DSA topic by topic and wondering why novel problems still feel impossible, the diagnosis is probably simpler than you think. You've been building component knowledge when you needed to be building compositional thinking. For a complete framework on making this shift, see our guide on how to master DSA.

That doesn't mean starting over. It means adding the missing layer: practice that requires you to combine components, not just use them one at a time. There's a real question about whether composition reasoning can be self-taught through random practice. Some engineers do develop it that way over hundreds of problems. But the inefficiency is significant. Without explicit composition training, you're waiting for the insight to emerge from volume. With it, you're practicing the reasoning directly.

This Describes You
  • You understand individual components but can't combine them for new problems
  • "Design" problems feel like a completely different skill than "solve" problems
  • You can implement a hash map and a linked list but couldn't build an LRU Cache from scratch
  • You know what each component does but not when to reach for which one
  • You've felt like DSA requires creativity you don't have
This Doesn't Describe You

All items apply to you.

The free tier covers two complete courses where every problem builds on the previous one. Not as repetition, but as composition. By the end of the Arrays course, you're combining prefix sums with hash maps because you understand how each part contributes. That's the shift from component knowledge to compositional thinking. Start with 63 lessons, 85 problems, and 15 patterns for free.

You've been asking "why am I bad at DSA?" The better question: were you ever taught to compose? For most engineers, the answer is no. That's not a talent problem. It's a training problem with a concrete fix.

Do you want to master data structures?

Try our data structures learning path made of highly visual and interactive courses. Get hands on experience by solving real problems in a structured manner. All resources you would ever need in one place for FREE

Knowing individual components is one level of understanding. Interviews test composition, the ability to combine multiple parts into a solution for a problem you haven't seen. Most courses teach each topic in isolation and never train the reasoning layer that connects them. That composition gap is the most common reason engineers feel stuck despite having strong foundational knowledge.
Understanding how each component works and knowing how to combine them under novel constraints are two separate skills. A problem like LRU Cache requires a hash map and a doubly linked list woven together through shared references. You can perfectly understand both in isolation and still have no idea how to connect them, because that connection logic was never part of the training.
Train the composition step explicitly. For every multi-component problem, practice asking three questions: what operation is slow, what fixes it, and how do the parts reference each other? This turns design problems from creative leaps into repeatable reasoning exercises. Most engineers who add this step see measurable improvement within a few weeks of focused practice.
Completely normal. Typical DSA courses are organized by topic. Hash map problems test hash maps. Tree problems test trees. When a problem requires combining components, you're using a skill that was never directly practiced. The freeze isn't a sign of weakness. It's a predictable result of topic-isolated training.
Engineers who practice composition explicitly, working through problems that require combining multiple parts with guided reasoning, typically see a noticeable shift in 3 to 5 weeks of consistent study. The timeline depends more on how you practice than how many hours you spend. Attempting to compose a solution before reading the answer builds the skill faster than studying answers and trying to remember the combinations.
Prakhar Srivastava

Prakhar Srivastava

Engineering Manager@Wise

London, United kingdom

Was this helpful?