Aug 10, 2024·8 min read

Rule ownership for pricing, permissions, and approvals

Rule ownership helps teams route pricing, permissions, and approvals to business owners, so the backlog stops filling with repeat request tickets.

Rule ownership for pricing, permissions, and approvals

Why the backlog keeps filling with rule changes

A backlog fills with rule changes when a team treats business decisions like product features. Sales wants a special discount. A manager wants one person to see one screen. Finance wants another approval step. Each request looks small, so it becomes a ticket.

The real problem is not the size of the change. The real problem is that the decision still lives outside the product. Someone keeps the rule in their head, in a spreadsheet, or in a chat thread. Engineering copies the latest exception into code and moves on.

Pricing shows this fast. A customer asks for a discount that almost matches an older case, but not quite. Instead of updating the discount policy, the team adds a new branch, a flag, or a one-off override. A month later, nobody remembers why that path exists, but sales still depends on it.

Permissions create the same mess. One person needs temporary access. Then another team wants the same access with one extra limit. Support files a ticket, engineering patches the role model, and the request closes. The next exception arrives because nobody owns the rule for who gets access, for how long, and who approves it.

Approvals are even more obvious. Managers approve the same type of request by hand again and again. The software records the outcome, but it does not own the decision. So every repeat case comes back as work for people, then work for the backlog.

You usually see the same signs together. Similar tickets keep returning with slightly different details. Teams ask the same manager for the same judgment every week. Rules change in code while policy documents stay vague or old. People say "we did this last time" instead of naming a rule.

Adding more prompts to intake does not fix that. It only creates cleaner tickets for the same ownership gap. If nobody owns the pricing and permission rules, the backlog becomes a storage bin for policy work.

Rule ownership breaks that loop. Each repeat decision gets a home, an owner, and a clear way to change it. Until that happens, teams keep shipping code while the actual logic sits somewhere else, unchanged and hard to use.

What policy work looks like in practice

Policy work starts when a request stops being about a new button or form and turns into a decision about who may do what, when, and with whose approval. The code can stay simple. Agreeing on the rule is the hard part.

This shows up most often in pricing, permissions, and approvals. A sales team asks for "more pricing flexibility," but what they usually need is a rule like this: small business customers can get up to 10% off, enterprise accounts can get custom pricing, and anything below margin needs finance approval. That is not a product idea. It is a business policy.

The same pattern appears in access control. A manager wants support staff to edit billing details, but only in some regions or only for customers on a certain plan. Product can build that switch, but someone still has to decide the boundary. If nobody owns that decision, the backlog keeps collecting tickets that all describe the same problem in different words.

In day-to-day work, policy usually shows up as a small set of repeatable rules: price bands by customer type or contract size, action limits by role or region, refund thresholds that trigger a named approver, and exception paths for unusual cases.

A refund flow makes this easy to picture. Support can approve refunds up to a set amount. A larger refund goes to the finance lead. A very large one goes to a specific person, not "someone from finance." If the customer has a legal dispute or a fraud flag, the normal path stops and a different owner takes over.

That last part matters. Exceptions need owners too. Teams often define the standard path and leave edge cases vague. Then every odd request becomes a chat thread, a meeting, and another ticket. One person or team should decide the rule, keep it current, and answer when it no longer fits reality.

When you frame these requests as policy first, product work gets smaller and cleaner. Engineers build the mechanism once. The business owners decide the rules that drive it.

How to spot rule ownership early

You can catch policy work before it turns into another engineering ticket. If a request changes who can approve something, who can see it, or what price a customer gets, you probably do not have a coding problem first. You have a rule ownership problem.

Start with one plain question: who owns this decision today? If nobody can answer that quickly, the rule already lives in scattered places like chat, support notes, sales habits, or a manager's memory. That usually means the backlog is collecting policy questions that nobody has written down.

Then ask how often the rule changes. If the answer is "every week," "whenever finance updates pricing," or "it depends on the customer," code is a bad first home for it. Frequent changes point to rules that need a named owner, one source of truth, and a simple way to update them.

