Why we stopped ranking dogs by how often they got tapped
Our first ranking model optimised for engagement and quietly buried every animal that needed help most. Here is what it did, and what we replaced it with.
For most of 2024 the Mancsok listing was sorted by a score we called "interest": taps, saves, and enquiries per impression, decayed over a week. It was the obvious thing to build and it worked exactly as designed. Engagement per session went up 31%. Adoptions did not move at all.
What the model actually learned
Interest is not evenly distributed across shelter animals, and it is not distributed according to need. Puppies get tapped. Small dogs get tapped. A seven-year-old mixed-breed with a bite history and a course of medication does not get tapped, and every impression she failed to convert pushed her further down the list, which cost her the impressions she needed.
We measured the gap in September 2024 and it was worse than anyone had guessed.
median impressions in first 30 days, by cohort
under 1 year 4,812
1–3 years 2,190
4–7 years 743
over 7 years 118
flagged medical 94
flagged behavioural 61A senior dog was getting roughly 2% of the visibility of a puppy listed the same week. The shelters knew this without needing our numbers — Noé Állatotthon in Gödöllő, who take mostly seniors and hard cases, had been telling us for months that the app was not working for them.
A ranking model does not have opinions about which animals deserve a home. It has opinions about which thumbnails get tapped, and we had confused the two.
The replacement
The score is now built from three parts, and engagement is the smallest of them.
- Fit: how well the animal matches what this adopter has told us about their home — other pets, children, hours alone, garden, experience level. This is most of the weight.
- Need: length of stay, and whether the animal is in a cohort we know is under-surfaced. A dog past 90 days gets a floor on impressions that decay cannot take away.
- Freshness: enough to keep new arrivals visible, capped so it cannot dominate.
The impression floor is the piece that did the work. Every animal past 90 days is guaranteed a share of listing slots, allocated round-robin rather than by score. It is crude and it is not clever and it moved long-stay enquiries by 3.4× in the first quarter.
What it cost
Session length fell 8%. Taps per session fell 12%. Both of those are, on our own stated terms, fine — we said we would measure adoptions that hold at a year, and by that number the change is clearly positive: long-stay placements up, and no measurable rise in returns for the cohort.
The uncomfortable part is that the first model was not a bug. It did what we asked. We asked for the wrong thing for eleven months, and the animals that paid for it were the ones with the least margin.