This is the first in a series of articles on our “Home Office Challenges App (HOCA)” using Apache Kafka, Kubernetes and StencilJS.
For someone working in Software Development, the time between active projects can sometimes be quite challenging. You may not know exactly what to do, or how to prioritize it. And before you have produced something meaningful, a new project might already be coming along. On the other hand, such transition periods can be a great time to learn new skills, improve those you already have and share knowledge with your co-workers.
Those were the goals when a handful of developers from the Customer Cluster Social Security Federal, as well as myself, found ourselves in between projects during the month of December. As a first step, we needed to identify new technologies which are likely to play an important role in the future and which will provide a clear benefit to our clients. So, we conducted a kick-off meeting to pick the most suitable technologies and to envision an application in which these technologies could be used.
A little earlier, our company had started the “Move Your Ass Challenge”. The idea was to help employees motivate each other to get out of their Home Office and engage in various athletic activities like running or cycling. In a dedicated Teams channel, every challenger could create a post describing their recent activities, ideally with a photo to illustrate them.
After collecting and discussing various ideas during the kick-off meeting, we finally settled on a digitalized version of that challenge – and so, the Home Office Challenges App (HOCA) was born. The goals of this project were not only to familiarize ourselves with new technologies, but to increase motivation and engagement with the challenge. For this purpose, we decided to add additional features like statistics and a leaderboard.
After some careful planning, our developers Andreas, Christof, Florian, Kyle and Oliver decided that adding a non-technical colleague could further improve the project’s flow, so they contacted me for the position of project manager.
I will now give a short overview of the project’s Technology Stack.
We have decided to use GitLab for Source Control Management. In addition to version control, it also allows us to define processes for Continuous Integration and Continuous Delivery.
Our backend uses Java in combination with the Spring Framework as well as Maven as a Build Management Tool. For our frontend, we decided on Typescript with JSX and the relatively unknown StencilJS compiler.
IntelliJ IDEA (Backend) and VS Code (Frontend) are free and reliable IDEs which both come along with a large number of helpful add-ons.
Data exchange between the components of our application is handled by the event streaming platform Apache Kafka.
Those components are required to do their work as independent from of each other as possible. Therefore, each runs in its own Docker container. Those containers are then deployed and managed in a Kubernetes Cluster. With “Docker Desktop for Windows/Mac”, it is not only possible to run Docker containers on your own PC, but even to create a small Kubernetes Cluster in which to run these containers.
To make the application accessible to the rest of the world, we decided on the Google Cloud Platform. Why? It’s probably a matter of taste whether you prefer Google Cloud, Amazon Web Services, Microsoft Azure, or some other cloud computing service. Google Cloud, however, is highly integrated with GitLab. In addition to the 300$ of free credit that Google Cloud offers to new customers, GitLab users will receive another 200$.
To improve the management of the Kubernetes Cluster, we are using Helm. It allows us to define very dynamic Kubernetes Deployments which can be shared and published easily, and be put under version control.
Working for a company which places a high value on responsiveness and agile project planning, it was almost a given that we would use Scrum methods to organize the planning of our development processes, even though the short duration of the project called for some adjustments, e.g. in terms of the length of each sprint.
In accordance with the Scrum principles, we met each morning for a time-boxed 15 minute Daily Scrum meeting in which we updated the other teams members about the progress of our work. To increase transparency, we used Jira to manage our Sprint Backlog and to visualize our progress on a Kanban board.
While the project has helped us a lot in terms of improving our skillset, we also find it important to provide a benefit to the company as a whole. So, we would like to share the knowledge gained in this project with all of you. Therefore, we will publish a series of blog articles on the virtual7 Homepage during the next weeks.
The following articles will cover these topics in more detail:
- Apache Kafka
- Kubernetes / GitLab