
WorkTime ist meine Nextcloud-App für die Arbeitszeiterfassung. Ich habe vor einiger Zeit schon einmal über sie geschrieben. Damals ging es vor allem darum, dass eine App zu bauen nur der Anfang ist und der eigentliche Aufwand danach kommt. Eine Folge dieses Betreibens war, dass die App über die Zeit immer mehr Ansichten bekam. Jede neue Funktion bekam eine eigene Ansicht. Am Ende klickte ein normaler Mitarbeiter sich durch fünf getrennte Bildschirme: ein Dashboard mit Kennzahlen, eine Zeiterfassung, einen Monatsbericht, eine Abwesenheits-Ansicht und seine persönlichen Einstellungen.
Letzte Woche habe ich das aufgeräumt. Aus den fünf Ansichten sind zwei geworden. Was ich beim Aufräumen nicht erwartet hatte, war eine Lektion über mich selbst beim Entwerfen. Manchmal hilft Polieren nicht, weil das ganze Muster falsch ist. Dann hilft nur, einen Schritt zurückzugehen und von Neuem zu starten, statt am Detail weiterzudrehen.
Wie aus fünf Ansichten zwei Säulen wurden
Jede der fünf Ansichten hatte für sich einen guten Grund. Das Dashboard zeigte Kennzahlen wie Urlaubsstand und Monats-Soll, die Zeiterfassung war fürs Eintragen da. Der Monatsbericht produzierte ein PDF zum Monatsabschluss, und die Abwesenheits-Ansicht kümmerte sich um Urlaub und Krankheit. Die persönlichen Einstellungen schließlich hingen einfach in der Hauptnavigation. Was als einzelne Funktion logisch war, ergab in Summe ein zerstückeltes Bild.
Beim Aufräumen habe ich nichts erfunden, sondern bekannte Muster aus anderen Werkzeugen übernommen. Die Kennzahlen aus dem Dashboard sind jetzt eine schmale Leiste oben in der Zeiterfassung. Man will sie genau dort sehen, beim Eintragen einer Stunde, nicht in einer separaten Übersicht. Der Monatsbericht ist kein eigener Punkt mehr, sondern ein PDF-Knopf neben der Zeiterfassung. Die persönlichen Einstellungen liegen weiterhin unten in der Navigation, dort, wo Nextcloud sie ohnehin erwartet. Übrig bleiben zwei Säulen, Zeiterfassung und Abwesenheit.
Die Zeiterfassung selbst hat noch einen kleinen Umschalter bekommen, der zwischen drei Modi wechselt: einer Listenansicht, einer Kalenderansicht und einer Jahresübersicht. Vorher war die Liste die einzige Sicht, und die Jahresübersicht versteckte sich in einem ausklappbaren Block am Seitenende. Jetzt sind alle drei gleichwertig erreichbar, und ich kann pro Aufgabe wählen, welche Sicht mir gerade hilft.
Wo ich am Muster vorbeioptimiert habe
Die System-Einstellungen waren der spannendste Teil dieses Umbaus, und der lehrreichste. Sie sind diejenige Ecke der App, die der Admin am häufigsten anfasst. Bis zur ersten Iteration war das eine lange Scroll-Seite mit zwölf Sektionen, durch die man sich von oben nach unten arbeitete.
Mein erster Versuch, das zu verbessern, war ein Inhaltsverzeichnis oben auf der Seite. Kleine Knöpfe, die je eine Sektion ansteuerten, eine Mini-Überschrift INHALT darüber, eine Box drum herum. Es funktionierte, aber sah unfertig aus. Ich habe ein paar Tage später nachgebessert, dann nochmal. Es wurde jedes Mal etwas besser. Aber irgendetwas blieb komisch.
Den Stein ins Rollen brachte eine Beobachtung beim Scrollen. Wenn ich auf den letzten Eintrag im Inhaltsverzeichnis tippte, sprang die Seite nicht ganz nach oben. Unten war einfach nicht genug Inhalt für einen vollen Sprung. Und beim Scrollen verschwand das Inhaltsverzeichnis auch noch in der Versenkung. Beides für sich klein, zusammen aber das Signal, dass das ganze Muster nicht stimmt.
An dieser Stelle habe ich der KI gesagt, sie soll mir drei alternative Muster als klickbaren Entwurf zeigen. Mir fehlte die Vorstellung, wie ein besseres Layout aussehen könnte. Die KI hat drei Varianten gebaut. Variante A war eine vertikale Liste am linken Rand, wie sie Nextcloud selbst in seinen eigenen Server-Einstellungen verwendet. Variante B war ein Dialog, der über der Seite aufpoppt. Variante C war eine eingeschobene Leiste am rechten Rand.
Ich habe alle drei angeklickt. Variante A war nach wenigen Sekunden klar die Antwort. Sie sah aus wie das, was Nextcloud ohnehin überall macht, und sie löste alle Probleme, die wir vorher zu polieren versucht hatten. In dem Moment habe ich mich selbst gefragt: Warum habe ich das nicht gleich so gemacht?
Ehrliche Antwort darauf: Weil ich innerhalb des falschen Rahmens optimiert hatte. Ich hatte die Frage gestellt, wie wir das Inhaltsverzeichnis besser machen können. Nicht die Frage, ob wir überhaupt diese Art Inhaltsverzeichnis brauchen. Eine andere Frage hätte schneller zur richtigen Lösung geführt.
Erst klicken, dann bauen
Die Episode mit den drei Varianten ist auch deshalb gut ausgegangen, weil wir erst geklickt und dann gebaut haben. Das ist inzwischen mein Standardweg, wenn ich mir etwas nicht klar vorstellen kann. Statt sofort am echten Code anzufangen, lasse ich die KI einen klickbaren Entwurf bauen, eine eigenständige Seite ohne Daten dahinter. Ich klicke mich durch, sehe sofort, was funktioniert und was nicht, und entscheide erst danach, was tatsächlich gebaut wird.
In dieser Session haben wir das zweimal gemacht. Einmal für eine neue Jahresansicht, einmal für die drei Varianten der Einstellungen. Beide Male hat sich die Schleife gelohnt. Beim Entwurf für die Jahresansicht ist mir noch eine Idee gekommen, die ich vorher nicht auf dem Schirm hatte. Beim Entwurf für die Einstellungen hat sich, wie beschrieben, die richtige Lösung quasi von selbst gemeldet.
Was Live-Tests fangen, was sonst keiner sieht
Die Praxis hat dann noch einen Fehler ausgespuckt, den keine automatische Prüfung gemerkt hätte. Während ich nach dem Umbau durch verschiedene Monate gesteppt bin, fiel mir auf, dass die Monatsauswahl in der Kopfzeile leicht hin- und herwanderte. Mal stand sie etwas weiter links, mal weiter rechts. Im Code war eine kleine Anweisung schuld, die dem Auswahl-Element seine Position durch die rechts daneben stehenden Knöpfe diktierte. War der Knopf "Monat einreichen" gerade sichtbar, rückte die Auswahl ein Stück nach links. War er es nicht, hüpfte sie zurück.
Eine triviale Sache für sich genommen, aber genau die Art Fehler, die niemand bemerkt, der die App nicht wirklich benutzt. Eine automatische Prüfung hätte gesagt, alles in Ordnung. Erst das Durchklicken hat das nervige Detail sichtbar gemacht. Etwas Ähnliches habe ich neulich schon beim Umbau einer anderen App erlebt, damals nur für die Technik. Hier ging es um die Bedienung, und auch da liefert den eigentlichen Beweis der Gebrauch, nicht der Test.
Warum daraus die 0.9 wurde
Am Ende stand noch die Frage nach der Versionsnummer. Streng genommen war es ein kleiner Schritt, denn neue Funktionen kamen keine dazu. Aber Bedienbarkeit ist auch eine Eigenschaft, und der Sprung in der Oberfläche war für einen kleinen Sprung in der Versionsnummer zu groß. Auf der anderen Seite war es kein neuer technischer Unterbau, wie kürzlich bei meiner Vertrags-App, die deshalb auf 1.0 gegangen ist. Ich habe deshalb einen mittleren Schritt gewählt und WorkTime auf 0.9.0 gehoben.
Wo sie heute steht
WorkTime ist seit ein paar Tagen in der neuen Version unterwegs. Mein erstes Bauchgefühl beim Benutzen war erleichternd, weil weniger Bildschirme weniger Klicks bedeuten. Die System-Einstellungen sind die Stelle, an der ich den Unterschied am deutlichsten merke. Vorher war jede Einstellung ein Eintrag in einer langen Scrollseite. Jetzt ist jede Sektion eine fokussierte Ansicht, die ich mit einem Klick öffne.
Fertig ist die App damit selbstverständlich nicht. Die Ansicht für Vorgesetzte und Personalverantwortliche habe ich für diese Runde bewusst stehen gelassen, weil sie eine eigene Logik braucht. Und es ist nur eine Frage der Zeit, bis die ersten Rückmeldungen aus der Community eintreffen. Manche werden mir gefallen, andere nicht.
Eine eigene App umzugestalten ist mehr Arbeit, als sie einmal neu zu schreiben. Aber es gehört zu den Dingen am Selbermachen, die mir am meisten geben. Wenn ich mir die Lösung nicht vorstellen kann, lasse ich sie mir vorher klicken und schaue dann, wo sie hinkommt.