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.
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.
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.
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.
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.
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.
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.
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.
The credit union has held six elections so far with this system. Every election has been completely flawless with no errors or problems reported.