Exceptions tell the truth even faster than the normal path. Ask who grants them. If one sales manager keeps approving special discounts, or one operations lead keeps allowing access outside the default permission set, that person already acts as the rule owner. The product team should not guess those decisions from old tickets.

Support teams often reveal the hidden system. During feature request triage, ask whether support already follows a manual rule. If agents check a spreadsheet before changing a plan, or ask a team lead before refunding above a certain amount, the rule already exists. The work is to formalize it, not to add another feature.

A few warning signs come up again and again:

  • The same request returns every month with slightly different wording.
  • Two teams give different answers to the same customer question.
  • Exceptions depend on one person being online.
  • Approval rules live in email or chat instead of one clear place.

A simple test helps. If you can describe the request as "when X happens, person Y decides based on condition Z," stop treating it like a normal backlog item. Name the owner first. Once that owner defines the rule, engineering can build the right thing once instead of patching it five times.

How to map rules to owners

Most requests in this area are not one thing. A ticket that says "add discount approval" usually hides several business decisions. If you want rule ownership to work, split the request before anyone starts coding.

List the actual decisions inside the request. A simple discount change can include the price limit, who may ask for it, who may approve it, and when the exception expires. When teams skip this step, one story turns into five more next week.

Then group each decision by type. Most fall into three buckets. Pricing rules decide amounts, thresholds, and exceptions. Permission rules decide who can see, edit, approve, or override. Approval rules decide when a second person must review a change.

That grouping matters because each bucket usually belongs to a different person. Finance or revenue leaders should own pricing rules. Product, security, or operations leaders often own permission rules. Team managers usually own approval rules when they affect daily decisions.

Pick one owner for each rule set. One person can ask others for input, but one person needs to make the final call. Shared ownership sounds reasonable, but it creates the same backlog mess under a new name. If nobody can clearly say yes or no, engineers end up making policy by accident.

Write the default rule before you write any exception. The default should handle most cases with no debate. For example, "sales reps can approve discounts up to 10% for annual plans" is a workable start. After that, add exceptions only when they happen often enough to deserve a rule.

You also need a review path that people can follow without opening a new feature request every time. Keep it plain: say who can propose a rule change, where the current rule lives, who approves the update, and when the team reviews it again.

That changes product backlog management in a useful way. Engineers build the rule mechanism once. Owners manage the policy after that. The backlog gets smaller, and decisions stop bouncing between chat, tickets, and meetings.

How to write rules people can use

Review Your Approval Stack
Check forms, handoffs, and thresholds before more edge cases pile up.

People ignore rules that read like legal notes or half-finished tickets. If support, ops, or product cannot read a rule in under a minute, they send the work back to engineering.

Good rules follow a simple shape: when something happens, check a few facts, then take one clear action. That format works for approval rules, pricing rules, permission rules, and the small exceptions that usually clog a backlog.

Start with the trigger in plain language. Write the event as a person would say it, not as a system log would record it. "A customer asks to raise their account limit" is better than "limit_update_requested fires."

Then name the data needed for the decision. Be concrete. List the few facts someone needs, such as account age, current plan, unpaid invoices, contract type, or user role. If the team must pull data from more than one place, say which source wins when the numbers do not match.

After that, write the action as a verb people can follow. Approve it. Deny it. Route it to finance. Remove access. Ask for one missing document. Avoid soft phrases like "review as needed" because nobody agrees on what that means.

Exceptions need their own line, not a footnote buried in a paragraph. If a rule changes for enterprise contracts, legal holds, or custom pricing, say so directly and name the role that signs off. A rule without a named owner turns into another ticket.

A short template is enough:

  • Trigger: what happened
  • Data: what facts the person checks
  • Action: what happens next
  • Exception: when the normal rule does not apply, and who approves it

Keep each rule short enough that a support lead can scan it during a busy shift. If the rule needs a full page of explanation, split it into separate rules and move the background note elsewhere.

