The Hidden Cost of Product Decisions: Understanding Product, Tech, and Design Debt

Gabbie Hajduk
[
  {
    "__component": "shared.rich-text",
    "id": 325,
    "body": "## Introduction: Why Product Debt Deserves Its Own Spotlight\n\nIn the fast-paced world of product development, we talk a lot about technical debt. Some teams even track design debt. But one type of debt is rarely discussed - despite quietly dragging down product velocity and user experience: **product debt**.\n\nHaving worked primarily in startups, I've seen how quickly all three forms of debt accumulate. By year one, it's usually everywhere - not out of negligence, but necessity. When speed is your only edge over bigger players, you make trade-offs. You ship without perfect UAT. You skip the onboarding flow redesign. You go live with the duct-taped version just to hit your milestone. These decisions might feel small in the moment, but they stack up. This blog is about naming that pile, understanding it, and knowing what to do about it.\n\n### The Three Core Debts in Product Development\n\nLet's break down the three primary types of development debt - what they are, what causes them, and who should ultimately be responsible for addressing them.\n\n#### 1. **Technical Debt: The Cost of Expedience in Code**\n\nTechnical debt refers to code that's messy, outdated, or structured in a way that slows future work. It's often created on purpose - a shortcut to ship something fast - but just as often, it's a result of evolving architecture, skill gaps, forgotten best practices, or a natural reaction to changing times and new technologies. Sometimes, the tools or approaches used when a product was first built no longer align with today's needs, and that gap becomes debt over time.\n\n*Example:* While skipping writing tests or documentation is one classic example, a more common one I've encountered is having to maintain or rebuild large portions of a website because of shifts in frameworks and technologies. For instance, we moved from Angular to React to improve performance and usability - a necessary evolution, but one that instantly rendered large parts of the old codebase burdensome. Even adding a simple field became an ordeal if it touched areas that hadn't yet been migrated.\n\n**Noticed by:** Engineers\\\n**Owned by:** PM and Tech Lead jointly - because while devs experience it, PMs have to make space for fixing it.\n\n#### 2. **Design Debt: The Frayed Fabric of UX**\n\nDesign debt is the inconsistency, confusion, and friction that builds up in your product's interface and experience. It comes from rushed design, lack of systems, poor handoffs, or ignoring usability feedback.\n\n*Example:* A button that looks different on every page. A dropdown with ten options where three would do. An account settings page that still follows the old layout from 2019.\n\n**Noticed by:** Designers and Product Teams - though in startups, this often only becomes clear once a dedicated designer joins and begins flagging inconsistencies and usability issues the team had grown blind to. Many startups try to save costs early on by skipping in-house design skills, unknowingly racking up design debt that only surfaces later.\n\n**Owned by:** Product and Design together - but a good PM should stay on top of this or at least track it. They should be actively using the product, spotting rough edges, and logging areas that need UX improvement, just like they would for bugs or feature requests.\n\n#### 3. **Product Debt: The Bloat of Misaligned Value**\n\nProduct debt is the accumulation of functionality, features, or decisions that no longer serve the product's core purpose or strategy. It can take many forms - from building features users don't need, to half-implemented ideas that never get refined, or holding onto outdated flows because no one's sure what's safe to remove. Unlike tech or design debt, which is usually easier to spot through code quality or UI inconsistencies, product debt is more insidious - it creeps in through misalignment and inertia.\n\nYou might build something with good intent, but if it's not validated, maintained, or eventually retired, it becomes clutter. Sometimes product debt is caused by stakeholder pressure, rushed pivots, or unproven bets that stick around long after their usefulness fades. It's also shaped by market changes - new competitors, shifting user expectations, or internal strategy changes that make once-useful features obsolete.\n\n*Example:* Features added for one enterprise client that no longer pays. A quote engine no one uses. A tagging system launched before understanding how customers think about organisation. A flow built for desktop when most traffic has shifted to mobile.\n\n**Noticed by:** Often highlighted through data analysis or usage patterns - a drop in feature adoption, a sudden churn spike, or low engagement in specific flows. In my experience, these insights often surface first during feature analysis, sprint retros, or even organically from developers during refinement sessions. While PMs *should* be noticing it, it's frequently the result of someone in the scrum team - be it the developer, analyst, or the PM - connecting the dots during a conversation or a piece of analysis.\n\n**Owned by:** Product Manager - fully. Only the PM can make the call on whether something still aligns to product vision, and they must be vigilant in identifying what no longer belongs.\n\n### How Product Debt Forms (And What It Looks Like)\n\nProduct debt often starts with good intentions. You want to say yes to a client. You want to test a new idea quickly. You want to move fast. But without strategic checks, those good intentions turn into clutter.\n\nOne of the most common patterns I've seen is trying to please everyone - every stakeholder, every department, every type of user. You say yes to all of them and end up with a bloated, inconsistent product that satisfies no one particularly well.\n\nAnother culprit? Unvalidated assumptions. For example, we once created an incredibly powerful internal search engine that processed every itinerary we'd ever sold into a searchable library. It was designed to help sales agents quickly find and reuse high-quality templates using detailed criteria. I thought it was brilliant - and I personally loved using it. But it turned out the users didn't. They found their own workaround by creating fake customer profiles (like 'Bora Bora Template') and attaching itineraries directly to them. Despite constant improvements, the tool was never adopted. It became a graveyard of product debt - smart in theory, but disconnected from how people actually worked.\n\nThis wasn't just a case of underused functionality. When we transitioned to a new tech stack, we had to rebuild the entire tool - a process that took over a month of development time. The tool had always been technically challenging to maintain due to its speed and complexity, requiring developer upskilling just to support it. And most frustratingly, we never truly uncovered what users needed instead. We had a great feature - but not the right solution.\n\nA similar thing happened with a marketing reporting suite we built. We thought we were solving the pain of manual data entry, so we replicated their Excel spreadsheet with automated inputs. But the team didn't use our tool - they continued with Excel. It turned out their goal wasn't just to enter less data - it was to draw insights. They wanted to analyse trends and identify target groups for ad campaigns. Our solution didn't solve that. In fact, it added a step to their workflow: they had to export our report and continue their process manually. Despite how polished and accurate it was, it created friction, not value.\n\nThe root cause? We didn't correctly define what success meant for the user. We assumed success was saving time on data entry, but for them, success was enabling better strategic decisions. Without understanding that, we optimised the wrong thing.\n\nUnlike technical bugs or visual mismatches, product debt often feels harmless - until it compounds. It leads to harder onboarding, lower retention, and limits your ability to evolve the product.\n\n### The Real-World Cost of Development Debt"
  },
  {
    "__component": "shared.media",
    "id": 45,
    "file": {
      "id": 110,
      "documentId": "itd5b7cgplbxzp3g6opo7aqr",
      "name": "new-hire-library-product-debt-onboarding.png",
      "alternativeText": "Stressed person reading in a library surrounded by books labelled with system parts.",
      "caption": null,
      "width": 1536,
      "height": 1024,
      "formats": {
        "thumbnail": {
          "ext": ".png",
          "url": "https://res.cloudinary.com/dmkbljcg2/image/upload/v1746130572/thumbnail_new_hire_library_product_debt_onboarding_404bf63c43.png",
          "hash": "thumbnail_new_hire_library_product_debt_onboarding_404bf63c43",
          "mime": "image/png",
          "name": "thumbnail_new-hire-library-product-debt-onboarding.png",
          "path": null,
          "size": 52.93,
          "width": 234,
          "height": 156,
          "sizeInBytes": 52931,
          "provider_metadata": {
            "public_id": "thumbnail_new_hire_library_product_debt_onboarding_404bf63c43",
            "resource_type": "image"
          }
        }
      },
      "hash": "new_hire_library_product_debt_onboarding_404bf63c43",
      "ext": ".png",
      "mime": "image/png",
      "size": 575.22,
      "url": "https://res.cloudinary.com/dmkbljcg2/image/upload/v1746130573/new_hire_library_product_debt_onboarding_404bf63c43.png",
      "previewUrl": null,
      "provider": "cloudinary",
      "provider_metadata": {
        "public_id": "new_hire_library_product_debt_onboarding_404bf63c43",
        "resource_type": "image"
      },
      "createdAt": "2025-05-01T20:16:13.764Z",
      "updatedAt": "2025-05-01T20:16:13.764Z",
      "publishedAt": "2025-05-01T20:16:13.764Z"
    }
  },
  {
    "__component": "shared.rich-text",
    "id": 326,
    "body": "Let's paint a picture.\n\nA new hire joins your team. They're assigned a task related to the quoting engine - a core part of your system that's been growing for years. What started as a relatively focused feature has become a sprawling, complex tool, touched by nearly every area of the broader system. Features have been added monthly since its initial launch, and much of the original vision is buried beneath layers of additions and modifications.\n\nAs they begin onboarding, it quickly becomes clear just how fragile and intertwined this part of the product has become. Changing something elsewhere - even something small - risks breaking quoting logic. The new developer needs lots of handholding. Documentation is incomplete or outdated. So, instead of distributing tasks evenly, your team tends to assign quoting engine work to the few developers who've worked with it the longest. Even a task as seemingly simple as adding a new field goes to someone familiar with its quirks, just to avoid delays or bugs.\n\nI even had a PM join my team that I hoped could take over this part of the product so I could focus on more strategic work as a CPO. But I quickly realised I couldn't hand it off. It was too complex, too intertwined, and full of edge cases only I really understood. They constantly needed support, and when they presented a solution, I'd spot critical gaps simply because I knew the system's history inside out. In the end, I reassigned them to a simpler area of the product so they could make progress without needing me every step of the way. That's how debt locks knowledge into individuals and limits scalability.\n\nThis is what deeply embedded technical and product debt looks like. Not just bad code, but a whole area of your product that feels unsafe to touch - and almost impossible to hand over.\n\nThat's the cost of **product debt**, **tech debt**, and **design debt** working together - and dragging your team down.\n\n### How to Spot Debt Before It Buries You\n\nYou don't need fancy tools to spot debt. You just need to listen:\n\n-   The data is telling you something - when you monitor user flows, you notice features aren't being used as intended, or not at all.\n\n-   Your team avoids touching certain areas of the code.\n\n-   Users are telling you things are too complex - either through direct feedback or via drop-off in key flows.\n\n-   Product strategy sessions devolve into blockers caused by existing debt: \"we can't do that because it touches a fragile legacy system,\" or \"it would take too long to refactor this area first.\"\n\nWe faced a situation where we were constantly adding to the sales quoting system for the post-sales teams, expanding it far beyond its original purpose. Over time, it had to serve four different teams - each with different, often conflicting needs. This ballooning complexity was clearly product debt, but it became more than that. It started actively impacting the business's ability to function smoothly. We knew we had to bite the bullet, so we roadmapped a 3-6 month project to rebuild the entire system properly. It was no longer just legacy clutter - it was blocking day-to-day operations.\n\n### How to Manage Product, Tech, and Design Debt Without Losing Momentum\n\nHere are several strategies I've used across teams to manage debt without stalling delivery:\n\n1. **Post-feature cleanup sprints:** After delivering a major feature, we'd deliberately shift gears. We'd block 1-2 sprints to clear out product and design debt - small tickets, UX polish, revalidating older features. The dev team would simultaneously plan tech clean-up tasks. It was a reset, and everyone bought into it.\n\n1. **Incremental refactors during big transitions:** During a major system architecture transition, we implemented a rule: if you touched any part of the legacy system, you updated it to follow the new structure. Even small tasks - like adding a single field - required modernising the surrounding code. This rule helped us chip away at accumulated debt continuously, without needing to stop feature development entirely.\n\n1. **Capture tech debt as soon as it's mentioned:** If the CTO or any developer said (even in passing) that a piece of tech debt needed attention, I would create a ticket almost verbatim from what they said and add it to the backlog. Even if I didn't fully understand it, it ensured we wouldn't lose the signal. We'd then discuss it during prioritisation - about half of those items got done that quarter, and the other half were later deprioritised or made irrelevant.\n\n1. **Roadmap major product debt items:** If a product debt item was significant enough, we didn't treat it as background noise - we roadmapped it properly. This gave it visibility and accountability, allowed teams to estimate it, and helped us consider its impact alongside other product priorities. Sometimes this surfaced deeper root issues and even shaped broader initiatives.\n\n1. **Preserve unshipped \"nice-to-haves\":** Often, design tweaks or UX polish items would be cut during scope alignment. Instead of losing them, I created separate tickets for each - e.g., \"Dropdown options should follow logical user order.\" These would sit in the backlog and get picked up in cleanup sprints or when developers had free capacity.\n\n1. **Spot visual or UX inconsistencies in the wild:** If I noticed something on the website or app that didn't align with our design system - even if it was small like spacing or alignment - I created a ticket. It helped us gradually chip away at design debt.\n\n1. **Track product debt like any other feature gap:** For features that were bloated, underused, or built without full validation, we created product debt tickets and tracked them alongside other product work.\n\nThe last three of these types of tickets - design polish, visual consistency, and product debt - were ideal for quick wins. We could often knock out 10-20 of them in just a couple of days with a developer who was waiting on a dependency or had a short gap between larger tasks.\n\nPMs need to appreciate tech debt - not ignore it. I've worked with PMs who acted like it wasn't their problem. But it is. If you're prioritising based only on user impact or feature value and ignoring the cost of working with brittle foundations, you're quietly letting your velocity die. Just because we don't *define* tech debt doesn't mean we aren't impacted by it.\n\nThe same goes for product debt - it needs to be visible to be managed. One simple strategy is to track product debt in the same systems you use for everything else. Create a dedicated epic for major product debt themes, and tag individual tickets with labels like \"product-debt\" so they're easy to group and prioritise later. Whether you use Jira, Trello, Notion, or even Google Sheets, the key is to make it tangible - and therefore accountable. Once it's in your system, you can size it, plan it, and most importantly, discuss it.\n\n### Why This All Changes Depending on Your Company Size\n\nIn early-stage startups, some debt is inevitable - even strategic. You don't need perfect tests or a polished UI when you're still finding product-market fit. Speed is the priority.\n\nBut as you grow, the burden increases. Scale-ups start feeling the friction - bloated features, inconsistent design, and technical decisions that no longer scale. You can't just ignore it anymore. Enterprises? They're often swimming in legacy debt, and their challenge is managing it without grinding innovation to a halt. In fact, we know of large governmental organisations where only a handful of developers can still maintain critical systems - simply because the code is written in outdated languages or frameworks that very few people still know. That kind of dependency is a direct consequence of tech debt left unresolved for too long.\n\nWherever you are, your approach to debt has to evolve.\n\n### Final Thoughts: Debt Isn't the Problem - Silence Is\n\nDebt isn't inherently bad. Sometimes it's the right call. But ignoring it? That's what kills teams.\n\nProduct Managers need to own product debt - and help their teams navigate design and technical debt, too. Your roadmap should include clean-up and refactoring, not just net-new. You should know the cost of the clutter you're carrying. And you should have a system - whether formal or scrappy - to review, reframe, and (when needed) ruthlessly remove the things that no longer serve your product's vision.\n\nBecause in the end, sustainable product development isn't just about what you add - it's also about what you let go of."
  }
]

