It bothers the computer scientist in me that they set an artificial number as a contact limit. 2^16? Okay, they made a design decision that is problematic. But 10000? Obviously someone set an arbitrary limit based on their expert opinion about the number of contacts a person might need.
The moral of this story is that, when you pick an artificial number as an arbitrary limit, you should always pick a power of two. Or a power of two, minus one. When people hear that you can only have 65535 contacts, they'll probably assume there's a good reason.
> Obviously someone set an arbitrary limit based on their expert
Google is known to based their decisions on actual data, they probably noticed that most people were below eg 500 contacts and 99.9% below 9000 (or such) and decided that 10000 would be safe.
No, Its not arbitrary. In the above mentioned scenario, the decision is based on actual data points of the current system, with possible growth projections, and a judgement call from business perspective. Hardly arbitrary.
MS did the same thing with Live Mesh. Noticed that few people were using more than 2GB, so they cut the limit to 2GB.
Both of these seem like odd decisions. The people using more than your data driven limit are likely power users -- who are also probably your best evangelists.
Furthermore, given that so few are using beyond the limit, unless there is a technical reason to set the data driven limit, you incur virtually no cost to keep the limit high. In fact it argues that increasing it to unheard of numbers, ala gmail back in the day, makes more sense.
Again, there may be some technical reason they did this, which is fine. But if they looked at their data and saw that only 1% of their users had more than 10000 contacts, then they deserve to lose all those customers, plus the full wrath and bitterness they have as a result. They made a calculated decision to explicitly screw you over.
Or they did set a minimal speed target and are able to reach that target using the current systems/algorithms as long as everyone keeps their database under 10,000 contacts. 10,001 probably would work, but the programmers verified and are able to _guarantee_ the agreed speed with 10,000
I would consider a design problem like that a bit worse than an arbitrary limit, from both the perspective that the artificial limit demonstrates someone considered that edge case and the perspective that the arbitrary limit will probably be easier to change in the future. If they're storing the contacts in a way that they're bumping up against some real constraint, it could be far more difficult to change it.
A design problem could be motivated by the need to save space (and even 2 bytes per row would save google a lot of database space). Even google doesn't have infinite storage, and there's always going to be a real limit somewhere.
I am shocked that the "expert" was wrong.