At mimacom Germany, we have firmly anchored know-how sharing in our corporate values. The personal development of colleagues plays a key role in this. But knowledge is also passed on to customers beyond the boundaries of mimacom Germany in order to prepare them in the best possible way for upcoming challenges. In order to prepare young professionals for their professional life in the best possible way and to counteract the current shortage of skilled workers on the market, mimacom Germany launched a trainee program in 2022. In this program, trainees receive a deep dive into market-leading technologies and can apply them within an internal project. It also provides an insight into the various strategic business areas at mimacom Germany.
Dennis Bauer and I were the trainees at mimacom Germany in 2022. In this blog post, we would like to give you a first-hand overview of our experience.
Dennis and I joined mimacom Germany at the beginning of the trainee program. Before that, Dennis worked as a Spring Boot / PHP developer for one year after his training as an application developer. Due to his education as well as the year of work experience, he brought well-founded practical knowledge with him.
I completed my bachelor's degree in computer science with a focus on software engineering at Furtwangen University just before the trainee program. The studies had a highly theoretical focus and also offered practical insights into selected technologies.
First, some general framework data that went along with the trainee program. The trainee program started in May and ended in September 2022. During the five months, we went through six phases, each of which had a different time weighting.
- Cloud Native (Backend) Engineering (4 weeks)
- Frontend Engineering (4 weeks)
- Dev(Sec)Ops (3 weeks)
- Internet of Things (2 weeks)
- Buisness Process Automation (2 weeks)
- Data Analytics (2 weeks)
During the program, the weeks are structured in such a way that an introductory event for a topic area takes place at the beginning of each week. This event is followed by the weekly planning according to the agile process model Scrum, in which user stories are defined and the sprint for the week is planned. In the following days, these user stories are worked on and, depending on the scope of a topic area, further small inputs are given. Interim statuses are discussed at the dailies and at the end of the week there is a sprint review, which is followed by a retrospective.
Cloud Native (Backend) Engineering (CNE)
The first department right after our introduction week was the CNE phase. First, we received a starter lesson in Gitlab Continuous Integration/Continuous Delivery (CI/CD) pipelines. Building on this knowledge, we set up the frontend and backend projects and CI/CD pipelines. Those pipelines automatically check, format and lint the code, create builds and deploy them on a public cloud. Furthermore we added Git pre-commit hooks. In the main focus of this CNE phase was to learn about the fundamentals to the Spring Framework. The areas of the Spring Framework Boot, Security, Aspect Oriented Programming and MVC/REST were addressed. We also learned to use Spring Boot for easier starting applications. Besides the theoretical basics the mimacom Germany Spring experts showed us the best way to use tools like Java Persistence API Buddy to increase the development speed significantly. Over time we also learned how to apply the principle of Test-Driven Development (TDD). This helped us to discover problems earlier and to develop code more confident. Using the learned content of the training we were able to develop a fully functional Spring backend, which exposes a REST API. We also added an authentication and role-based authorization function that secures this backend. Architectural decisions were documented according to the principle of Architectural Decision Report. And in addition, there is a documentation of the API, which was created with the help of OpenAPI.
Frontend Engineering (FE)
As a second station we moved to the FE phase. There we got introductions to frontend best practices as well as the Angular framework. The main Angular learning topics included Routing, Modules, Performance, Authentication/Route Guards, Forms and Animations. First, we familiarized ourselves with various web layout models and then recreated a given page design. This formed the basis for further developments and was extended by functions in the course of time. For the frontend application we applied routing to enable navigation on the page and secured those with a route guard, which causes a redirect to a login page in case of unauthenticated access. We learned to simplify the project structure by organizing components into semantically clustered modules. Over time, we became more familiar with the framework and could apply TDD. By applying best practices (including single responsibility principle), we segregated the architecture into layers. By the end, we had created a fully functional frontend with asured quality through TDD.
Having created a complete application that was already deployed and working on Azure, we now needed to develop a deeper understanding of infrastructure administration. At first, we were given an introduction to Linux Shell Basics, which we would need to administer the infrastructure. Then we were introduced to important principles from the field of DevSecOps. Following the principle of Infrastructure as Code we learned how to use Terraform to make our existing infrastructure versionable. Subsequently, we became more familiar with the Azure platform and had learning sessions in the area of (distributed) monitoring and logging. We learned how to monitor our resources and how to proceed in case of failure. As a final point in the DevOps phase, we were introduced to Kubernetes and K9s. After the introduction we packaged our backend and frontend projects into Docker containers and saw how to manage them with K9s. We also learned how to use Kustomize to create multiple containers at once. At the end of this phase we combined the use of Kubernetes and Terraform. There we could see some major limitations of the cooperation between both tools.
Internet of Things (IoT)
In the IoT-Lab of mimacom Germany there is a factory model. This model was acquired for training purposes and is also used for demonstration purposes at trade fairs. This replicates a real production process. As in a real production process, data is generated at the Programmable Logic Control by the operation of machines. These are read out by an adapter and provided via a MQTT broker. In this phase, we learned how to use the MQTT protocol as well as NodeRed. At first we integrated Z-wave enabled buttons into the model via NodeRed to achieve more active booth participation at trade shows. We then set up a data bridge so that data generated on the model is made available on Azure. For this purpose, we used a MQTT Bridge Broker on an external Raspberry Pi, which mirrors the MQTT Broker running on the Factory Model. We used this as the data input for our NodeRed, in which the data is being converted and sent to an Azure IoT Hub. On the one hand, incoming data is persisted to cold tier file-based storage for later analysis. On the other hand, from our backend service, we use the Kafka-API, which is provided by default by an Azure IoT Hub resource, to store event-based new incoming data in a database. In doing so, only the most recent entry exists in this database. Finally, we added a view to our frontend to visualize the data arriving.
Below you can see the architecture we used to archive this goal. The components we added to the architecture are marked in red.
Business Process Automation (BPA)
In the phase of BPA we got to know the software solution Flowable of our affiliated company. Besides the possibility to model processes, Flowable offers a low-code based approach to create user interfaces. During the two weeks we modeled the trainee process - from the early beginning application phase up to the transition into the regular working life at the end of the trainee program. We also learned how to add new components, how to use REST APIs from Flowable, and many other product specific skills.
Data Analytics (DA)
In the last phase, we learned the basics of DA from a technical and organizational perspective. In the following practical tasks we developed a deeper understanding of data and to process it visually. For this we used the programming language Python as well as the libraries matplotlib, numpy and pandas. In addition, we touched on the broad topic of machine learning. We then developed a concept that we could apply to accomplish predictive maintenance using the available data from the cold file-based storage of the IoT phase.
In addition to the program schedule described above, we were also given exciting side challenges. These served to strengthen our soft skills in addition to the pure hard skills. In one session, we learned how to increase our external impact by applying Simon Sinek's "Golden Circle". In another one, we trained to be more confident in customer meetings. For this purpose, we conducted conversations with the Side Challenge Supervisors, that were designed on the basis of customer conversations and received feedback afterwards. We also received an introduction to psychological concepts that allow us to lead a conversation to a good outcome.
In summary, we learned a lot in the relatively short time of five months. What initially felt like a rather uneven foundation generally helped over the course of the program, as the strengths and weaknesses of prior experience balanced each other out. Through the support of and cooperation with the super motivated techies at mimacom Germany, we learned best practices and were able to significantly increase our development speed. Our supervisors always took the time to discuss in-depth questions and any problems that arose. We were able to gain insight into various aspects of software development through the rotation of departments. Furthermore, we were able to get to know significantly more colleagues than would probably be usual in such a short time. Finally, we could significantly improve our soft skills and become more confident in negotiations.
If you have read this article because you are considering whether a trainee / junior program at mimacom Germany could be something for you, here are my key learnings in a nutshell:
- Very talented and motivated supervisors will take care of you and will be at your side
- You will learn cutting-edge technologies as well as best practices
- You can test yourself in various disciplines of software development and will find out your interests
- You will be challenged and supported through side challenges and you can improve your soft skills
In the course of this, Dennis and I would like to thank everyone who made the Trainee Program 2022 possible!