Introduction: Why Product Debt Deserves Its Own Spotlight

In the fast-paced world of product development, we talk a lot about technical debt. Some teams even track design debt. But one type of debt is rarely discussed - despite quietly dragging down product velocity and user experience: product debt.

Having worked primarily in startups, I've seen how quickly all three forms of debt accumulate. By year one, it's usually everywhere - not out of negligence, but necessity. When speed is your only edge over bigger players, you make trade-offs. You ship without perfect UAT. You skip the onboarding flow redesign. You go live with the duct-taped version just to hit your milestone. These decisions might feel small in the moment, but they stack up. This blog is about naming that pile, understanding it, and knowing what to do about it.

The Three Core Debts in Product Development

Let's break down the three primary types of development debt - what they are, what causes them, and who should ultimately be responsible for addressing them.

1. Technical Debt: The Cost of Expedience in Code

Technical debt refers to code that's messy, outdated, or structured in a way that slows future work. It's often created on purpose - a shortcut to ship something fast - but just as often, it's a result of evolving architecture, skill gaps, forgotten best practices, or a natural reaction to changing times and new technologies. Sometimes, the tools or approaches used when a product was first built no longer align with today's needs, and that gap becomes debt over time.

Example: While skipping writing tests or documentation is one classic example, a more common one I've encountered is having to maintain or rebuild large portions of a website because of shifts in frameworks and technologies. For instance, we moved from Angular to React to improve performance and usability - a necessary evolution, but one that instantly rendered large parts of the old codebase burdensome. Even adding a simple field became an ordeal if it touched areas that hadn't yet been migrated.

