Board Elections for Credit Unions
I created a solution that enables qualified credit union members to elect board members using a mobile app, an online banking website, or an in-person kiosk.
Overview
Credit Unions are somewhat unique in the corporate world. They are owned by their members. Their members elect a Board of Directors who volunteer their time to manage the affairs of the credit union.
The volunteers hold positions on the Board of Directors for set terms – usually from 2 to 5 years. When a volunteer’s time is up, she or he can choose to run again for another term. Other credit union members can also campaign and be elected to the position.
An election is typically held once per year if there are board members whose terms have expired and there are other members who want to fill the position.
I was tasked with creating an online election system for the credit union.
Features
Mobile App Voting
Qualified members can vote in the credit union's mobile app. The credit union used Alkami's banking platform. I wrote a "widget" for that platform to facilitate voting on that platform.
Online Banking Voting
Qualified members can vote in the credit union's online banking platform. Over the years, the credit union used Alogent and then switched to Alkami's online banking platforms. I wrote the voting system for both.
Passwordless In-Branch Voting
Qualified members can vote in person in the credit union's branches. The system did not require the member to be registered in the online banking platform to vote. The member was qualified by entering their account number, tax id, and birthdate. The system verifies the details the member enters. Then it presents the member with a ballot to vote with.
Candidate Biographies
When voting, the system presents the member with a list of candidates for each available position. The candidate information includes their name, a photo, and a statement of their qualifications. The member can choose which candidate(s) they would like to vote for.
Member Qualification
The system uses a SOAP API called "SymXchange"" to communicate with the Core processing system to check that the member is qualified to vote. There are several criteria that the member must meet to be able to vote.
My Involvement
I was the sole developer on this project. I worked with a Senior Vice President at the credit union to determine the requirements for the project. Then I developed the entire system myself including front end (HTML, CSS, Javascript, etc.), back end (ASP.NET MVC, C#, web services, Entity Framework) and database (SQL Server). I was also responsible for deploying the project to the web servers, working with the online banking vendor to get my code installed on their system, and setting up the database on the SQL server. I also worked with a few others in the credit union to test the system and make sure the in-branch voting systems were ready for election day.
Process
After determining the requirements for the solution, I created a new solution in Visual Studio and a new repository in our in-house Git server. I created a rough schema for the database in SSMS and then generated code-first objects and context in Entity Framework based on that schema.
Then I began building out the service layer and the web service on top of that. At the time, WCF was the standard for web services so the solution was initially developed using that. It was later upgraded to a REST service. The service layer also communicated with the SOAP service hosted by the Symitar core processing system.
Finally, I built front end projects for the in-branch system, the online banking system, and the mobile app. These are all ASP.NET MVC projects using HTML5, CSS, and Javascript.
To keep things simple, I stored the candidate photos as a blob in the SQL server and then made sure the image endpoints were caching that binary data when they went to retrieve it to generate an image. This made it easier as so many front ends would need that image data.
Testing
After completing development, I created new web server instances in our test environment for the web service endpoints and the in-branch front end. I also worked with our online banking vendor to get my code deployed to the staging environment in their app and websites.
I worked with several people in the credit union to test the system thoroughly before I deployed it to our production environments.
Results
The credit union has held six elections so far with this system. Every election has been completely flawless with no errors or problems reported.