One of the more eye-opening things I’ve ever done as a software dev was building and maintaining a reusable UGC vote/rating API. I learned a lot — in particular, I learned that there is not really a “right” way to count votes.
Or, more accurately, there is not really a “right” way to collect votes, and counting them is a function of what you want to learn and what decision you want to make based on the information.
When I designed my systemm I discovered was that simple foundations for data collection and decision making — Do I need five stars or one? should I collect ranked preferences or single-choice? — were a foreign language to most system-designers.
I wasn’t a statistics guy, but I ended up getting a crash course as I tried to support what I’d thought would be a pretty simple open source tool. I learned (for example) how easily small voting pools can be gamed by enthusiastic fan-groups.
I think caucuses are a mess in the context of a large democracy trying to elect a leader, but the most obvious “WTF?” moments (coin tosses, double the votes producing the same number of delegates, etc) seem to be the obvious results of asking too much of an idiosyncratic system.
Even simple and obvious systems have counter-intuitive outcomes at their edge cases, and the stakes for elections are high enough that many candidates are incentivized to game those edge cases.