Vote Squared - Quadratic Voting App
Built April-May 2020, mostly during the kids naps while I was at home with them due to COVID-19.
Deciding in Groups
Voting is the obvious way to decide something as a group.
When most people think about voting, they probably envision "first past the post", where everyone votes for one of two or more options, and the highest vote-getter wins.
But with more than two options, it's not at all guaranteed that a majority of people will prefer the winning option.
One option to deal with this is
voting, where voters rank options by order of preference and an algorithm uses that data to pick a winner. It's becoming
popular in the US
(definitely a good thing!), and NYC is set to adopt it in 2021.
While ranked-choice voting is a big improvement over first past the post, quadratic voting does it one better by allowing people to vote not only on their rank order of preference (Amash, Biden, Trump) but also the intensity of that rank (super high, meh, none).
It also penalizes extreme, inflexible preferences but giving you less votes overall.
My friends will occasionally vote on stuff (a good weekend to get together, new rule changes in our fantasy football league, etc).
In the past we've always done first past the post voting, which isn't ideal. I wanted to work on my web app skills and figured I might as well bring us into a more enlightened era of decisionmaking while I was at it.
The result is
. How it works:
Everyone gets a budget of
The more you vote for an option, the more it counts against your budget. Your first vote for any option costs
, the next
total for the two votes), etc.
If you want to use all your votes (5) on one option it'll cost you your whole budget and you won't be able to vote for anything else.
So say we're voting on best fruit. And have the options: apple, banana, pear, grape.
My first vote for apple costs
, after which I have
left to use on banana, pear, grape or more votes for apple.
From there, I can spend another
on my first vote for one of the other fruits, or
for my second vote for apple. A third vote for apple costs an additional
The total cost for n votes on any particular option ends up being n^2. With a budget of
, that means the most you can cast at most 5 votes for any particular option.
And more votes for an option eat up more of your budget. The end result might be something like this:
apple 4 votes ($16 total) banana 2 votes ($4 total) pear 2 votes ($4 total) grape 1 vote ($1 total)
So while a ranked order ballet would reflect the order of my preferences (apple, banana/pear, grape), quadratic voting is better because it gets across how much more I
like apples vs the other options.
I built the site using Elm for the front end and a simple Graphql API (using
, which I like a lot) for the backend.
I host both on my hobby $5 a month DigitalOcean droplet.
I send transaction emails using mailjet's free tier, which is OK, though I've had some issues with gmails spam filter so far.