Strategy

When to Say No to a Feature: The Cost Nobody Prices at Build Time

SKIMBOX Team

A feature is not paid for once. It is a permanent line item in maintenance, testing, interface attention and every future change. Here is how to decide which requests are worth that, and the four answers that are neither yes nor no.

When to Say No to a Feature: The Cost Nobody Prices at Build Time

Every feature you agree to is a decision to spend money every year, indefinitely, for as long as that feature exists. Almost nobody prices it that way.

The build cost is the visible number. It goes in the quote, it gets negotiated, and it gets paid. Then the feature ships and quietly joins a list of things that have to be kept working, kept tested, kept explained to new users, and kept compatible with platforms that change on their own schedule. That second cost never appears on any document, which is precisely why it never enters the decision.

This article is about how to make it enter the decision.

A feature is not paid for once

Software maintenance is not one activity. The international standard governing it, ISO/IEC/IEEE 14764 [1], exists specifically because maintenance is several distinct kinds of recurring work rather than a single line item. Broadly, and consistently across the standard's lineage: fixing defects found after release, changing the software because the environment around it changed, improving things that already work, and dealing with latent problems before they cause failures.

Every feature you ship contributes to all four, permanently.

There is a second mechanism, and it is the one that catches teams out. ISO/IEC 25010 [2] defines a product quality model in which maintainability is a named characteristic, on the reasoning that how easily a system can be analysed and modified is a real, measurable property rather than a feeling. As a system's surface area grows, that property degrades. Every feature is not an isolated addition sitting quietly in its own corner. It is a new case that every future change has to be checked against, and a new interaction that every test has to account for.

That is why a two-day change on a small product becomes a two-week change on a large one, doing the same thing.

The platform does not wait for you

Here is the part that turns this from a theoretical argument into a dated one.

A feature nobody has asked to change is not maintenance-free, because the platforms underneath it impose their own deadlines.

Apple requires third-party SDKs on a named list to ship a privacy manifest, and binary dependencies to carry a signature, with Xcode validating both at build time. The requirement applies when you submit a new app, or when you submit an update that adds one of the listed SDKs [3]. A feature built three years ago on a library that has since been added to that list does not stay finished. Your next update has to satisfy a rule that did not exist when the feature shipped.

Google Play runs a rolling target API level requirement. For the current cycle, new apps and updates must target Android 16, API level 36, from 31 August 2026, and existing apps must target Android 15 or higher by that date to remain visible to new users on newer Android versions [4]. Fall behind and the app stops reaching new users, regardless of how well it works for existing ones.

Neither of those is a hypothetical slippery slope. They are published dates, and they apply to every feature in your product equally, including the ones nobody uses.

The cost you can put a number on

Our own maintenance guide budgets fifteen to twenty-five per cent of build cost per year for keeping software alive [8]. Applied to a single feature, that is the clearest way to make the ongoing cost visible during the decision rather than after it.

A feature that costs AED 20,000 to build costs roughly AED 3,000 to AED 5,000 a year to keep working. Over three years, the maintenance approaches half the build cost again. Over five, it exceeds it. And none of that depends on whether anybody uses the feature, because the platform deadlines, the security updates and the regression tests do not check usage first.

That is the arithmetic to put in front of the person asking. Not "no", but "this is AED 20,000 now and around AED 4,000 a year forever, and here is what else we could do with that."

Interface attention is finite too

The other budget nobody counts is the user's attention, and both major stores treat spending it badly as a quality failure rather than a matter of taste.

Apple's review guidelines open the design section by saying plainly that simplicity and ease of use are minimum standards for approval rather than aspirations, and that an approved app still carries an ongoing obligation to remain functional and engaging, with degraded apps removable at any time [5]. Separate guidelines penalise undifferentiated addition directly, on the stated basis that opportunistically creating variants of what already exists degrades discovery and reduces overall quality [5].

Google Play's functionality policy sets a similar floor: apps must provide a stable, responsive and engaging experience, and apps that lack adequate utility or behave inconsistently with that are not allowed on the store [6]. Android's core app quality guidance separately checks consistency of experience across use cases and form factors as a quality item [7].

An important honesty note: those rules govern consumer apps distributed through those stores. They do not govern your internal admin tool, your B2B platform, or your operations dashboard. We cite them because they show how seriously the two largest reviewers in the industry treat interface accumulation as a genuine quality failure, with enforcement attached. The same mechanism degrades an internal tool exactly as much. It just does not have anyone grading it, which is usually worse rather than better.

