Last year for the annual Board of Directors election we used Zoomerang as our e-voting solution. It’s not the worst solution – easy to use, low cost, no real testing to do. But in practice it caused some pain. Quite a few emails to voters were lost to spam filters and we didn’t have a good way to help voters who didn’t get an email, or to resend to those that had not voted.
Going into this years election we were still in the same place. We’ve made some progress in other areas, but no solution (especially one for DNN) could be found that met the requirement to let voters pick a max of X choices from a list (for example, we might have 8 candidates vying for 3 seats, they can pick a max of 3). We talked about building something internally, but there is a serious backlog already and it couldn’t be done in time for the election.
As a board member I’m supposed to (and really, I do try) to stay strategic, but this is one of those problems where action seems necessary. I chatted with Hannes at HQ again to make sure I understood the requirements, and decided to set aside a max of 10 hours to build something. Maybe not perfect, but something functional enough that we could test drive on some board votes and use later this year.
Here’s a partial list of my notes:
- Restrict voting to eligible voters (determined separately)
- Voter can only vote once
- Each ballot should require a minimum and maximum number of choices, allowing it to work for both the general election (as above) as well as board votes (yes/no/abstain).
- Need a way for voters to gain access if they didn’t get the email
- Not rely on them logging into to sqlpass.org – we get into the problem of which email address did they register with. That means a URL querystring reasonably unhackable
- Have a closing date
- A way to notify voters multiple times (configurable) about a ballot on which they have not yet voted.
Ten hours isn’t much. That was for database design, coding, testing, deployment. I’d have to shortcut a lot to get it done in that amount of time. Why ten hours? It was all I could squeeze into my schedule. It also made me focus on getting something done now.
As far as db design, it’s a nice small project. Got a few minutes? Go design the tables to support a voting scenario similar to the above (and note how long you spend doing it!). Tomorrow I’ll show you my design!