Noticed by: Engineers
Owned by: PM and Tech Lead jointly - because while devs experience it, PMs have to make space for fixing it.

2. Design Debt: The Frayed Fabric of UX

Design debt is the inconsistency, confusion, and friction that builds up in your product's interface and experience. It comes from rushed design, lack of systems, poor handoffs, or ignoring usability feedback.

Example: A button that looks different on every page. A dropdown with ten options where three would do. An account settings page that still follows the old layout from 2019.

Noticed by: Designers and Product Teams - though in startups, this often only becomes clear once a dedicated designer joins and begins flagging inconsistencies and usability issues the team had grown blind to. Many startups try to save costs early on by skipping in-house design skills, unknowingly racking up design debt that only surfaces later.

Owned by: Product and Design together - but a good PM should stay on top of this or at least track it. They should be actively using the product, spotting rough edges, and logging areas that need UX improvement, just like they would for bugs or feature requests.

3. Product Debt: The Bloat of Misaligned Value

Product debt is the accumulation of functionality, features, or decisions that no longer serve the product's core purpose or strategy. It can take many forms - from building features users don't need, to half-implemented ideas that never get refined, or holding onto outdated flows because no one's sure what's safe to remove. Unlike tech or design debt, which is usually easier to spot through code quality or UI inconsistencies, product debt is more insidious - it creeps in through misalignment and inertia.