Where the pressure actually comes from

Worth naming, because most advice on this topic treats it as a discipline problem when it is really an incentive problem.

The cost of saying yes arrives later and lands on somebody else. The cost of saying no arrives immediately and lands on the person saying it. A salesperson who agrees to a feature closes a deal this quarter; the engineer who maintains it inherits the consequence two years from now, quite possibly after the salesperson has moved on. Nobody has ever been thanked in a meeting for a feature they did not build, because the counterfactual is invisible.

That asymmetry decides more roadmaps than any framework does, and no amount of process fixes it if the person who says yes never sees the bill. Two things help. First, make the ongoing cost visible at the moment of the decision, in dirhams, using the maintenance percentage above, so the yes is priced rather than free. Second, put the decision and its reasoning in writing so that when the cost does arrive, it arrives attached to a decision somebody made deliberately rather than to a mystery.

Neither of those makes saying no easy. They make it legible, which is enough to change most outcomes.

The hardest case: one client wants it

Every other request can be judged on its merits against a notionally neutral user base. This one adds revenue risk, relationship risk, and the fact that the person asking is often the person who can end the contract.

Four questions separate the commercial pressure from the product decision, which by default get argued together and are what make this case genuinely hard rather than merely uncomfortable.

Would anybody else use this? If you can name a second plausible user and their use case, it is a feature. If the honest answer is that it is specific to how this one client runs their business, it is a customisation wearing a feature's clothing.

What happens when that client leaves? Every business loses its largest client eventually, through churn, acquisition, a change of buyer, or simply outgrowing the relationship. A feature justified entirely by one relationship becomes dead code the day that relationship ends. It will not be removed, because removing things is its own project with its own risk, and there is always a fear that somebody still depends on it.

Can it be configuration rather than code? A setting, a flag, or a field the client fills in themselves is a completely different cost profile. Configuration is maintained once, as part of a system that already exists. A one-off feature is maintained forever, on its own.

Could it be separate, priced work? Saying no to "in the core product, for everyone, forever" is not the same as saying no to the client's actual problem. Our guides on why app quotes vary and reading a software proposal both describe variations the same way: work outside the agreed shared scope gets its own price and its own decision. That is not a trick, it is how a maintained boundary is supposed to work.

Four answers that are neither yes nor no

Most feature arguments are really arguments about a false binary, in which the only options appear to be building it into the product now or refusing the relationship. There are four legitimate answers in between, and naming them removes most of the emotional weight.

Not yet, with a stated trigger. Not a deferral into silence. A specific, written condition that would change the answer: if three more clients ask, if usage of the adjacent feature crosses a number, once the integration it depends on ships. This converts a recurring argument into one decision that is revisited when the trigger fires rather than every time the requester remembers it.

Configuration rather than a feature. The most useful of the four, because it satisfies the request without adding a new permanent item to the maintenance list or a new branch to reason about.

A manual process while demand is tested. Somebody on the team does the thing by hand for the handful of clients who asked. A weekly export, a scripted report, a spreadsheet. Deliberately slower per instance, and that is the point: it caps the cost of being wrong about demand and produces real evidence of how often the thing is actually used before any code enters permanent maintenance.

A separate charge. It becomes scoped, priced work rather than an addition everyone pays for and you maintain forever. It also creates a genuine market test. If the client will not pay for it separately, that is real information about how much they value it, as against how easy it was to ask for free.

The five-question test

Short written answers, kept even informally, before anybody estimates anything.

Who asked? One person, one team, one client, or a pattern across several unconnected requesters. Count requesters, not requests, because three mentions from the same client is one signal and one mention each from three unrelated clients is something else entirely.

How many others would genuinely use it? An honest estimate rather than a hope.

What does it displace? Nothing is added into empty space. Every feature competes for the same engineering time, the same testing time, and the same finite interface attention. Naming the displaced thing forces the trade to be visible instead of assumed free.

What does it cost to maintain? Not the build cost. The recurring load, anchored at fifteen to twenty-five per cent of build cost per year.

What happens if you decline? Concretely. Does the requester leave, route around it manually, or simply never mention it again? This is usually the most clarifying of the five, because the imagined consequence of saying no is almost always worse than the real one.

Writing these down does two things. It makes the decision defensible later, on the basis of what was known at the time. And it removes recency and loudness bias, which between them settle more feature arguments than merit does.

