Back to Blog
Features September 14, 2026 7 min read

Setting a Filter Removes the People Who Never Answered

Last week's article on deal breakers ended on a promise: the height, body type and education filters handle a blank profile their own way, and it deserved its own piece. It does, because their way is the opposite one, and both rules live in the same forty lines of matching code.

Two Questions That Look Like One

Every filter you set is a question the matching code asks of every candidate. The two kinds of filter ask different questions, and the difference only shows up when a candidate has left the relevant field empty.

A preference filter asks: does this person meet the bar?

Height range, body type and minimum education work this way. The code compares the candidate's value to yours. A blank value cannot be compared, so the comparison fails, so the person is removed. Silence fails the bar.

A deal breaker asks: does this person have the thing I cannot accept?

The code looks for the tag on the candidate. A blank list has no tags on it, so nothing is found, so the person stays. Silence cannot convict.

Neither of those is a bug and neither is an accident. The education filter carries a comment saying it excludes unknown values on purpose, matching the strict behaviour of the height and body-type filters above it. The deal-breaker code carries a comment saying it keeps blank profiles on purpose, because dropping them would shrink the pool for anyone who set a single deal breaker. Two deliberate choices, both defensible, pointing in opposite directions.

What That Means for the People You See

Set a height range and everyone who never entered a height is gone from your results, whatever their height is. Pick body types and everyone who left that field empty is gone. Set a minimum education and everyone whose education is unset is gone, because an unknown value ranks below the lowest rung of the ladder.

That last one is worth a sentence, because the ladder is ordinal. The code ranks education levels from a high school diploma at the bottom to a doctorate at the top, with a trade school and an associate degree sharing a rung, and a blank field ranking below all of them. So a minimum of anything at all is a minimum that the silent cannot meet.

The rule, in one line

Every optional field you leave blank removes you from every search that filters on it, and every filter you set removes everyone who left that field blank. The two halves of that sentence are the same fact seen from both sides of a match.

The Filter With Two Blanks

Distance is the one filter that depends on a field on both sides, and it fails differently on each.

If a candidate has no location, the distance filter removes them, as you would now expect. If you have no location, the distance filter is not applied at all. The code checks for your coordinates before it does anything with the distance you set, and if they are missing it moves on quietly. Your maximum distance is still saved, still shown back to you in your preferences, and consulted by nothing. Someone who has never set a location and wonders why their distance setting seems to do nothing is not imagining it.

The Two Fields That Cannot Be Blank

Age and identity verification are the exceptions that show the pattern. An age filter compares against a date of birth, and a date of birth is required to have an account, so there is no silent case: an age range removes only people whose age is outside it. The verified-only filter looks for an identity badge, and the only badge that exists is the one set by identity verification through Stripe, so the filter and the badge you see on a profile are reading the same record.

What to Do With This

  1. Fill in the fields you would filter on. If you would set a height range, enter your height. If you would set a minimum education, enter yours. The people whose filters you are trying to pass are running exactly the checks you are.
  2. Set a preference filter knowing it removes the silent. That is not a reason not to set one. It is a reason to know that the pool it produces is smaller than the pool of people who would actually pass, by everyone who never answered.
  3. Use deal breakers for the things that are really over. They are the one control that does not punish silence, which is why they are the right instrument for what you cannot accept and the wrong one for what you would merely prefer.
  4. Set your location if you set a distance. Without yours, theirs is never measured.

What this is not

Not a defect report. Strict filters and lenient deal breakers are each the right answer to the question they were built to ask, and the code says why in both places. The only thing that was missing was a page telling you which question each control asks, so that a smaller pool reads as a decision you made rather than a mystery.

Filters act on what people have said about themselves and nothing else. They do not read messages, they infer nothing from behaviour, and they are not a safety tool; safety is a different subject with different rules. The broader tour of the controls is in the filters overview, and if what you are trying to judge is a profile rather than a pool, reading a profile that was written to be liked is the page for that.

← Previous: Meeting Somewhere Public Is Not the Whole Plan Next: Hardballing →