Tanya Donska

Sep 09, 2025 • 6 min read

Your Product Feels Complex? Give It a Spine

Modularity for teams that ship weekly, not quarterly.

Your Product Feels Complex? Give It a Spine

I've watched so many founders tie themselves in knots over this. "Our product is getting too complex," they'll say, usually right after adding their fifth different way to create something or their third inconsistent confirmation dialog.

But here's what I've learned: you don't have a "too complex" product. You have a product that behaves differently in too many places. That's not complexity—that's just a lack of structure.

And honestly? It's way easier to fix than you think.


What People Really Mean by "Complex"

When someone tells me their product feels complex, I dig a little deeper. They almost never mean the underlying logic is impossible to understand. What they actually mean is:

  • Every new feature takes forever because we keep reinventing wheels

  • Nothing feels connected—it's like five different apps glued together

  • Users constantly ask us how to do basic things

  • Our support team is drowning in "how do I...?" tickets

That's not complexity. That's confusion. And confusion happens when your product doesn't have a consistent personality.

The Modularity Thing Everyone Gets Wrong

I see teams getting intimidated by the word "modular" like they need to build some massive design system before they can ship anything. That's not what I'm talking about.

At your stage, modular just means your product acts the same way when people are doing familiar things:

  • Adding something new

  • Editing or deleting what they made

  • Fixing a mistake

  • Understanding what happens next

When those moments feel consistent, users relax. They don't need a tour of every screen because they recognize the patterns. They just get on with their work.

How I Know You're in Trouble

I can usually spot this problem within five minutes of using someone's product:

  • The same interaction works completely differently in three places

  • Button labels change mid-flow ("Save" becomes "Update" becomes "Confirm")

  • Error messages range from helpful to utterly cryptic depending on where you are

  • The team keeps rebuilding the same functionality because they forgot they already solved this problem

None of this means your product is too ambitious. It just means you haven't given it a backbone yet.

Think Flows, Not Screenshots

This is where most teams go wrong. They design one screen at a time, trying to make each one perfect in isolation. Then they string them together and wonder why the journey feels disjointed.

I always tell people: a button isn't a pattern. A flow is.

Instead of designing screens, design around the outcomes people are trying to achieve:

  • Adding something: What's the fastest path from intent to creation?

  • Confirming an action: When do we interrupt someone's flow to double-check, and how do we ask?

  • Success states: What's the obvious next step after someone accomplishes something?

  • Errors: What went wrong, what should they do about it, and what won't they lose in the process?

Once you nail those core flows, your individual components have a clear job to do. They stop being random interface parts and start being a cohesive toolkit.

The Power of Consistent Language

This one drives me crazy because it's so fixable, yet I see it everywhere.

If you call the same concept a "workspace" in your navigation, a "project hub" in your onboarding, and a "dashboard" in your help docs, you're making users do translation work in their heads. Pick one name. Stick with it everywhere.

The ripple effects are immediate:

  • Navigation becomes self-explanatory

  • Empty states stop being apologetic and start being educational

  • Your support team spends less time figuring out what customers actually mean

How Design and Dev Should Actually Work Together

You don't need some elaborate design system documentation that nobody reads. You need lightweight, regular communication:

  • Keep a small set of shared components in Figma that actually match what's in your codebase

  • Put usage notes right next to the components, not buried in some wiki

  • Spend 30 minutes every week walking through what actually shipped, not what you designed

That's enough structure to prevent accidental reinvention without slowing anyone down.

What Changes When You Get This Right

Everything gets faster:

  • New features are composed from moves your users already know, not invented from scratch

  • Users trust unfamiliar screens because they feel like family, not strangers

  • You spend time on actual product decisions instead of endless layout debates

Even the arguments shrink. "Should the cancel button be on the left or right?" stops being a meeting topic because your product established that convention months ago and has been teaching users ever since.

Where People Usually Mess Up

I've seen teams make the same mistakes over and over:

Scaling a broken pattern: If your confirmation dialogs are confusing, making them consistently confusing everywhere doesn't help. Fix the pattern first, then propagate it.

Confusing minimal with modular: Stripping everything down to bare bones doesn't create clarity—it removes helpful guidance. Keep the hints and cues; just make them predictable.

Thinking documentation equals understanding: You can write the most beautiful style guide in the world, but if your team never talks and your code ignores the rules, it's just expensive fiction. Modularity is a practice, not a document.

Aim for Predictable, Not Identical

I tell people to think about their favorite restaurant. The menu might change seasonally, the specials are different every day, but something about the experience feels consistently "them." Same energy, same attention to detail, same personality.

That's what you want. Deleting something should work the same way everywhere—not because some design system mandates it, but because consistency builds user confidence. Your interface copy should sound like the same person wrote it, whether it's a success message or an error state.

Predictability reduces mental effort, which is just a fancy way of saying people can focus on their actual goals instead of figuring out how your interface works.

How to Start (This Week)

Keep it stupidly small. You can make real progress in a week:

  • Pick one messy user flow. Make it work consistently from start to finish.

  • Choose your standard "add new item" pattern. Use it in two places.

  • Standardize how confirmations and undo work. Ship them in three different features.

  • Find one object you call by multiple names. Pick the best name and change it everywhere else.

  • Have a designer and developer sit together for two hours. Replace a collection of one-off buttons with one proper component.

Then watch the metrics you already track. Fewer support tickets about basic functionality. Users completing flows faster. Less clicking around looking for things. If those numbers improve, keep going.

The Thing Everyone Misses

Most early-stage teams don't need a Design System with capital letters. They need a product that feels like it knows what it is.

Give your product a spine:

  • Consistent flows for common actions

  • Consistent language for common concepts

  • Consistent communication between the people building it

Do that and your app starts feeling simpler, shipping faster, and adapting to change without breaking. The problem was never that your product was too complex. The problem was noise. Remove the noise, and suddenly that word "complex" just... disappears from conversations.

And honestly? That's when the real work begins. Because once your product has a clear personality, you can focus on making it do more interesting things instead of just trying to make it make sense.

Join Tanya on Peerlist!

Join amazing folks like Tanya and thousands of other builders on Peerlist.

peerlist.io/

It’s available... this username is available! 😃

Claim your username before it's too late!

This username is already taken, you’re a little late.😐

1

3

0