Saying it well

Three parts, in this order.

Acknowledge the underlying need before addressing the request. The person asking has a real problem, and no to a specific implementation is not no to the problem being real. Naming their problem back to them, in their words, is what separates a considered decision from a dismissal.

Explain the trade rather than the refusal. The five questions in short form are the explanation: this is what it would cost to keep, this is what it would displace, this is who we think would use it. A refusal without visible reasoning reads as arbitrary regardless of how carefully reasoned it was.

Offer the alternative. This is the biggest single lever on how a no lands, because it converts a rejection into a different kind of yes: a trigger condition, a setting, a manual stopgap, or a priced engagement.

What never saying no actually does

The product gets slower to change, because more of it has to be understood before any single change is safe. It gets more expensive to test, because interactions multiply faster than the feature count. It gets harder for new users to understand, which is the exact failure both stores' quality standards describe.

And the parts nobody maintains do not sit quietly forever. A platform requirement lands, or a security update forces a dependency upgrade, or the accumulated weight makes an ordinary change impossible, and the reckoning arrives on somebody else's schedule rather than yours. By then it is rarely small.

We are not going to tell you that this always ends in a rewrite, because no standards body publishes that claim and we would be dressing up a pattern as a law. What we will say is that a system nobody can safely change tends to get replaced rather than repaired, and that decision is usually made under pressure rather than chosen calmly.

If you want help deciding

A technical review of a proposal or a specific scope starts from around AED 1,500 with us, which is the right size for a sanity check on one significant request before you commit. Scoping a feature properly, or one of its four alternatives, as a short paid discovery with a written specification you own, starts from around AED 4,000. A broader assessment and roadmap covering your whole feature set, including what to consolidate and what to remove, starts from around AED 10,000. Final pricing depends on scope, and these are our own figures rather than a market survey.

The free version costs two lines per request. Write down who asked, how many others would use it, what it displaces, what it costs to keep, and what happens if you decline. Do it before anybody estimates anything, and the arguments get considerably shorter.

References

  1. ISO/IEC/IEEE 14764:2022, software life cycle processes, maintenance
  2. ISO/IEC 25010:2023, systems and software quality models
  3. Apple, upcoming third-party SDK requirements
  4. Google Play Console Help, target API level requirements
  5. Apple, App Store Review Guidelines
  6. Google Play, functionality, content and user experience policy
  7. Android Developers, core app quality
  8. SKIMBOX, mobile app maintenance cost in Dubai
  9. SKIMBOX, why app quotes vary in the UAE
  10. SKIMBOX, how to read a software proposal

Platform requirements and dates accurate as of 23 August 2026. Apple and Google publish rolling schedules, so check the linked pages for the current table before planning against a date.

