Skip to main content
Jonathan Andrei
Back to all posts
Aug. 202610 min read

Still Here: Everyone Believes Black Dogs Get Left Behind. I Checked 99,916 Shelter Records. They Don't.

510 dogs have an intake record at the Austin animal shelter and no outcome record. Still Here is the board, ordered by how long they have waited. The one at the top is Pancho, 449 days. Then I went looking for the reason the dogs at the top are the ones at the top, and the answer surprised me: black dog syndrome does not appear in 99,916 completed stays — the colors that wait are the coats bully-type dogs come in. Hold breed constant and coat moves the median by at most 7.5 days; change the breed and it moves by 20.

WeekendChallengeDogDaysSnowflakeElevenLabsAustin Animal CenterData AnalysisPythonShowDev
I created this post and the Still Here project for the DEV Weekend Challenge: Dog Days Edition. #weekendchallenge #dogdays #snowflake #elevenlabs #showdev
The claim in one sentence: black dog syndrome, the belief that a dark coat keeps a dog in the kennel, does not appear in Austin's records. Across 99,916 completed dog stays since 2013, black dogs leave in a median of 9 days, faster than white, brown or chocolate. The colors that do wait are blue, brindle and fawn — the coats bully-type dogs come in. Every bully-type coat lands between 25 and 32.5 days, every other coat between 7 and 11. The two bands never touch. Bully-type dogs wait a median of 28 days against 8 for every other dog, and 216 of the 510 dogs on the board today are bully-type.
Still Here landing card on a dark newspaper-style page: 'The adoption site will show you a dog. It will not tell you the dog arrived four hundred days ago. Austin publishes that number, just never next to the animal it belongs to.' Below is Pancho's card: Cairn Terrier · White/Black · Male, intake 2025-05-23, breed group 'Everyone else', cohort median 8 days, LONGEST WAIT ON THE BOARD in giant gold serif digits: 449 DAYS WAITING. Buttons: 'Hear from Pancho' and 'Share this dog'.
The dog at the top of the board is Pancho, a white Cairn Terrier picked up as a stray on May 23, 2025. As of the last data pull he had been there 449 days. 99.7% of the dogs in his breed group were adopted in less time than he has already been waiting. Austin publishes that number in its open data feed. It prints it nowhere near the adoption page.

The claim I set out to check

If you have spent any time around animal shelters you have heard of black dog syndrome: the belief that black dogs sit unadopted while lighter dogs go home. It is repeated in shelter training material, in local news segments, and in a great many well-meaning adoption posts every October. It is a genuinely checkable claim, and Austin has published enough records to check it. I pulled every completed dog stay the city has released since October 2013 and reconstructed how long each one lasted: 99,916 stays, of which 51,413 ended in adoption. Then I took the median wait for each coat color.

Horizontal bar chart titled 'You have heard that black dogs get left behind'. Subtitle: 'It is the most repeated claim in animal sheltering. I checked it against every completed dog stay Austin has published since 2013: 99,916 of them, 51,413 ending in adoption. Here is the median wait by coat color.' Bars: Blue 22d, Brown Brindle 16d, Fawn 16d, Brown 10d, White 10d, Chocolate 10d, Black (highlighted in gold) 9d, Red 9d, Sable 8d, Tan 8d, Yellow 8d, Tricolor 7d.
Black dogs are in the fast half. 13,922 of them, leaving in a median of 9 days, quicker than white, brown or chocolate. The myth does not survive its first contact with the data. That much matches published research — a 2016 study by Hoffman and colleagues in Animal Welfare looked at nearly 16,700 records across two shelters and found black dogs left slightly faster than average at both.

The colors that wait are the colors pit bulls come in

But there is something much more interesting sitting in that same table, and it took me a second pass to see it. Look at the top of that list again. Blue, brown brindle, fawn. Those are not random slow colors. They are the coats you picture when you picture a pit bull. So I split every color by whether the dog was a bully-type breed, meaning pit bull, Staffordshire, or American bulldog.

Two horizontal bar charts on a shared scale, titled 'It is not true. And the reason is hiding in the same table.' Left chart 'Bully-type dogs', median days by coat: Brown 32.5d, Black (highlighted gold) 31d, Tan 30d, White 29d, Red 27d, Chocolate 26.5d, Blue 26d, Brown Brindle 25d. Right chart 'Every other dog': Brown 9d, Black (highlighted) 8d, Tan 7d, White 8d, Red 8d, Chocolate 8d, Blue 11d, Brown Brindle 11d. Callout: 'Every bully-type coat lands between 25 and 32.5 days. Every other coat lands between 7 and 11 days. The two bands never touch: the fastest bully-type coat is still 14 days slower than the slowest coat outside the group.'
The two columns do not overlap anywhere. Every bully-type cell is between 25 and 32.5 days. Every other cell is between 7 and 11. Within a breed group, coat color moves the median wait by at most 7.5 days. Changing the breed group moves it by 20. Black only looked fast in the first table because black dogs are the least likely to be bully-type — 12% of them, against 81% of the blue ones. The color signal was a breed signal the whole time. A black dog that is not a bully breed waits 8 days. A black pit bull waits 31.

