-
Notifications
You must be signed in to change notification settings - Fork 29
Description
What's your idea?
Gap
The Geek.Zone/Election occurs every year to give all members the opportunity to select the Trustees who they wish to represent them for the coming twelve months. Organising this is currently done manually, which clearly takes significant time and can be error-prone.
Timeframe
Hard deployment deadline: 2023-07-01T00:00
The service must be tested and ready for production use by 2023-07-01T00:00 ahead of the Call for Returning Officer on 2023-08-06.
Requirements
Summary
Design and build a service that allows elections to be organised automatically within Geek.Zone/Web, and then votes to be collected via an external provider.
P1
- create the election with the chosen electronic voting provider.
- check candidate eligibility
- candidate must have been a member for >5 days before Call for Candidates
- email must be confirmed
- get all data from the election once voting has concluded.
- collect all required information from each candidate
- name of Trustee seat
- hustings video (maximum 3 minutes)
- proposing member
- Commitment confirmation
"I confirm that I understand the responsibilities of this post and am willing and able to commit to executing its duties to the best of my ability for 12 months."
- post hustings videos to the Geek.Zone Elections YouTube channel on "Publish candidate profiles"
- inform members via the required medium at the appropriate times (see Schedule below).
- allow the Returning Officer to approve or reject the election setup. If no response, assume approved.
- allow the Returning Officer to approve or reject the election result. If no response, assume approved.
P2
- telephone number should be confirmed (requires telephone number validation #50)
- add members to the Trustees group (requires Member groups #47) if elected.
- remove members from the Trustees group (requires Member groups #47) if not elected.
- hustings videos should be automatically transcribed for captions
- postal address should be confirmed (requires Postal address validation #49)
P3
- If >1 members offer to be Returning Officer, the nominated returning officer should be the member whose membership start epoch time is the smallest.
- Add the Geek.Zone video ident to the start and end of each hustings video
- Automatically reject hustings videos if they contain profanity.
- Automatically reject hustings videos if they contain nudity.
P4
- Ask incumbent Trustees that are not constitutionally required to retire if they wish to stand for re-election (see Re-election below)
Constraints
Seats
The Trustee seats available for election are as follows.
| Name of Seat | Number of Officers |
|---|---|
| Chair of Trustees | 1 |
| Treasurer | 1 |
| Secretary | 1 |
| Trustee for Geek.Zone/Coventry | 1 |
| Trustee for Geek.Zone/London | 1 |
| Trustee for Geek.Zone/Chelmsford | 1 |
| Trustee | ∞ |
Voting Methods
- All candidates stand against Ron Weasley - Re-open Nominations. If Ron is elected, the election process for that seat starts again.
- For seats that can have more than one officer, candidates only stand against Ron.
- Elections must use the best proportional representation method available. The Meek STV is preferred.
Providers
We must use an external GDPR-compliant electronic voting provider to conduct the election to ensure impartiality. Everything else should be done within Geek.Zone/Web to ensure ease of use.
You will need to find an electronic voting provider who can satisfy the requirements of this epic. Previously, we have used OpaVote to conduct our elections, however, they do not provide an API that can create elections. While we would like to continue to do so, on 2020-07-18 when asked if they had any plans to extend the API so that we can automatically create an election, OpaVote replied "Yes, but not soon."
Schedule
The Election & AGM schedule is as follows.
| Event Description | Communication Medium | Recipient | DateTime |
|---|---|---|---|
| Call for Returning Officer | Update Email Blog Post |
All members | 30 Days before Call for Candidates |
| Call for Candidates | Update Email Blog Post |
All members | 30 Days Before Notice of Election |
| Notice of Election | Constitutional Email Blog Post Wiki article |
All members | 20 Days Before Voting Commences |
| Call for candidates closes | Secure API | Electronic voting provider | Immediately before Create election |
| Create election and populate with required data | Secure API | Electronic voting provider | Immediately before Election Setup Verification request |
| Election Setup Verification request | Returning Officer | 2 days before Voting Commences | |
| Publish candidate profiles | Wiki article | Public | Immediately before Voting Commences |
| Voting Commences | Update Email Blog Post |
All members | 30 Days Before AGM |
| Notice of AGM | Constitutional Email Blog Post Wiki article |
All members | 20 Days Before AGM |
| Voting Reminder | Update Email Blog Post |
All members | 15 Days before AGM |
| Voting Reminder | Update Email Blog Post |
All members | 5 Days before AGM |
| Voting Concludes | Update Email Blog Post |
All members | 2 days before the AGM |
| Election Result Verification Request | Returning Officer | 2 days before the AGM | |
| AGM start | Update Email Blog Post |
All members | Last Saturday, every November, 19:00 |
| Publish election result if Returning officer has approved | Wiki | Public | 1 hour after AGM start |
Re-election
It is required by the Geek.Zone/Constitution that "one-third of the trustees shall retire from office" ahead of each AGM. To ensure transparent democracy as well as simplicity, we have thus far taken the convention that all Trustees voluntarily stand for re-election every year, regardless of whether they are constitutionally required to do so.
User Story
As the Returning Officer, I want the administration of Geek.Zone elections to be automated so that I can focus on my core duties.
Impact
High
Urgency
Now
Code of Conduct
- I agree to follow this project's Code of Conduct
Please note!
This is our biggest requirement, hence the epic label. Please split this ticket into child tickets that you can do in one sitting.