2018 - present
Elements teamed up with long-time partner KPN to develop StembureauApp (PollingStationApp), a scalable and multi-platform solution to assist and support polling station staff before and during the elections in the Netherlands. It is now used by sixteen Dutch municipalities at over 2.500 polling stations.
StembureauApp consists of a front-end application, a lightweight mobile app for iPad and Android tablets and a fully scalable back-end built in Python/Django running in a Kubernetes cluster.
What we did
Python/Django back-end, Kubernetes, Angular front-end, native mobile app development for iOS and Android
On election days, the chairman and other staff of a polling station traditionally did all the work manually. To keep track of the number of accepted voters (and thus handed out ballots), maintaining contact with the city hall and the counting process was all done with paper and pen and by phone. The polling station chairman needed to manually check each voter’s voting pass number against a physical blacklist of all invalidated numbers. As to be expected, this whole process is time consuming and prone to errors. Especially after a long and tiring election day.
Enter StembureauApp, a software tool internally developed by the city of Rotterdam in 2014, used for all their elections to date and shared with a few other Dutch municipalities.
With StembureauApp, the chairman can now quickly validate voting passes by simply scanning the printed QR code, engage in a direct chat with the elections’ support desk, complete checklists and perform a quick vote count at the end of the election day. This results in more efficient processing of voters, a higher quality of counting and quicker published turnout figures.
As the user base and feature requests grew, a tender was published to select an external technology partner. The tender aimed to make the application scalable, for further expansion, and multiplatform, as the app originally only supported iOS. The tender was awarded to KPN and Elements in January 2018.
We rewrote the legacy back-end application, built in Java and Oracle, from scratch in Python/Django with a PostgreSQL database. A lot of effort was put into making the application scalable by making it containerized and having it run in a Kubernetes cluster. New lightweight native apps for iOS and Android were built and the Angular front-end was updated.
As we were rebuilding the back-end application from the ground up, we could adhere to the principles of security by design by implementing security measures in the application and infrastructure from day one.
Hosting moved from Rotterdam’s premises to AppFactory, KPN’s premium continuous delivery cloud platform.
The use of the StembureauApp for the elections in 2018 and 2019 were a huge success. Across the participating municipalities, the app was used in more than 1,300 polling stations, where almost one million voters had their voting passes scanned.
Due to the Covid pandemic and the new health measures established by the Dutch government, the 2021 elections are going to be held during a 3 day period instead of just one. This change aims to give more time to citizens to cast their vote. We have had to quickly adapt StembureauApp to make it work in this new setting. The app was designed around the idea that elections take place during one unique day. Implementing these changes with the minimum friction to avoid major breaking changes has been a real challenge due to the strict timings and the technical complexity of the application. In essence, we have generalised the app's database structure in a way that allows to run elections for any number of days so that StembureauApp can now work in both settings.
The key accomplishment of this project is the transformation from a non-scalable, single-tenancy back-end and separate, tailor made mobile apps for each municipality to a horizontally scalable, multitenancy back-end and generic, multi-platform mobile app. StembureauApp is now ready for deployment of any number of new participating municipalities at a click of a button.
Participating municipalities are very happy with the more efficient voting process. They experience less mistakes and can share the number of voters much quicker.