This post is dedicated to one of the projects I was working in the last two months: V!ktor (the name is inspired to the latin victor: winner). The typical app user is the president of a voting section, who has the responsibility to collect and send affluence data throughout the voting sessions and results after the final counting operations.
V!ktor has been successfully employed in the first turn (May, 7-8th) of the elections of the Mayor and of the City Council in Bolzano (Italy) and will be used again for the second ballot (May 21-22nd).
Here you can see V!ktor in action (the demonstration video shows the main functionalities):
Some aspects of this project are very interesting from a professional point of view. Let’s have a brief look to the most important ones:
Tight schedule and strict deadline
Only two months have passed between the order and the delivery of the V!ktor project. A very brief amount of time if you think that we had to deal with pre-existent backend services and data model (to avoid having a too strong impact on existent software systems).
In addition, the deadline was obviously strict: the election day was already set and we wanted to have some time to properly test the application, gain some confidence about it and have a chance to set up some training for the final users (we knew they would have been a group of 80 people, very heterogeneous).
Considering the very short time to market and the fact we could have taken no assumption about the final user (quite a typical situation also when you build applications for the official app stores), we spent a lot of care to deliver a high quality user experience. We wanted to build a clean and minimal UI, adopting a few graphical conventions and making them consistent throughout the whole application. Data input (almost all data was numbers) should have been as smooth as possible and data validation had to be precise yet easy and fast for the final user.
Some more complexity was added to this project by the fact that the app had to be bilingual (italian and german) in all text parts (captions, labels and messages) and the ability to swap between languages on-the-fly was required. And to complete the picture, the current italian law does not allow training for presidents of voting sections. We only had a chance to set up some short training sessions they could attend on a voluntary basis (and only in the days immediately preceding the elections, for logistic issues).
Prior to the V!ktor project, all of the data had to be collected and communicated using paper forms. Now V!ktor has completely replaced the paper forms (except for the final summary document, that has a strong restriction about the format according to the current law). This means that V!ktor application has become a central part of the formal proceedings of the voting section. Obviously, we had to deliver a good quality application in terms of stability and reliability. It is very important the user to always have a chance to proceed through the operations without getting stuck somewhere and need to wait for assistance (however an help desk was ready to cover any inconvenience). For example, it was included in specification the user should have had a chance to repeat the transmission of data more than once and also that the application should have been able to work in a condition where data connectivity was intermittent or absent for a while.
This has a significant impact on the design of the application and we also had to deal with the fact that most of the operations would have been simultaneous among a good percentage of the users (the communications were scheduled at certain time of the days).
Last but not the least, we had to think about a configuration mode able to support a reasonable kind of security (to avoid accidental or malicious changes in the configuration) but also a good flexibility (for example, to allow a quick change of a broken device or a remote reset of application data in case of severe malfunction).
Pre-existent services integration
The Municipality of Bolzano, a high-level entity from a technology point of view, already had developed some software systems used to manage election’s data (for example to perform checks and statistical analysis and to serve data to a public website). We decided together to preserve those systems (also because of strict timing of the project) from unnecessary changes. Under the guidance of the domain experts involved (including the Project Manager, Sergio Sette), we tried to reduce the impact of introducing the mobile app as far as possible.
Thanks to the precious skills of some team members (particularly, Nando Dessena and Paolo Scapin), we set up a REST protocol to exchange data between V!ktor and a Java backend system (well integrated with the IT infrastructure of the Municipality).
Geographically distributed team
Distributed work and teams are quite popular nowadays. This project surely is an example about how it is possible (even if not trivial) to build complex software systems without having to be all in the same physical room.
A good mastering of collaboration tools (shared documents, Skype, calendar and e-mail) and a distributed version control system (Git) is the key to achieve a good success while working with a geographically distributed team (we were hundreds of kilometers distant each other).
It was a real pleasure to work within this team. Team members are very precise and skilled. Indeed every one of us has been crucial to the get to the final target and we all are happy with the results. Here are the team members, alphabetically listed:
- Nando Dessena, Developer (Delphi, mobile app)
- Enrico Giranio, Domain expert (Backoffice)
- Andrea Magni, Developer (Delphi, mobile app)
- Paolo Scapin, Developer (Java, backend services)
- Sergio Sette, Project Manager and IT Manager of Municipality of Bolzano
A very special thanks is due to all the people involved in the logistics of the project (helpdesk service of Municipality of Bolzano). They performed many tests on the app (stress test and usability) and also had to prepare 85 devices in a very short time.
Delphi 10 Seattle (Enterprise edition)
V!ktor is a FireMonkey application, completely cross-platform: the project has been deployed to an 8″ Android tablet but it is fully functional on Windows platform too (we used Windows version to ease most of the application logic tests) and it could be easily deployed to iOS devices too.
FireDAC / SQLite
To persist data on the mobile device (a requirement given connectivity may be not reliable), we choosed to have a SQLite onboard database and FireDAC proved to be very powerful and handy tool.
REST Client Library
The communication with REST backend services was implemented using the REST Client Library (Embarcadero), very effective and easy to use.
V!ktor architecture includes several DataModule and Frames (with some visual inheritance). TFrameStand proved to be very effective and it was easy to separate modules of the application and to keep the UI consistent across the whole app. Also, prototyping the UI was easy and the ability to add animated transitions gave the app a better look and feel (improving the global perceived responsiveness of the app).
Since a few years, there is no project that would not benefit of using a version control system (even if it is a single developer project!). Git (nowadays the preferred choice for me) gave us the opportunity to work simultaneously on the project, even there where overlapping occurred.
I think a quite ambitious project, with a meaningful objective and a short-term deadline, is one of the ideal scenarios for every software developer. The pleasure to work together with other skilled and very professional team members, is great too. And to gain a positive result for all this effort is the best thing it could happen. 🙂
As Embarcadero MVP, I think this project is quite significant for Delphi as it proves (once again!) it is a very powerful software development environment. It has all what is needed to build real world applications and has the great added value to boost the developer productivity and give you a chance to complete your project within the deadline even when it is difficult.