Inspiration

Voord is an app for preferential order-based voting. It's inspired by the never-at-all-controversial voting algorithm used by the international juries at the Eurovision Song Contest. It's also a pretty good workout for the fairly new Spectre.Console open source library, which creates very attractive C# console applications that can be run from the command line.

A Voord is also a slightly sinister monster from 1960s Doctor Who (pictured above).

What it does

Run Voord from the command line. For a full explanation of the command line interface (there are four simple commands), please refer to the project GitHub page.

Create a poll with multiple options or candidates, for example:

  • deciding where to go for a staff outing
  • voting for a committee post
  • awarding points to acts in an international song contest.

A juror can access a given poll, and they are then asked to rank all the candidates in preferential order from worst to best. If the juror is happy with their preferences they are committed to the poll.

In a poll of n candidates, if a juror awards candidate c a rank of r, the candidate is awarded y points, where

y = 100 - (100 * (Log (base n) r)

This means that the first placed (i.e. 1st) candidate gets 100 points, the last placed candidate gets 0 points, and the intermediate candidates are assigned points across a logarithmic distribution.

All the points for each candidate are added up, and the candidate with the most points is the winner of the poll!

You can view the results of a poll at any time, and the app will render an attractive multicoloured bar chart and table of results.

How we built it

I worked solo. I build a skeleton app using the Spectre.Console library, which uses a few simple services. I defined the service APIs and entity classes before I did any coding. I started out doing semi-rigorous test driven development but this quickly fell away as I raced to get the entire application working!

Challenges we ran into

Nerves, panic, tiredness, autism meltdowns, and trying to define a viable application scope that could be achieved in the time limit.

Accomplishments that we're proud of

Frankly, I'm proud that I stayed through to the end of the hackathon and got something finished and working.

What we learned

I learned how to work at speed, how to revise project plans on the fly without losing sight of what makes a Minimum Viable Product, and I gained a heck of a lot of confidence.

What's next for Voord

Voord currently doesn't have a lot of input validation (e.g. ensuring poll candidates are unique), so this is an obvious and straightforward candidate for the next step to take with the project.

The app has a pretty clean structure, so the software service code that does all the voting functionality can easily be reused with a different front end. I would be really keen to develop a web app front end for Voord, ideally using Microsoft's Blazor technology (dynamic web apps written mostly in C#). This could also let users attach images to candidates, which would improve the user experience. I would also like to rework the data persistence layer so that, instead of JSON, it uses a relational database.

Built With

Share this project:

Updates

Submission history