The problem
Ask where to eat in Kuwait and you get one of three answers, none of them the one you wanted. A star average assembled from strangers, most of whom rated once and never came back. A list somebody paid an agency to compile. Or an awards night whose shortlist is simply the restaurants that entered. Nobody publishes the straightforward thing: if you asked the people who actually eat here, which twenty places would they name?
What it is
The People’s Top 20 is an annual restaurant election, run one country at a time. A verified person chooses up to ten restaurants a year. There is no ordering and no scoring inside that ten, every choice carries the same weight, and for each one the voter confirms they ate there within the last twelve months. Separate cuisine ballots take three picks each, so a Top 20 Japanese can exist without bending the national list. Ballots stay editable until the annual cutoff, then they freeze, an audit period runs, and the result is published as that year’s Top 20 and kept permanently at its own address.
Why it was hard
- Ten equal choices sound simpler than a scoring system and are harder to build. Taking the scores away removes every place where a ranking normally hides its assumptions, so the limits have to be exactly right: ten overall, three per cuisine, one branch per restaurant group so a chain cannot fill a ballot with itself.
- Those limits are enforced in the database, by conditional inserts against partial unique indexes, never by reading a count and then writing. Read-then-write is the usual way to build this and also the usual way to accept an eleventh vote from a double submission on a slow connection.
- A ballot that stays open for a year is not a row you overwrite. Every change is appended to an event log, so the ballot is a position and the history behind it survives the day somebody disputes a result.
- Branches are ranked, not brands, because the branch is what people eat in and quality moves between them. That reaches the data model on the first day or it never arrives at all.
Why there are no stars
A rating out of five is a different product with a different failure. It takes a verdict from anybody willing to type one, it rewards volume, and it becomes a number a restaurant manages rather than earns. An annual choice asks something a rating cannot: of everywhere you ate this year, is this one of your ten. That is expensive to answer honestly and cheap to answer once, which is the right way round. It is also why there is no review box in the first version. The moment the product starts collecting opinions between elections it is a review site with a ballot attached.
What official has to earn
Twenty restaurants drawn from forty ballots is not a national ranking, and calling it one would destroy the only thing the platform has to sell. So a minimum number of verified voters is published before a season opens, and until a country passes it the standings are marked as still collecting rather than official. The demonstration page says exactly that on the list itself. After the freeze there is an audit window, and its arithmetic is published too: ballots cast, ballots invalidated, method used. A ranking that will not show its own numbers is asking to be taken on trust, which is what everything else in this category already asks.
What it refuses to sell
Money never touches eligibility, votes, placement or rank. A restaurant can claim its profile, advertise, and later buy its own analytics, and none of it moves the restaurant one position. Sponsorship is labelled and sits structurally outside the ranking rather than beside it. No discount, gift or prize draw may be offered in exchange for a vote, and a restaurant may invite its customers to vote but never vote for them or hand them a filled-in ballot. Each of those closes off revenue a platform of this shape is normally built to collect. They are in the product because a ranking that can be bought is worth what it costs, which is not much.
What it demonstrates
Most of my consulting work is spent on decisions that are cheap this month and expensive next year. This is the same argument with my own name on the bill. The vote limits, the append-only history, the branch as the unit of ranking and the threshold in front of the word official are all settled before there is a single voter, because none of them can be added afterwards without invalidating what has already been collected. A voting product is the clearest case of it I have built: there is no gradual migration path for a rule you changed halfway through the season.
Where it is now
Live at tpt20.com, with a working demonstration of the ballot and the standings so the mechanism can be read before anyone is asked to trust it. Kuwait is first, with the UAE and Saudi Arabia after it. Voting has not opened, no result has been published, and no award date has been set.
