Moin! Ich bin Annika, eHealth-Master Studentin an der Hochschule Flensburg und habe von September 2023 bis Februar 2024 im Rahmen meines Studiums ein Praktikum als Software-Entwicklerin bei T2med absolviert. Daraus ist inzwischen eine Festanstellung entstanden, in der ich aktuell meine Masterarbeit schreibe, um danach voll einzusteigen. Im Folgenden möchte ich meine Eindrücke aus dem Praktikum schildern und einen kleinen Einblick in die Arbeitsweise der Firma und die genutzten Technologien geben. Super-Neugierige können hier meinen vollständigen Bericht zum Download finden.
Arbeitsweise
T2med stellt seinen Mitarbeitenden frei, ob sie im Home-Office oder in der Firma arbeiten möchten. Auch hybride Modelle finden Anwendung. Team ID, dem ich angehöre, arbeitet fast ausnahmslos aus dem Home-Office. Zu Beginn meines Praktikums war ich etwas skeptisch, ob sich auf diese Weise der persönliche Kontakt herstellen lässt, der das Zusammenarbeiten angenehm macht. Durch das tägliche Nutzen einer offenen Videokonferenz, in der Aufgaben entweder gemeinsam gelöst werden oder auch einfach die jeweils eigenen Aufgaben in Gesellschaft bearbeitet werden können, wurde meine Sorge jedoch schnell zerstreut. Meine Erfahrungen begrenzen sich hier allerdings auf Team ID. Da die Entwicklungsteams in der Gestaltung ihrer Arbeitsweise große Autonomie genießen, haben andere Teams für diese Herausforderung andere Herangehensweisen entwickelt.
Der allgemeine Ablauf der Arbeit bei T2med wird durch eine Reihe von Regelterminen geprägt. Dazu gehören für jedes Team (fast) täglich ein Standup-Meeting und monatlich eine Retrospektive, in der die aktuelle Arbeitsweise reflektiert, Unstimmigkeiten aufgedeckt und Lösungen gefunden werden können. Da Team ID für das Entwickeln und Betreiben der Internet-Dienste verantwortlich ist, wird hier zudem einmal im Monat ein Patchday durchgeführt, um die Projekte und Dienste aktuell zu halten und Sicherheitslücken regelmäßig zu schließen.
Auch teamübergreifend gibt es wöchentlich die verschiedensten Regeltermine, die der Kommunikation und Koordinierung zwischen den Teams oder mit externen Projektpartnern dienen. Der Mittwoch nimmt dabei aktuell eine Sonderposition in der Woche ein. An diesem Tag kommt die gesamte Entwicklungsabteilung zusammen und bespricht Informationen und besondere Vorkommnisse, die alle betreffen. Nach diesem Meetup findet jeweils jeden zweiten Mittwoch im Wechsel entweder der Entwicklungsmittwoch oder der Techno-Mittwoch statt. Der Techno-Mittwoch dient dem gezielten Abarbeiten technischer Schulden. Der Entwicklungsmittwoch ist dagegen für die Entwicklungsabteilung eine Gelegenheit, die täglichen Aufgaben ruhen zu lassen und die Zeit für Fortbildungen oder „Bastelprojekte“ zu nutzen. Generell habe ich in meinem Praktikum mehrfach wahrgenommen, dass Mitarbeitende bei T2med zu Fortbildungen ermutigt werden und eigene Ideen diesbezüglich jederzeit einbringen können.
Abgesehen von den Regelterminen gibt es noch einige besondere Events. Dazu gehören die Neujahrsfeier und das Sommerfest, aber auch das Barcamp oder Teamevents. Team ID war letztes Jahr z. B. Kart fahren 🏁🏎️. Da der Großteil der Mitarbeitenden aus dem Home-Office arbeitet und viele außerhalb von Kiel wohnen, sorgen diese Veranstaltungen dafür, dass alle in regelmäßigen Abständen trotzdem persönlich zusammenkommen.
Mein Lernprojekt
Mein Praktikum bei T2med hatte zum Ziel, die Prozesse und Arbeitsabläufe einer Software-Firma in der eHealth-Branche kennenzulernen und mich mit dem von der Firma verwendeten Tech-Stack vertraut zu machen. Dafür hat das Team ein Lern- und Einarbeitungsprojekt vorbereitet, das darauf ausgelegt war, möglichst viele der Technologien der Firma kennenzulernen. Es handelt sich dabei um eine Web-App in Form eines Event-Portals, das zukünftig für die Organisation von Veranstaltungen der Firma genutzt werden könnte. Für mich als Praktikantin war das die perfekte Spielwiese, aber auch für den gestandenen Senior Softwareentwickler, mit dem ich gleichzeitig angefangen habe, war es ein passendes Einstiegsprojekt.
Backend
Der Startpunkt des Projekts bestand darin, ein grundlegendes Datenmodell zu erstellen, das Informationen zu einem Event wie Veranstalter, Titel, Startzeitpunkt oder auch die Anmeldung einer Person speichern kann. Hierfür wurden Kotlin, Hibernate, Spring Boot mit dem Spring Data JPA und eine PostgreSQL Datenbank genutzt. Kotlin ist die von Team ID bevorzugt verwendete Programmiersprache, Hibernate ist für das Object/Relational-Mapping und somit für die Persistenz der Daten zuständig. Zusätzlich ist Hibernate ein JPA-Provider, also eine Implementierung der Java Persistence API. Spring Boot ist ein Framework, mit dem Spring-Anwendungen leichter erstellt und modular konfiguriert werden können. Spring selbst ist wiederum ein vielgenutztes Framework zur Entwicklung von Java- oder Kotlin-Anwendungen, das nützliche Funktionen wie Daten-Validierung oder Sicherheits-Features mitbringt. Das für diese Aufgabe genutzte Spring Data JPA ist ebenfalls Teil des Spring-Frameworks und vereinfacht das Implementieren von Datenzugriffen. Potenziell notwendige Queries zur Abfrage der Daten auf der verwendeten PostgreSQL Datenbank stehen durch Nutzung des Interfaces entweder bereits automatisch zur Verfügung oder können bei individuelleren Anforderungen leichter implementiert werden.
Im nächsten Schritt wurden Spring Security und Keycloak konfiguriert. Spring Security ist das Standard-Framework zur Authentifizierung und Zugriffskontrolle in Spring-Anwendungen. Keycloak ist dagegen die genutzte Open Source Identitäts- und Zugriffsmanagementlösung. Das heißt, dass Accounts über Keycloak angelegt und verwaltet werden können und Spring Security genutzt wird, um dieses Account-Management für das Event-Portal verwenden zu können. Eine eingeloggte Person, die ein neues Event anlegt, kann auf diese Weise direkt als verantwortlich aufgeführt werden. Auch bei der Anmeldung zu einem Event werden automatisch die Accountdaten genutzt.
Darauffolgend habe ich das Event-Portal Stück für Stück um kleinere Funktionen ergänzt. Dazu gehörten das Erweitern des Datenmodells, das Einrichten von Zugangsbeschränkungen und das Editieren von bereits vorhandenen Daten. Schwierig wurde es für mich erst wieder, als ich mich um die Validierung von Daten und Fehlerbehandlung gekümmert habe, denn hier war wieder alles neu. Zur Umsetzung dieser Aufgabe wurde auf Bean-Validation zurückgegriffen. Im Kontext von Spring ist eine Bean verkürzt gesagt eine Instanz eines Objekts. Beispielsweise ein Objekt, das die durch User eingegebenen Event-Daten im Browser entgegennimmt. Bevor diese in die Datenbank übernommen werden, durchlaufen sie die Bean-Validation. Sollte hierbei eine Abweichung zu den Anforderungen erkannt werden, wird ein Fehler zurückgegeben, auf den dann angemessen reagiert werden kann.
Die letzte große Aufgabe im Backend war zugleich auch die mit Abstand komplexeste Aufgabe meines Praktikums. Sie bestand darin, dass die organisierende Person eines Events die Möglichkeit haben soll, von den Teilnehmenden bei der Anmeldung individuelle, auf das Event abgestimmte Informationen abzufragen. Dabei sollen drei verschiedene Arten von Fragen möglich sein:
- Text-Fragen: Hast du noch weitere Wünsche?
- Zahlen-Fragen: Wie viele Burger möchtest du essen?
- Auswahl-Fragen:
Wähle deine Essgewohnheit aus:
- Vegan
- Vegetarisch
- Mit Fleisch
- Ich bin ein Vampir und esse keine feste Nahrung
Aufgrund der verschiedenen Fragen- und Antwortentypen bietet es sich an dieser Stelle an, mit polymorphen Datentypen zu arbeiten. Eine Herausforderung, die ich nach viel Gefrickel und mit etwas Unterstützung letztendlich lösen konnte (yay).
Frontend
Für das Frontend habe ich ganz klassisch im Sinne einer Web-App mit HTML und CSS gearbeitet. Als Orientierungshilfe hat der Product Owner des Teams ein Mockup erstellt. Zu diesem Zeitpunkt des Praktikums war ich bereits sehr frei in der Gestaltung meiner eigenen Aufgaben und habe daher in Rücksprache mit dem Team entschieden, dass ich mein Wissen zu HTML und CSS vertiefen werde und zusätzlich das UI unter der Berücksichtigung von Anforderungen an Barrierefreiheit umsetzen möchte. Da ich mit HTML und CSS bisher nur sehr sporadisch in Kontakt gekommen war, sind hier neben der eigentlichen Bearbeitung der Aufgabe auch große Lernblöcke enthalten gewesen. Ich habe mich also intensiv mit Best Practices, WAI-ARIA und der Benutzung assistiver Technologien wie Screenreadern auseinandergesetzt und finde, das Ergebnis kann sich sehen lassen!
Ausflug zu den Quality Engineers
Gegen Ende meines Praktikums haben mir die beiden Quality Engineers aus Team J den Wunsch erfüllt, einen Einblick in das Testen von Software zu bekommen. Da Team J im Gegensatz zu Team ID am APS (Arzt-Patienten-System) arbeitet, war dies auch gleichzeitig ein interessanter Einblick in das eigentliche Kernprodukt der Firma, das Praxisverwaltungssystem. Die Aufgaben der Quality Engineers sind im Wesentlichen das Testmanagement, das Schreiben von neuen Tests, das Refactoring von bereits bestehenden Tests sowie die Wartung der nächtlichen Testläufe.
Im Testmanagement werden die Testabdeckung und die gefundenen Fehler in ihrer Anzahl, dem Zeitpunkt der Entdeckung und in ihrer Schwere überwacht. Der Zeitpunkt ihrer Entdeckung ist interessant, da ein Fehler teurer wird, je später er entdeckt wird. Ziel des Testmanagements ist es demnach, Fehler möglichst früh zu entdecken, so dass sie unter geringem Zeit- und Ressourcenaufwand behoben werden können. Neben den Erklärungen zum Testmanagement habe ich einen praktischen Einblick in das Schreiben und Refactoring von QF-Tests erhalten. QF-Test ist das Tool, das bei T2med genutzt wird, um die grafische Oberfläche des APS automatisiert zu testen.
Lessons Learned
In den 24 Wochen bei T2med habe ich sehr viel Neues gelernt. Glücklicherweise habe ich bereits Erfahrungen mit Kotlin mitgebracht und konnte im Praktikum darauf zurückgreifen. Durch die intensive Nutzung der Programmiersprache in der ersten Hälfte des Projekts und unter Anleitung der erfahrenen Teammitglieder wurde dieses Wissen vertieft und besser strukturiert. Insbesondere die Nutzung von Frameworks wie Spring Boot oder Hibernate war eine neue, wertvolle und praxisrelevante Erfahrung. Außerdem konnte ich das Praktikum nutzen, um mir eine solide Grundlage in HTML und CSS zu erarbeiten und gleichzeitig Anforderungen an die Barrierefreiheit einer Anwendung bereits mitzudenken.
Auch der Einblick in das Qualitätsmanagement war lehrreich. Ich war überrascht davon, wie aufwendig das Erstellen eines einzelnen QF-Tests ist, konnte mich aber schnell davon überzeugen, dass sie unverzichtbar sind, wenn ein hohes Niveau an Qualität erreicht und gehalten werden soll. Das ist meiner Meinung nach insbesondere bei Anwendungen im medizinischen Kontext wichtig.
Meine persönlichen Erfahrungen mit T2med als Ausbildungsstätte sind sehr positiv und ich kann Studierenden, die sich für die Software-Entwicklung interessieren, ein Praktikum hier uneingeschränkt weiterempfehlen. Die Weiterführung meiner Ausbildung wurde sehr ernst genommen und zu Anfang wurde ich sehr engmaschig betreut, was einen großen Lerneffekt zur Folge hatte. Gleichzeitig habe ich großes Vertrauen und die Freiheit genießen können, mich entsprechend meiner eHealth-geprägten Interessen selbstständig tiefer in Themen wie Barrierefreiheit einzuarbeiten. Für mich ein gelungener Mix und ein vielversprechender Start in mein Berufsleben.