For example, a permission rule might say: when a team admin asks for billing access, check whether the workspace has an active paid plan and no fraud review. Grant billing access in that workspace only. If the account is under review, send the request to the finance lead. Nobody needs a meeting to use that rule.

A simple example from discount approvals

A sales rep asks for custom pricing on a large deal. The first instinct is often to file a ticket: add a new form field, add a new approval step, add a chat alert, add a dashboard flag. A month later, the same request comes back in a slightly different shape.

That usually means the work is not about screens. It is about policy.

A cleaner setup starts with rule ownership. Finance defines discount bands based on margin, not on who asked the loudest. Sales works inside those bands. If a deal stays within the approved margin range, a sales lead can approve it. If the request goes past that limit, a director reviews it.

The flow can stay simple. Sales enters the deal value, expected margin, and requested discount. Finance owns the discount bands and updates them when pricing policy changes. A sales lead approves requests inside the allowed band. A director reviews anything above it.

Notice what changed. The team did not build five different screens for five discount cases. They kept one request flow and changed the approval rules behind it.

That matters because discount policy moves more often than UI. Finance may tighten margins for one quarter, relax them for a product line, or create a separate band for renewals. If every policy change turns into design work, engineering becomes the middleman for decisions other teams already know how to make.

A small example makes this clear. Say sales wants to offer 12% off on a deal worth $80,000. Finance has already said discounts up to 10% are fine when margin stays above a set floor. That means 12% needs director review. Next month, finance changes the band to 15% for this product because costs dropped. Nobody should open five new tickets. Someone updates the rule, and the same flow keeps working.

This is why feature request triage often goes wrong. People label a policy question as a product change. The backlog fills with what looks like software work, even though the real job is to name the owner, write the rule clearly, and make the system follow that rule.

Mistakes that turn rules back into tickets

Bring AI Into Daily Work
Move repeat decisions into AI assisted workflows with clear human ownership.

A backlog fills up again when a team treats rules like UI work. The form ships, the prompts get tuned, and everyone assumes the policy will get sorted out later. It usually does not. The same discount limit or access rule returns as three more tickets because nobody owns the decision.

One common mistake is shared editing with no tie breaker. If sales, finance, and product can all change the same approval rule, the rule stops being a rule. It becomes an argument with version history. Give one person the pen. Other people can suggest changes, but one owner decides the final wording and start date.

Another mistake is skipping exceptions. Teams write "managers can approve discounts up to 15%" and stop there. Then a renewal deal, partner account, or urgent service credit shows up, and people jump into chat to handle it case by case.

Once exceptions live inside chat threads, people follow the last message they remember. A month later, support handles the case one way, finance handles it another way, and engineering gets asked for a "small fix" that is really policy cleanup.

Shipping a form before naming the owner causes the same problem. A form can collect inputs, but it cannot decide whose rule it is. Teams often build request screens, approval buttons, and AI helpers before they answer one plain question: who updates this rule when the business changes? Without that answer, every policy change lands back in the backlog.

AI can make this worse when teams ask it to guess policy from old tickets. Old tickets show habits, shortcuts, and rushed exceptions. They rarely show the real rule. If you feed that pile into a model, the model will repeat the same confusion faster.

Picture a company using AI to route pricing requests. The model reads past tickets and starts approving edge cases that finance allowed only once during a quarter-end push. Now the team has automation, but no control.

Rule ownership works better. Keep one written rule, one named owner, and one place to record exceptions. Then tickets go back to product work instead of carrying policy on their back.

Quick checks before you add another story

Clean Up Approval Drift
Review repeat approval paths and give each rule a clear owner.

Many backlog items look like product work, but they start as missing policy. When nobody owns a rule, the team turns each question into a ticket, then reopens it when the next exception appears.

Start with a name. If one person cannot say "I decide this rule" and "I will keep it current," the request is not ready for engineering. That owner does not need to code, but they do need authority over price limits, access levels, or approval steps.