Across the whole corpus: bully-type dogs wait a median of 28 days, and every other dog waits 8. That is 3.5x, on 9,658 bully-type adoptions against 41,755 others. And it is not a historical curiosity: of the 510 dogs sitting in that shelter today, 216 are bully-type. Four of the five longest waits on the board right now are pit bulls.

Second bar chart section: Pointer 11.5d, Australian Cattle Dog 11d, Labrador Retriever 11d, German Shepherd 11d, Australian Shepherd 9d, Great Pyrenees 9d. Below, a 'METHOD · How this was counted' section begins with 'WHERE THE DATA COMES FROM' explaining Austin Animal Center publishes intakes and outcomes as open data on Socrata, no API key required. Two eras with two different schemas: an archive frozen at 2025-05-05 (wter-evkm, 9t4d-g238) and current feeds that replaced it (pyqf-r2dc, gsvs-ypi7), refreshed hourly.
The method is on the page next to the finding. Two eras of Austin's data, different schemas, joined at the animal-ID level. Length of stay in the archive is reconstructed by pairing each outcome with the most recent intake preceding it (652 outcomes could not be paired and were dropped rather than guessed at). Medians throughout, because length of stay is heavily right-skewed — the mean bully-type wait is 66 days against a median of 28.

The thing the adoption site does not tell you

Austin publishes, in open data, exactly how long every dog has been in its care. Its adoption site shows none of it. I checked the listings the city actually serves to adopters. A listing carries breed, sex, size, age, kennel number, and a set of behavior tags. There is no intake date on it, no length of stay, and no way to sort or filter by either. There is a manual 'Long-term resident' tag a staff member can tick, but nothing that gives you a number. So a person browsing Austin's adoption page can look straight at Fritz and have no idea he arrived on May 28 of last year. Both halves of that are public. They are just never printed next to each other. Still Here is the join.

The contact sheet: a grid of dog cards showing real faces pulled from Austin's own Adopets listings. Search bar for breed/name/coat, filters ALL / BULLY-TYPE / EVERYONE ELSE / OVER A YEAR / UNNAMED, '510 dogs on the board · showing 60 of 510'. Each card carries the dog's rank number, photo (or a silhouette placeholder if none), name (Pancho, Fritz, Emmitt, Walter, Whitley, Paxton, Hank, Marshall, Mariah), a giant number of days waiting (449, 444, 440, 436, 431...), breed and coat, intake date, and BULLY-TYPE tag where applicable, plus a percentage line 'X% of similar dogs were home by now'.
One frame per dog, ordered by how long each has been waiting, on a page that carries that wait: the longer a dog has been here, the more it has burned into the plate. Photographs come from Austin's own adoption listings via ID join (377 of 510 dogs; the 133 without a photo are mostly recent arrivals still inside a mandatory stray hold, median 20 days vs 84 for the listed ones). Clicking a dog opens the page where you could actually adopt it. 23 of them read their own record aloud, marked with a Hear button.

The stack, and the two scripts that matter before publishing

Every number on the site comes out of a Snowflake view. The corpus loads through an internal stage rather than row-by-row inserts. `IS_BULLY()` is a SQL function, so the single judgement call in the whole analysis sits in one auditable place instead of being scattered through application code. `WAITING_RANKED` ranks each of the 510 live waits against all 51,413 completed adoptions in that dog's breed group; that is the number on every card, and it is the part that actually wants a warehouse. `verify.py` and `factcheck.py` are the two scripts that matter before shipping. The first re-runs every headline question in Python and diffs it against Snowflake (102 checks). The second re-reads `stats.json` and asserts each number quoted in the README and post — because a figure written on Saturday and a pipeline re-run on Sunday is exactly how a writeup ends up lying about its own data.

A second dog card, Canela: a Rottweiler mix (Black/Brown, Female) with a real photo — smiling black-and-tan dog on grass. Intake 2025-09-26, came in as Agency, breed group 'Everyone else', cohort median 8 days. Big gold '323 DAYS WAITING' with a caption 'Pinned. Longest is Pancho, 449 days.' Buttons: 'Hear from Canela' and 'Adopt Canela'. Below: '99.3% of the dogs like Canela in this dataset (same breed group) were adopted in less time than Canela has already been waiting.'
Each of the longest-waiting dogs reads its own record aloud via ElevenLabs. Nothing a dog says is invented: every clause maps to a column (name, coat, breed, intake reason, intake date, elapsed days, cohort percentile, cohort median). Phrasing varies between dogs but is selected by a hash of the animal ID, not randomly, so re-running produces byte-identical scripts. The board moves: between two runs a day apart, nine dogs came off — seven were adopted, one was reclaimed by an owner who came looking, and one was transferred to a partner rescue. Baxter had been waiting 71 days and went home on the fifteenth.
Related project

Still Here: 510 Dogs Have an Intake Record at Austin's Shelter and No Outcome Record. Black Dog Syndrome Does Not Appear in 99,916 Stays. The Color That Waits Is Whichever Breed the Coat Belongs To.

View the project