You might build something with good intent, but if it's not validated, maintained, or eventually retired, it becomes clutter. Sometimes product debt is caused by stakeholder pressure, rushed pivots, or unproven bets that stick around long after their usefulness fades. It's also shaped by market changes - new competitors, shifting user expectations, or internal strategy changes that make once-useful features obsolete.

Example: Features added for one enterprise client that no longer pays. A quote engine no one uses. A tagging system launched before understanding how customers think about organisation. A flow built for desktop when most traffic has shifted to mobile.

Noticed by: Often highlighted through data analysis or usage patterns - a drop in feature adoption, a sudden churn spike, or low engagement in specific flows. In my experience, these insights often surface first during feature analysis, sprint retros, or even organically from developers during refinement sessions. While PMs should be noticing it, it's frequently the result of someone in the scrum team - be it the developer, analyst, or the PM - connecting the dots during a conversation or a piece of analysis.

Owned by: Product Manager - fully. Only the PM can make the call on whether something still aligns to product vision, and they must be vigilant in identifying what no longer belongs.

How Product Debt Forms (And What It Looks Like)

Product debt often starts with good intentions. You want to say yes to a client. You want to test a new idea quickly. You want to move fast. But without strategic checks, those good intentions turn into clutter.

One of the most common patterns I've seen is trying to please everyone - every stakeholder, every department, every type of user. You say yes to all of them and end up with a bloated, inconsistent product that satisfies no one particularly well.