Before a request reaches engineering, make sure a few basics are true. Someone outside engineering owns the rule and can settle disputes. The normal case is written in plain language, including what happens when data is missing. The exception path has a clear name, a trigger, and a final approver. Support can explain the rule without asking a developer to translate it. And the owner can change the rule later through a form, table, or documented process instead of a code change.

The default case matters more than most teams expect. People often jump to edge cases first and leave the everyday path implied. That is how pricing and permission rules turn fragile. One missing sentence like "orders under $5,000 auto-approve" can save a week of back-and-forth.

The exception path matters just as much. "Handle special cases manually" is not a rule. It is a future pile of tickets. Name the exception, say who handles it, and say when it ends.

This is where rule ownership helps feature request triage. If support cannot explain the behavior and the owner cannot update it without a deploy, the team is still doing policy work. Write the rule first, then add the story. The code gets smaller, and the backlog stays calmer.

What to do next

Start with one request type that kept coming back last month. Pick something dull and repetitive, like discount exceptions, permission changes, or approval thresholds. Your first test case should be easy to spot, not hard to solve.

Pull the last 30 days of tickets and group them by decision, not by wording. Ten requests that ask "can this customer get 15% off?" are one rule problem, not ten product ideas. That small shift changes triage fast.

Keep the first version simple. A table with "when this happens, who decides, what limit applies, and what exception is allowed" works better than a long spec nobody opens. If you deal with pricing or permission rules, add the exact fields people check before they approve or deny a request.

A quick example helps. If sales asked for discount exceptions 18 times in a month, move that logic out of the backlog. Write the threshold, the approval path, and the cases that finance will allow without debate. Once those approval rules live in one place, the team stops rewriting the same ticket.

Do not aim for full automation on day one. First, make sure three groups read the rule the same way and reach the same answer. After that, you can turn it into a form, workflow, or internal tool with far less rework.

When nobody owns a rule, engineers become the default policy team. That costs time, creates strange edge cases, and fills the backlog with work that is not really coding work.

If your team keeps getting stuck on pricing, permissions, approvals, or AI-first delivery, Oleg Sotnikov at oleg.is works with startups and small teams on this kind of operating model. A short advisory session can help you assign ownership, clean up the rule set, and avoid building more process around the wrong decision.

Frequently Asked Questions

How do I tell if a ticket is policy work instead of product work?

Treat it as policy work if the request changes who can approve something, who can access something, or what price someone gets. If one person already makes that decision by habit, write the rule down and name the owner before engineering builds anything.

Who should own pricing rules?

Put the team with authority over money in charge of pricing rules. Sales can suggest changes, but finance or the revenue owner should decide discount bands, margin limits, and approval cutoffs.

Should engineers set approval thresholds?

No. Engineers should build the flow, not invent the business rule. A manager, finance lead, or operations owner should set the threshold and say who approves exceptions.

What is the simplest way to document a rule?

Write each rule in plain language: what happened, what facts you check, what action you take, and who handles the exception. If support cannot read it fast and use it the same way every time, the rule needs cleanup.

How should we handle exceptions without filling the backlog again?

Give each common exception a named owner and a clear end point. If people handle exceptions in chat or memory, the same case returns as another ticket.

Why do permission requests repeat every month?

They keep coming back because nobody owns the access rule. Teams patch one request at a time, but they never settle who gets access, for how long, and who approves it.

Can AI figure out these rules from past tickets?

I would not use old tickets as the main rulebook. Old tickets mix real policy with rushed one-off calls, so AI will copy the confusion unless a human owner defines the rule first.

What should we automate first?

Start with the request type that repeats the most, like discount approvals or refund limits. Pick one simple flow, agree on the default rule, and automate that before you touch edge cases.

How often should we review and update rules?

Review rules when the business changes or when the same exception shows up more than a few times. A monthly or quarterly check usually works, but frequent changes mean the owner needs a simpler way to update the rule.

What if sales, finance, and product disagree on a rule?

Put one person in charge of the final call. Let other teams give input, but do not give them equal edit power on the live rule or engineers will end up settling the argument in code.