One of my goals with the survey component was to ensure that it was extremely lightweight, consuming the absolute minimum of resources. Doing so requires not only a good database design and access patterns, but also necessitates the addition of potentially
error prone caching and optimization code: Building a little survey component is trivial, but trying to do so while ensuring that you hit the database as seldom as possible, all while personalizing for each user and avoiding “vote stuffing”, gets a lot more interesting
(and, quite honestly, fun. Straightforward projects are never fun).
I mention this because it’s always a tough debate – a good percentage of issues in the field have occurred because of this sort of optimization, with caching in particular being the root of a lot of issues.
As an aside, I don’t plan on sticking a survey on each and every entry – in fact they should be quite rare, such as when a topic is particularly contentious. The survey with this entry is just for fun.