Another culprit? Unvalidated assumptions. For example, we once created an incredibly powerful internal search engine that processed every itinerary we'd ever sold into a searchable library. It was designed to help sales agents quickly find and reuse high-quality templates using detailed criteria. I thought it was brilliant - and I personally loved using it. But it turned out the users didn't. They found their own workaround by creating fake customer profiles (like 'Bora Bora Template') and attaching itineraries directly to them. Despite constant improvements, the tool was never adopted. It became a graveyard of product debt - smart in theory, but disconnected from how people actually worked.

This wasn't just a case of underused functionality. When we transitioned to a new tech stack, we had to rebuild the entire tool - a process that took over a month of development time. The tool had always been technically challenging to maintain due to its speed and complexity, requiring developer upskilling just to support it. And most frustratingly, we never truly uncovered what users needed instead. We had a great feature - but not the right solution.

A similar thing happened with a marketing reporting suite we built. We thought we were solving the pain of manual data entry, so we replicated their Excel spreadsheet with automated inputs. But the team didn't use our tool - they continued with Excel. It turned out their goal wasn't just to enter less data - it was to draw insights. They wanted to analyse trends and identify target groups for ad campaigns. Our solution didn't solve that. In fact, it added a step to their workflow: they had to export our report and continue their process manually. Despite how polished and accurate it was, it created friction, not value.

