When Does a Product Become Too Complex to Understand?

by

There is a point in every product's life where it crosses a threshold. The person who built it can still explain it. But the person who just joined cannot.

The complexity is not in the code. It is in the context. The decisions that were made. The compromises that were accepted. The edge cases that were built around. The technical debt that was deferred.

No one writes those down. They just become the way things are.

The threshold is crossed when the product can no longer be fully understood by one person. Not because the person is less capable. Because the product has absorbed too many decisions that no one remembers making.

That is when decisions start getting made with partial context. That is when the product becomes fragile. That is when fixing one thing breaks three others.

Here is what that feels like.

You add a new feature. It works in staging. It breaks in production. You spend two hours tracing the issue back to a decision made three years ago by someone who no longer works at the company. The decision was not documented. The decision was not communicated. The decision was just made.

You fix the issue. You move on. You do not document the fix. You do not update the architecture diagram. You do not write down why the decision was made in the first place.

The complexity compounds.

The product grows. The team grows. The documentation does not grow with it.

New people join. They ask why things are the way they are. The answer is always "that is how it has always been." No one knows why. No one knows if it is still the right way. No one wants to change it because no one knows what will break.

That is the threshold. The product is still working. The product is still shipping. But no one fully understands it anymore.

That is when the product becomes fragile. That is when every change becomes a risk. That is when the team starts spending more time fixing things than building things.

What it looks like in practice

The lost README. The onboarding document is three years old. It mentions services that no longer exist. It references workflows that have been rewritten twice. New hires spend the first two weeks asking "what is this thing?" and getting different answers from everyone.

The undocumented dependency. One part of the system relies on a specific version of a library that is no longer maintained. No one knows why. No one knows what happens if it is updated. So it stays.

The product roadmap is a graveyard. Features that were built and never launched. Features that were launched and never used. Features that were used and then quietly deprecated. No one removed them from the roadmap. No one updated the messaging.

The architecture diagram is a fossil. It shows the system as it was designed, not as it exists. The actual system has evolved in ways no one planned. The diagram is a museum piece.

The bug is "expected behavior." A user reports an issue. The team looks at it. They realize it has been broken for years. No one noticed because no one was using that feature. No one knows if it should be fixed or removed.

The meeting is a history lesson. Every planning session starts with a 30-minute explanation of why things are the way they are. The explanation is incomplete. The team nods. They move on. They know they are building on a foundation they do not fully understand.

How to prevent it

Write things down. Not everything. The things that matter. The decisions that were made. The tradeoffs that were accepted. The reasons why one path was chosen over another. Write them down while they are still fresh.

Review the documentation. Not once a year. Every quarter. Remove what is outdated. Add what is missing. Make sure the documentation reflects the current reality.

Kill the unused features. If a feature has not been used in six months, remove it. If it is used by one customer, ask them if they still need it. The complexity is not in the code. It is in the maintenance.

Ask the question. In every planning meeting, ask "why is it this way?" If no one can answer, that is a signal. The context has been lost. The product is becoming too complex to understand.

What I am curious about

What is the first sign you notice when a product is becoming too complex to understand?

Imed Radhouani
Founder & CTO – Rankfender

44 views

Add a comment

Replies

Be the first to comment