Neil Kandalgaonkar

hacker, maker of things

Your web app should never have a 'country' menu

1562 Americae-Gutierrez 02 01hrs-mid Badge-with-Monster-Fish-and-Ships
Here be dragons. (Image via Wikimedia Commons)

Programmers might assume there is a simple list of all the countries in the world. There isn’t.

For example, China and Taiwan don’t recognize each other as legitimate governments. If, for instance, your organization were to publish a list of “countries” which doesn’t include Taiwan, you may one day see Taiwanese activists with megaphones at your gates. If they publish a list of countries which does include Taiwan, then China might do something crazy like ban you otherwise hamper you from doing business in the PRC. This really does happen to tech companies.

And it’s why you should never label an ISO-3166-derived dropdown as “Country:”. First of all, it’s wrong, because Puerto Rico is not a country, and secondly you have all these sensitive political issues. Instead use “Location:”, or don’t even label the damn menu at all.

ISO 3166 is a very useful standard because it just says it’s a list of “countries and their subdivisions”. Quite deliberately, it doesn’t say what is really a country and what is just a subdivision.


A version of this was posted to Reddit’s r/programming.