Filip ŠandaFilip Šanda·
Why your product fixes don't usually work

Why your product fixes don't usually work

You ship something, get signals that it's not quite right, try to find out why, and discover that nobody has a clean answer. Support saw something two weeks ago. The founder remembers a call. There's a note somewhere. An engineer built toward an assumption that turned out to be off.

So you spend a sprint fixing the fix. Then the same thing happens with the next one.

This is the pattern I see most often in lean product teams, and it's not a hiring problem or a process problem. It's a context problem. Customer understanding keeps getting rebuilt from scratch instead of accumulating. Every rebuild costs more than the last one, because the team is no longer only fixing the product. It is also fixing the decisions made without the full customer picture.

The specific moments where context bleeds out

Most teams know they have a handoff problem. What they don't see clearly enough is where, exactly, it happens.

The most expensive moment is when a pattern in support dies at the inbox. Three users hit a wall at the same step during setup. Each ticket gets resolved individually, correctly, and the underlying pattern never goes anywhere. Two weeks later someone notices a drop in activation and the team runs a discovery process that could have started the day the third ticket came in.

Close behind that: the brief written from memory. A PM who wasn't on the customer calls writes up a ticket based on what she remembers from a Slack thread. The engineer who picks it up has no way to know what got lost in translation. He builds something. It ships. It addresses a symptom. The metric barely moves.

And the quietest one: the founder insight that lives in a personal doc. Every founder I know has a doc — or a Notes app, or a Notion page — full of things customers said that felt important. Almost none of it connects to the actual work the team is doing. There's no negligence in that. There's just no natural place for it to go.

The result is that a six-person team might touch the same customer problem four or five times before it's actually understood, because each person is starting from a different fragment of the picture.

What a good ticket actually contains

The fastest lever most lean teams have isn't better tooling or a different sprint structure. It's brief quality.

Levels Health described this concretely: every vague or missing requirement costs the company roughly five to ten hours once you account for the full chain of clarification, rework, and recheck. Across a sprint, that compounds hard.

Basecamp formalized this into what they call a pitch. Before any feature enters development, someone writes a short document — not a requirements spec, a pitch — that contains five things: the problem in customer terms, the appetite (how much time the team is willing to spend, set before the solution is defined, not after), a proposed solution, the rabbit holes to avoid, and explicit no-gos. That last part is underrated. Stating what the fix will not do prevents scope from expanding during implementation without anyone noticing.

The pitch travels with the work. Developers can read why something matters and what's out of bounds before they decide how to build it. It's a big part of why a small team shipped and maintained a stable product for decades without the coordination overhead that usually comes with scale.

Before a ticket enters your sprint, it should answer:

  • Who is affected, and at which journey step?
  • What were they trying to accomplish?
  • Where exactly did they fail or hesitate?
  • What does success look like from their side?
  • What are we explicitly not doing in this fix?
  • What customer evidence is attached?

If any of those are blank, the ticket isn't ready. Send it back before it costs you a week of implementation pointed in the wrong direction. The sixth question — what evidence is attached — is the one most teams skip entirely, and it's the one that makes all the others meaningful.

What to actually automate — and how

Most teams think about automation too broadly. The useful question isn't "what can we automate?" but "what keeps getting reconstructed that shouldn't have to be?"

Surface repeating support patterns before someone notices them manually. In Intercom, create a saved view filtered by your setup-related tags or keywords — error message names, specific feature labels, step names you already use in your flow. Check it on a fixed cadence (Friday morning works), and if three or more conversations in the past seven days reference the same thing, route a summary to whoever owns that part of the product. Start doing this manually first. Automate it with a Zapier trigger only after the signal proves useful. The point isn't sophistication; it's that the pattern gets seen before it disappears into resolved tickets.

Tag dropout events against the last journey step the user reached. Fire a step_completed event in your analytics tool (Amplitude, Mixpanel, PostHog) at each meaningful step of your onboarding flow. Then create a cohort: users who fired step_completed for step X but did not return within 48 hours. That cohort is your dropout-at-step-X population. Review it weekly. Once you're looking at dropouts by step rather than a general "activation" metric, the conversations get specific fast — you stop debating whether onboarding is weak and start asking what happens after the data connection screen.

Attach evidence to tickets at the moment of creation, not after. When a journey step gets turned into a Linear or Jira ticket, paste the relevant support conversation links, the dropout cohort size, and any customer quotes directly into the ticket description before it gets assigned. This takes three minutes and removes an entire class of back-and-forth. I've seen teams build this exact loop between support tools and Linear: when a conversation is tagged as a bug or feature request, the issue gets created with the original conversation attached. The compounding effect is simple — fewer clarifying messages, fewer reconstructed briefs, fewer tickets built from memory.

Reflect shipped work back into the journey. Add one step to your definition of done: after a fix deploys, update the relevant step in your journey map or backlog with what changed and when. Teams that skip this end up re-investigating problems they've already addressed, because there's no record of what changed. Five minutes after deploy prevents a sprint of rediscovery two months later.

The thing automation can't do

A clean summary of customer signals is not the same thing as knowing what to do about them.

This sounds obvious until you're looking at a well-formatted AI digest of your support conversations and feeling like the work is mostly done. It isn't. The summary tells you what came in. It doesn't tell you whether this cohort of complainers represents your retained users or your churned ones, whether the friction is a UX problem or a product concept problem, or whether fixing it now is the right use of the next two weeks.

Those calls require judgment, and judgment requires reading the actual evidence. The most dangerous automation failure isn't a broken pipeline — it's a confident-looking output that makes a team feel informed when they're not. If your system produces a prioritized list of problems and nobody is asking "who said these things, and are they the customers we're trying to keep," the system is flattening exactly the uncertainty you need to reason about.

Automate the chain of custody. Don't automate the decision at the end of it.

Start with one step

Before picking the step to run this on, do the audit first.

Take your last five tickets that shipped but didn't move the metric they were supposed to move. For each one, write down what customer evidence was attached at the moment of writing — not in retrospect, not what you could have found, what was actually there when the ticket was created. Most teams find that two or three of those five had none. They were built on a PM's intuition, a founder's hunch, or an engineer's interpretation of a chart.

Once you've done that, you'll have a clear picture of where the leak is worst. Pick the journey step that generated the most unsubstantiated tickets, or the one with the highest dropout rate, and run the full loop on it for four weeks.

Set up the support filter for that step's keywords. Create the dropout cohort in your analytics. Make sure any ticket that touches that step has customer evidence attached before it enters the sprint. Update the journey note when something ships.

After four weeks, measure these specifically:

  • What percentage of tickets for that step had customer evidence attached before sprint start?
  • How many clarifying comments or questions did those tickets generate during implementation?
  • How long did it take from a repeated support pattern appearing to the product owner seeing it?
  • Did the same support issue reappear after shipping, or did the fix hold?
  • Did the dropout rate for that step move?

If the loop works for one step, you'll know how to extend it. If it doesn't, you'll know something specific about where the breakdown actually is — which is more useful than a vague sense that things aren't working.


That's the kind of loop Custory is built for: keeping customer signals attached to the journey step, the product decision, and the shipped fix. If you want a structured place to run this instead of rebuilding the context every sprint, give it a try.

Filip Šanda

Co-founder & CEO