Show the gap, don't fill it
Where no verified figure exists, the board says so, “No figure at this level clears the bar”, instead of backfilling with an estimate. Croatia has no city rows. That is the finding, not a bug.
I was asked for a heat map of where six diaspora communities live in Germany. The data to draw one doesn't exist at that resolution, so I built a departures board that shows exactly what the registers can prove, and says so out loud when they can't.
VFR, or visiting friends and relatives, is travel driven by community, not campaigns. For six routes, the question was simple: which German cities are home to the Bulgarian, Romanian, Albanian, Kosovar, Serbian and Croatian communities behind them?
I'd already mapped each catchment area in Miro using research assisted by AI. My manager's next request was to turn it into a heat map that pinpoints exact cities, down to the neighbourhood.
Before drawing anything I walked down the ladder of geography to see where the data stops. Pick a rung.
So the honest answer to “draw me a heat map” was no. It would have implied a precision the data can't back. The better answer was to design something that shows the resolution it actually has.
The Miro boards leaned on research generated by AI. If the board was going to be quoted in official documents, every number needed a primary source behind it. I checked each claim against Destatis, IT.NRW, the Baden-Württemberg statistics office and the cities' own reports.
Confirmed at 121,995. The claim was right, it just had no source. Now it does.
Checked against: Statistisches Landesamt Baden-Württemberg, 31.12.2024
This is the working prototype, rebuilt for this page. Click a route to open it, switch between state and city level, and hover a bar to read its source. Then give it a new skin.
The original dark and amber look
Up 3.1% in the last year and up 15.1% since 2022. Destatis AZR, each 31 December. The axis is zoomed and doesn't start at zero.
NRW, Kosovo · 72,655 · State · as of 2025
GOV: Straight from Destatis, IT.NRW, a state statistics office or a city's own report
IT.NRW / Statistik.NRW: Ausländische Bevölkerung nach ausgewählten Staatsangehörigkeiten (Top 15), 31.12.2025Citizens who naturalise leave the foreigner count but still travel home to visit family, so a flat or shrinking total can hide a stable market. The June 2024 citizenship reform (StARModG) allows dual nationality.
What's missing: Kosovo has a clean Destatis national figure and an official NRW one. Albania has no standalone entry in NRW's Top 15, so Baden-Württemberg's 19,145 is the only official Albanian number here.
A palette with two hues can't give five routes five colours, so routes are separated by shade and each keeps its airport code chip. Source tiers are shapes, not colours, so they read in any skin.
My first answer to “heat map” was a schematic Germany with proportional bubbles. It looked wrong and wasn't interactive. Worse, an outline of the country implied a precision the data didn't have.
I dropped the map and borrowed the metaphor of the thing the work is about: a departures board. One row per route, numbers that flip like a split flap display, ranked bars that open on click, and a comparison across routes.
The numbers had to survive being quoted in official documents. Wikipedia went. Every national and state figure now comes from Destatis, IT.NRW or a state statistics office, and every bar carries a GOV, PRESS or EST tier.
Each route gained a 2024→2025 arrow and a trend line from 2022 to 2025, plus a naturalisation note: citizens who naturalise leave the foreigner count but still fly home to visit family, so a flat total can hide a stable market.
A new skin in the organisation's palette to test whether the board could carry a real brand. It could, because colour, shape and type were tokens from the start.
Where no verified figure exists, the board says so, “No figure at this level clears the bar”, instead of backfilling with an estimate. Croatia has no city rows. That is the finding, not a bug.
Each bar carries GOV, PRESS or EST, as a shape rather than a colour so it survives any skin. A reader can tell a register figure from a relayed one at a glance, and quote accordingly.
The trend lines are zoomed to show movement and don't start at zero, because 0.5% on a zero axis is invisible. The chart says so beside the data rather than hoping nobody notices.
The naturalisation note exists because a foreigner count only ever shrinks as people become citizens. For a VFR question that's the wrong direction to be blind in.
“That data doesn't exist” is a dead end on its own. Paired with a board that shows exactly what does exist, it became a more useful answer than the heat map would have been.
Of seven claims I checked, two held, one was wrong by more than half, one was softened, two couldn't be sourced at all and one rested on Wikipedia. The checking was the work.
Every route has a “what's missing” note beside its data. It's the part of the board I'd defend first.
Figures are citizenship counts from the Ausländerzentralregister, not ethnicity. Naturalised citizens aren't captured, so every total understates the real diaspora.