The hardest part of a roadmap is not the list of what to build. It is the quieter list of what you have implied you will build and quietly hope everyone forgets.
Two years ago this week, the first commit for Discount Prime landed. The app has been live on the Shopify App Store for about eighteen of those months, and in that time it has grown from two discount types to a full pricing toolkit. But the more useful anniversary reflection is not about what we shipped. It is about what we did not, and why the pile of unbuilt promises is its own kind of debt.
What roadmap debt actually is
Everyone in software talks about technical debt: the shortcuts in the code that slow you down later. Roadmap debt is the same idea one level up. It is every feature you told a merchant "yes, that is coming", every half-finished idea in the settings, every direction you pointed the product toward without committing to it. It does not show up in the codebase. It shows up as pressure, the slow accumulation of expectations that narrow what you can do next.
Two years in, we can say plainly that roadmap debt hurt us more than technical debt did. The code we could refactor. The promises we had to either keep or unwind, and unwinding one always costs a little trust.
What we cut
We killed more than we shipped. A short accounting of the bigger cuts:
A rules builder with unlimited nesting. Early on we imagined letting merchants compose discounts with deeply nested conditions. We built a prototype. It was powerful and nobody could use it. We cut it and kept rules flat, and the app got better the day we did.
Per-customer manual price overrides. Requested often, but it pulled the app toward being a spreadsheet with a Shopify skin. We solved the real need with tag-based B2B pricing instead, which scales, where per-customer overrides never would.
A dozen display themes. We almost became a theme app by accident. Merchants wanted the tier table to match their store, which is fair, but every theme we added was a surface we then had to maintain forever. We shipped a few clean defaults and stopped.
Each of those was a reasonable idea. That is exactly why they were dangerous. Bad ideas are easy to reject. Good-but-off-mission ideas are the ones that quietly bloat an app.
What survived
The features that lasted all share one trait: they serve the promise the app is actually about, which is protecting margin while you discount. Volume discounts survived because they are the highest-leverage discount most stores never run properly. The discount combinations controls survived because uncontrolled stacking is where margin leaks. Profit analytics survived, and last month margin-based rules for dropshippers survived, because they are the same promise pointed at cost instead of revenue.
The test we use now is simple. A year after a feature ships, is it still earning its place, or is it a toggle nobody touches? The survivors pass that test. The cuts would have failed it.
The debt we are still paying
We are not clean. Two honest examples. We shipped a lot of discount mechanics before we shipped a way to measure them, which meant merchants ran campaigns for months without knowing which ones made money. We wrote about that regret at the one-year mark, and it is the debt we most wish we had paid earlier. And we still have settings that exist because removing them would break a handful of stores, even though we would never design them that way today.
That is the trade every small app lives with. You cannot ship nothing, and everything you ship you then owe maintenance and coherence to.
What year three has to be about
If the first year was about breadth and year two was about profit, year three is about restraint with intent. The platform is moving fast underneath every Shopify app right now, and the temptation when the ground shifts is to build in every direction at once. We would rather keep the app narrow and make the few things it does defensible.
Roadmap debt does not get paid off by working harder. It gets paid off by saying no earlier, and meaning it. Two years in, that is the discipline we are still learning.