Frequently asked questions

  • Why is saying no to a feature so hard?

    Because the cost of yes arrives later and lands on somebody else, while the cost of no arrives immediately and lands on the person saying it. The requester is in the room, the maintenance burden is three years away, and nobody has ever been thanked in a meeting for the feature they did not build, because the counterfactual is invisible. That asymmetry decides more roadmaps than any framework does, and it is an incentive problem rather than a discipline one.

  • What does a feature actually cost after it ships?

    Four separate kinds of recurring work, which is why the international standard governing software maintenance defines several distinct maintenance types rather than one. There is fixing defects found after release, changing the software because its environment changed, improving things that already work, and dealing with latent problems before they cause failures. Every feature you ship contributes to all four of those categories, permanently, for as long as it exists in the product.

  • How much should I budget for maintaining a feature?

    A useful order of magnitude is fifteen to twenty-five per cent of the original build cost each year, which is the figure our own maintenance guide uses. So a feature that cost AED 20,000 to build costs roughly AED 3,000 to 5,000 a year to keep alive, every year, whether anybody uses it or not. Multiply that by the number of features nobody uses.

  • Does a feature need maintenance even if nobody asks to change it?

    Yes, and this is the part buyers almost never price. The platform imposes its own deadlines regardless of what you want. Apple requires privacy manifests and signatures for a named list of third-party SDKs before an app update is accepted, and Google Play requires apps to target a recent Android API level on a rolling schedule or lose visibility to new users on newer devices. Neither of those deadlines waits for you, checks whether the feature is popular, or cares that nobody has requested a change to it in three years.

  • What is the Google Play target API deadline?

    Google publishes a rolling schedule rather than a one-off date. For the current cycle, new apps and app updates must target Android 16, API level 36, from 31 August 2026, and existing apps must target Android 15, API level 35, or higher by that same date to remain visible to new users on newer Android versions. Check Google's own page for the live table before planning around it.

  • How does adding features make future changes slower?

    Every feature becomes a case that every future change has to be checked against. The ISO product quality model names maintainability as a formal quality characteristic precisely because how easily a system can be analysed and modified is a measurable property that degrades as its surface area grows. More features means more to understand before anything can be changed safely, and more to test afterwards.

  • Is interface clutter a real cost or a matter of taste?

    Both stores treat it as a quality standard rather than a preference. Apple's review guidelines open the design section by stating that simplicity and ease of use are minimum standards for approval, not aspirations, and Google Play's functionality policy requires a stable, responsive and engaging experience as a condition of being listed. Those are enforcement positions rather than opinions, taken by the two organisations that decide whether your app is available at all, which makes them worth more than any design argument.

  • Do those store rules apply to internal business software?

    No, and it is worth being straight about that. Apple and Google's standards govern consumer apps distributed through their stores, not your internal admin tool or your B2B platform. We cite them because they show how seriously two very large reviewers treat interface accumulation as a quality failure. The same mechanism degrades an internal tool exactly as much, it simply does not have anybody grading it, which in practice tends to make the accumulation worse rather than better.

  • My biggest client wants a feature only they will use. What do I do?

    Run four questions. Would anybody else genuinely use it? What happens to it when that client eventually leaves? Could it be configuration rather than code? Could it be a separately scoped and priced piece of work rather than part of the core product? Those four separate the commercial pressure from the product decision, which by default get argued together and that is what makes this case hard.

  • What is the difference between a feature and a customisation?

    A feature is something you can name a second plausible user for. A customisation is specific to how one client runs their business, and it will still be specific to that when they are gone. The distinction matters because a feature is maintained as part of a system that already exists, while a customisation is maintained forever, on its own, by itself.

  • What happens to one-client features when the client leaves?

    They almost never get removed, which is the actual problem. Removing something is its own project with its own risk, and there is always a worry that somebody somewhere still depends on it. So it stays, quietly consuming maintenance, testing time and screen space, long after the only reason it existed has ended. That is how products accumulate weight nobody chose.

  • Can configuration replace a feature request?

    Often, and it is the most useful alternative of the four. A setting, a flag, or a field the client fills in themselves has a fundamentally different cost profile from a new code path, because it is maintained once as part of the system that already exists rather than forever on its own. Always ask whether the request can be a setting or a field before agreeing that it is a build, because the two look identical in a meeting and are completely different in a maintenance budget.

  • What are the alternatives to yes and no?

    Four. Not yet, with a specific written trigger. Configuration rather than code. A manual process the team runs while demand is tested. Or a separately scoped and priced piece of work. Most feature arguments assume the only options are build it now or refuse the relationship, and naming these four as legitimate answers removes most of the emotional weight from the conversation.

  • What does not yet with a trigger mean?

    It means naming the specific condition that would change the answer, and writing it down. If three more clients ask. If usage of the adjacent feature crosses a stated number. Once the integration it depends on ships. That converts a recurring argument into a single decision revisited only when the trigger fires, rather than relitigated every time the requester remembers to mention it.

  • Why would I run something manually instead of building it?

    Because it caps the cost of being wrong about demand, and it produces real evidence before anything enters permanent maintenance. Somebody exports a spreadsheet weekly for the three clients who asked. It is deliberately slower per instance, and after two months you know how often it is actually used and by whom, which is information no requirements document could have given you.

  • Should I charge separately for a feature request?

    It is a legitimate answer and often the honest one. Work outside the agreed shared scope getting its own price and its own decision is not a trick, it is how a maintained boundary works. It also creates a real test: if the client will not pay for it separately, that tells you something useful about how much they value it, as against how easy it was to ask for free.

  • What is the five-question test?

    Who asked. How many others would genuinely use it. What does it displace. What does it cost to maintain. And what happens concretely if you decline. Write short answers down for each one, even informally, before anybody estimates anything. The value is not in the wording, it is in turning an argument into a decision that is defensible later and that is not settled by whoever happened to ask most recently or most loudly.

  • Which of the five questions matters most?

    What happens if you decline, because the imagined consequence is almost always worse than the real one. People picture a lost client and get a slightly disappointed email. Ask it concretely: will they actually leave, will they route around it manually, or will the request simply not come up again? A surprising share of requests fail that last test on their own.

  • What does what does it displace mean?

    Every feature competes for the same finite things: engineering time, testing time, and the interface attention every other feature is also competing for. Nothing is added into empty space. Naming what a request displaces, a roadmap slot, a simpler default, room on a screen, forces the trade to become visible during the decision rather than being quietly assumed to be free by everybody in the room.

  • How do I say no without damaging the relationship?

    Acknowledge the underlying need before addressing the request, because the person asking has a real problem and no to an implementation is not no to the problem. Explain the trade rather than the refusal, using the five questions in short form. Then offer one of the four alternatives. That last step matters most, because it turns a rejection into a different kind of yes.

  • Why does explaining the reasoning matter so much?

    Because a refusal with no visible reasoning reads as arbitrary no matter how carefully reasoned it actually was. People can accept a trade they disagree with far more easily than a decision they cannot see inside. Two sentences on what it would cost to maintain and what it would displace changes the temperature of the conversation more than any amount of diplomatic phrasing.

  • What happens if a product never says no?

    It gets slower to change, because more of the system has to be understood before any single change is safe. It gets more expensive to test, because interactions between features multiply faster than the features themselves. It gets harder for new users. And the unmaintained parts eventually force action anyway, on a platform's schedule rather than yours, which is the worst possible time to be doing that work.

  • Will accumulated features force a rewrite?

    Sometimes, and we would rather describe the mechanism than assert it as a rule, because no standards body publishes that claim. What is well established is that maintainability degrades as surface area grows. What we have observed is that a system nobody can safely change eventually gets replaced rather than fixed, and that decision is usually made under pressure rather than chosen.

  • Is there a statistic on how many features go unused?

    There are several in circulation and we are not repeating any of them, because every version traces back to a consultancy or product-tooling vendor with something to sell. The argument in this article does not need one. A feature costs money every year whether or not anybody uses it, and you can check your own usage data rather than an industry average.

  • How do I decide if a request came from a real pattern?

    Count unrelated requesters, not requests. Three mentions from the same client in three meetings is one signal. One mention each from three unconnected clients is a genuinely different thing, because they arrived at the same need independently. Keeping even a rough written list of who asked for what makes the distinction visible immediately, and it takes about a minute per request to maintain.

  • What if my own team keeps asking for features?

    Apply the same five questions, and pay particular attention to who would use it. Internal requests often come from a person solving their own workflow, which is legitimate but is not the same as a product need. Ask them what they do today instead, and how long that actually takes them each week. Quite often the answer turns out to be a shortcut, a permission, or a saved view rather than a feature.

  • Should I ever remove a feature?

    Yes, and it is worth planning as real work rather than hoping it happens spontaneously. Check usage data first, tell anyone affected well ahead, and remove it properly rather than hiding it while leaving the code in place. Hidden features still carry every maintenance category they always did, and still count against every platform deadline, they simply stop earning anything at all in return for it.

  • How do I know if my product already has too much?

    Two practical signals. Small changes take much longer than they used to and come with more caveats. And new users need explaining to, where before they did not. Neither signal is definitive on its own, but together they usually mean the surface area has grown past what the team can comfortably hold in their heads, and that the next few decisions ought to be removals rather than additions.

  • What does a review of a single feature request cost?

    With us a technical review of a proposal or a specific scope starts from around AED 1,500, which is the right size for a sanity check on one significant request before committing to it. Scoping a feature properly, or one of its alternatives, as a short paid discovery with a written specification starts from around AED 4,000. Final pricing depends on scope.

  • What about reviewing our whole feature set?

    A broader digital assessment and roadmap engagement starts from around AED 10,000 with us, which covers the full set rather than a single request and produces a written view of what to keep, what to consolidate and what to remove. Final pricing depends on scope. These are our own figures rather than a market survey, since no official body publishes rates for this.

  • What is the one thing to change this week?

    Start writing the five answers down for every request, in two lines each, before anybody estimates anything. That single habit removes recency and loudness bias from the decision, which between them settle more feature arguments than merit does, and it leaves you a record that makes the same question much faster to answer the second and third time it inevitably comes up again.

SKIMBOX Team

Tech Consultancy

Get fresh writing in your inbox

One email a fortnight. No filler.

By subscribing, you agree to our privacy policy.

Want us to build something?

We work with teams across MENA, UK, USA, and India to build products, run programs, and grow.

Get in touch

Continue reading