A few members have asked how it is that the online vote process is anonymous even though we know what ballots they submit. Following is the logical breakdown of how the vote information is recorded.
Engineers Geoscientists Manitoba uses a relational database to store information. This is essentially a set of tables with well defined meanings that may be linked to each other and queried to extract specific information. We maintain the anonymity of vote results by separating elements of a vote across a few tables without saving any links between these tables.
There are three essential tables for storing vote results, and two extra tables:
For many years the paper ballot process has been tallied using special election counting software. This software is configured to count according to the rules of Proportional Representation, which was described in the voting preamble/cover letter and also Rules for Counting Votes and Ascertaining the Results of an Election. The format that is fed into this software is a text file with each line representing a sequence of candidate rankings. So the table that stores this information consists of a Ballot Identifier, representing "this year's P.Eng. candidates" for example, followed by a candidate ranking. These values are saved in the order they are received, one row for each council ballot submitted by a member.
The By-law proposal votes are counted with a straight forward For/Against/Abstain summation. The table that records By-law votes consists of a By-law Proposal Identifier, representing "the CPD program" for example, followed by a value representing a 'For', 'Against', or 'Abstain' vote. These values are also stored in the order they are received, a set of rows for each By-law ballot submitted by a member.
Each time a ballot is submitted we also store a Ballot Identifier and Member Identifier pair in another table that has no relation to the vote tables. This table is used to restrict members from submitting a ballot twice. These values are clustered by Member Identifier to break the sequential ordering between the vote tables and this table.
We decided to include an anonymous feedback table that stores any comments a member would like to relay back to the Association after they have submitted all their ballots. This table lists the feedback and a timestamp when it was submitted.
We also decided to include a ballot submission timestamp table that contains a single timestamp column filled each time a ballot is submitted. This is just 'nice to know' administratively, and is used to produce a graph of response rate published on each year's vote results web page.
Another somewhat related table is used to store who has requested 'paper' ballot packages by mail. This table is used to restrict members who have requested paper ballots from also submitting online.
Each time a ballot is submitted the member identifier, ballot identifier, and vote values are passed to a stored procedure that will update the database in the context of an 'all or nothing' transaction. First we check that the Member/Ballot combination has not already been submitted, then we record the vote, member, and timestamp values into their separate tables.
After voting is complete we produce the text files of P.Eng. and P.Geo. candidate rankings to be fed into the counting software to tally the Council election. Any paper ballot results are appended to the online results in the text file by the scrutineers prior to the tally. We produce another text file listing each By-law proposal and the For/Against/Abstain totals. The results are presented at the Annual General Meeting following the vote.
For any clarification about this page please ask Andrew at firstname.lastname@example.org.