The root cause? We didn't correctly define what success meant for the user. We assumed success was saving time on data entry, but for them, success was enabling better strategic decisions. Without understanding that, we optimised the wrong thing.

Unlike technical bugs or visual mismatches, product debt often feels harmless - until it compounds. It leads to harder onboarding, lower retention, and limits your ability to evolve the product.

The Real-World Cost of Development Debt

Let's paint a picture.

A new hire joins your team. They're assigned a task related to the quoting engine - a core part of your system that's been growing for years. What started as a relatively focused feature has become a sprawling, complex tool, touched by nearly every area of the broader system. Features have been added monthly since its initial launch, and much of the original vision is buried beneath layers of additions and modifications.

As they begin onboarding, it quickly becomes clear just how fragile and intertwined this part of the product has become. Changing something elsewhere - even something small - risks breaking quoting logic. The new developer needs lots of handholding. Documentation is incomplete or outdated. So, instead of distributing tasks evenly, your team tends to assign quoting engine work to the few developers who've worked with it the longest. Even a task as seemingly simple as adding a new field goes to someone familiar with its quirks, just to avoid delays or bugs.

I even had a PM join my team that I hoped could take over this part of the product so I could focus on more strategic work as a CPO. But I quickly realised I couldn't hand it off. It was too complex, too intertwined, and full of edge cases only I really understood. They constantly needed support, and when they presented a solution, I'd spot critical gaps simply because I knew the system's history inside out. In the end, I reassigned them to a simpler area of the product so they could make progress without needing me every step of the way. That's how debt locks knowledge into individuals and limits scalability.

This is what deeply embedded technical and product debt looks like. Not just bad code, but a whole area of your product that feels unsafe to touch - and almost impossible to hand over.

That's the cost of product debt, tech debt, and design debt working together - and dragging your team down.

How to Spot Debt Before It Buries You

You don't need fancy tools to spot debt. You just need to listen:

  • The data is telling you something - when you monitor user flows, you notice features aren't being used as intended, or not at all.

  • Your team avoids touching certain areas of the code.

  • Users are telling you things are too complex - either through direct feedback or via drop-off in key flows.

  • Product strategy sessions devolve into blockers caused by existing debt: "we can't do that because it touches a fragile legacy system," or "it would take too long to refactor this area first."

We faced a situation where we were constantly adding to the sales quoting system for the post-sales teams, expanding it far beyond its original purpose. Over time, it had to serve four different teams - each with different, often conflicting needs. This ballooning complexity was clearly product debt, but it became more than that. It started actively impacting the business's ability to function smoothly. We knew we had to bite the bullet, so we roadmapped a 3-6 month project to rebuild the entire system properly. It was no longer just legacy clutter - it was blocking day-to-day operations.

How to Manage Product, Tech, and Design Debt Without Losing Momentum

