Guide 3ยท

How to prioritize feature requests: count customers, not votes

Votes pile up. Friends, a class, or one social post can put a request on top. That sort order is not a roadmap.

Decide from the board without pretending the top slot wins. If requests are still scattered, start by collecting them in one place. If most voters are on a free plan, also read how to run the board without paying per voter. You cannot count customers if you deleted the free votes, or if the same request lives in three tools.

A vote is not a customer

A vote says a person wanted the same thing as the post. That is not the same fact as "a customer needs this." Keep two definitions, and do not mix them.

A distinct account is one person, even if they voted more than once. Count accounts, not clicks. If the tool counts every click as a new vote and you cannot undo that, say so in the note. Do not pretend the figure is a headcount.

A paying account, if you charge, is a stricter fact. It is not a moral ranking. Free accounts are often where you learn what blocks a purchase. They are still a different fact. Write both numbers. Do not add them into one score.

If you do not know whether an account pays, do not guess. Mark it unknown. An unknown is more useful than a confident wrong label, because the wrong label will win an argument later and nobody will remember it was a guess.

Write the definitions where the team can see them. If "customer" means "anyone with an account" to one person and "anyone on a paid plan" to another, you do not have a count yet.

The table to make

You do not need a row for every open idea. You need a row for anything that might become planned, and for anything with a loud vote total you are tempted to treat as urgent.

ColumnWhat to put in it
RequestThe user's words, plus a one-line summary if the title is vague.
Distinct accountsSeparate accounts, not clicks.
Paying accountsHow many of those match a paid plan.
UnknownHow many you cannot match.
What they were trying to doA clause, not a feature name.
EffortSmall, medium, or large.
NoteAnything the other columns cannot hold, with a pointer.

"What they were trying to do" should be a clause. "Export the report finance asks for every Monday" is useful. "Better export" merges different requests by accident. If you cannot write the clause, the post is not ready to schedule.

Effort is small, medium, or large, and only if the people who would build it agree. Do not invent a day count. A number with no source gets quoted later as a promise. The note is for leftovers you can point at. A feeling with no pointer can be said in the meeting. It should not look like a column of data.

Do not invent a score

It is tempting to weight paying accounts, add a fraction of the others, divide by effort, and sort. The result feels objective because it is a number. The weights are still a policy, hidden inside a formula the next person will not question.

Bring the table to a meeting where someone can say no. Pick a small set for the next cycle, and write the status the same day. If you cannot explain the choice without a formula, you have a sort, not a decision.

A crowded total from one group can lose to fewer paying accounts, or it can win if that group is who you are trying to serve. The table keeps those cases apart. The vote column has already collapsed them.

If a teammate wants a formula, ask for the policy in a sentence instead. "We prefer requests paying accounts have asked for, unless a free-user request is clearly blocking activation." A sentence can be argued with. A hidden weight cannot.

What "blocked a sale" is allowed to mean

Use that phrase only when you can point at a conversation where the missing feature was why they did not buy, or did not buy yet. A hunch does not qualify. The note needs the account and the one-line reason they gave. You are not writing a full deal history. You are stopping the phrase from winning every argument.

Skip a revenue column unless you will keep it current. A stale number looks like a fact. One large account can also hide a pattern across many smaller ones, which is a poor default for a freemium product. An unhappy renewal is not automatically a vote for the feature mentioned last. Ask which missing piece would be required for them to stay, and write it down only if they can name it.

Say the decision on the post

Prioritization includes declining. Set the status the day you decide, and add a sentence a stranger can read.

"We are building the Monday export first. Paying teams asked for it, and the size is small."

"We are not building a separate mobile app. The request is real, and the size is large relative to the accounts behind it."

People can disagree with a sentence. They cannot use a blank. Declined means you will not build it. Open means you have not promised it. "Not this cycle" stays open. Do not blame the person who asked.

Vote order is a way to find posts. It is a poor roadmap. If the board sorts by votes, say at the top that status is the plan. FlatVote will email voters when you mark a request shipped. It will not pick the winner. A tool that ranks the roadmap from votes alone is sorting the column you decided not to trust.

Take "planned" back when you do not mean it

Once a month, read every post marked planned. If you will not start it next cycle, move it back to open, or decline it. People quote "planned." Only leave the word on items you would be willing to hear quoted. Do that review from the table. When the effort changes, the status may need to change too.

Pick a cycle, not a queue

Choose a few items that fit the cycle you actually have. For a small team that is often one or two, plus bugs you already owe. Working down the vote list turns the board into a promise you cannot keep. Finish, mark it shipped, let the email go out, then pick again.

If a large request keeps returning, status the smallest slice that would unblock the accounts behind it and leave the rest open. Say which slice, on the original post. Bugs should already have left the board for the tracker. If they are still in this meeting, fix the weekly cleanup before you rank them. When the cycle ends, update anything you dropped the same day, or the next cycle starts with a promise you did not mean to keep.

What this will not do

It will not rank the roadmap for you, tell you to ignore free users, or replace a conversation about what the product is for. It stops one mistake: treating a vote total as a count of customers.

If every row leaves the meeting marked planned, you made a longer queue. The output should include declines and posts that stay open.

FlatVote can host the board. Starter is $19 a month for 1 board and unlimited voters. Team is $49 a month for 5 boards, with SSO, a custom domain, and unlimited admins. There is no free plan. Prices and the ship date are on the home page. The product will not choose the next feature for you.