Here are several strategies I've used across teams to manage debt without stalling delivery:

  1. Post-feature cleanup sprints: After delivering a major feature, we'd deliberately shift gears. We'd block 1-2 sprints to clear out product and design debt - small tickets, UX polish, revalidating older features. The dev team would simultaneously plan tech clean-up tasks. It was a reset, and everyone bought into it.

  2. Incremental refactors during big transitions: During a major system architecture transition, we implemented a rule: if you touched any part of the legacy system, you updated it to follow the new structure. Even small tasks - like adding a single field - required modernising the surrounding code. This rule helped us chip away at accumulated debt continuously, without needing to stop feature development entirely.

  3. Capture tech debt as soon as it's mentioned: If the CTO or any developer said (even in passing) that a piece of tech debt needed attention, I would create a ticket almost verbatim from what they said and add it to the backlog. Even if I didn't fully understand it, it ensured we wouldn't lose the signal. We'd then discuss it during prioritisation - about half of those items got done that quarter, and the other half were later deprioritised or made irrelevant.

  4. Roadmap major product debt items: If a product debt item was significant enough, we didn't treat it as background noise - we roadmapped it properly. This gave it visibility and accountability, allowed teams to estimate it, and helped us consider its impact alongside other product priorities. Sometimes this surfaced deeper root issues and even shaped broader initiatives.

  5. Preserve unshipped "nice-to-haves": Often, design tweaks or UX polish items would be cut during scope alignment. Instead of losing them, I created separate tickets for each - e.g., "Dropdown options should follow logical user order." These would sit in the backlog and get picked up in cleanup sprints or when developers had free capacity.

  6. Spot visual or UX inconsistencies in the wild: If I noticed something on the website or app that didn't align with our design system - even if it was small like spacing or alignment - I created a ticket. It helped us gradually chip away at design debt.

  7. Track product debt like any other feature gap: For features that were bloated, underused, or built without full validation, we created product debt tickets and tracked them alongside other product work.

The last three of these types of tickets - design polish, visual consistency, and product debt - were ideal for quick wins. We could often knock out 10-20 of them in just a couple of days with a developer who was waiting on a dependency or had a short gap between larger tasks.

PMs need to appreciate tech debt - not ignore it. I've worked with PMs who acted like it wasn't their problem. But it is. If you're prioritising based only on user impact or feature value and ignoring the cost of working with brittle foundations, you're quietly letting your velocity die. Just because we don't define tech debt doesn't mean we aren't impacted by it.

The same goes for product debt - it needs to be visible to be managed. One simple strategy is to track product debt in the same systems you use for everything else. Create a dedicated epic for major product debt themes, and tag individual tickets with labels like "product-debt" so they're easy to group and prioritise later. Whether you use Jira, Trello, Notion, or even Google Sheets, the key is to make it tangible - and therefore accountable. Once it's in your system, you can size it, plan it, and most importantly, discuss it.

Why This All Changes Depending on Your Company Size

In early-stage startups, some debt is inevitable - even strategic. You don't need perfect tests or a polished UI when you're still finding product-market fit. Speed is the priority.

But as you grow, the burden increases. Scale-ups start feeling the friction - bloated features, inconsistent design, and technical decisions that no longer scale. You can't just ignore it anymore. Enterprises? They're often swimming in legacy debt, and their challenge is managing it without grinding innovation to a halt. In fact, we know of large governmental organisations where only a handful of developers can still maintain critical systems - simply because the code is written in outdated languages or frameworks that very few people still know. That kind of dependency is a direct consequence of tech debt left unresolved for too long.

Wherever you are, your approach to debt has to evolve.

Final Thoughts: Debt Isn't the Problem - Silence Is

Debt isn't inherently bad. Sometimes it's the right call. But ignoring it? That's what kills teams.

Product Managers need to own product debt - and help their teams navigate design and technical debt, too. Your roadmap should include clean-up and refactoring, not just net-new. You should know the cost of the clutter you're carrying. And you should have a system - whether formal or scrappy - to review, reframe, and (when needed) ruthlessly remove the things that no longer serve your product's vision.

Because in the end, sustainable product development isn't just about what you add - it's also about what you let go of.