Die Stoppuhr: Zeit erfassen, während man arbeitet
Zeiten buchen ging in GODAV Pro von Anfang an: Datum, Stunden, ein Satz dazu. Nur fragt man sich am Abend dann, wie lange man eigentlich an der Sache von heute Vormittag saß. Die ehrlichere Zahl entsteht während der Arbeit. Deshalb gibt es an Storys und Aufgaben jetzt eine Stoppuhr: „Zeiterfassung starten“, arbeiten, „Zeiterfassung beenden“, und aus der gelaufenen Zeit wird eine ganz normale Buchung.
Der Knopf sitzt im Kopf der Vorgangskarte, nicht im Reiter „Zeiten“ darunter.
Der Knopf gehört dorthin, wo man liest
Naheliegend wäre der Reiter „Zeiten“ gewesen, wo auch die Buchungen stehen. Ich habe die Uhr bewusst in den Kopf der Karte gesetzt. Wer mit einer Aufgabe anfängt, liest gerade, worum es geht, und ist damit im Reiter „Allgemein“. Ein Knopf, für den man erst den Reiter wechseln muss, wird nicht benutzt.
Damit eine vergessene Uhr nicht unbemerkt weiterläuft, steht die eigene laufende Erfassung außerdem in der Kopfzeile, auf jeder Seite: Kennung des Vorgangs, laufende Dauer und ein Knopf zum Beenden. Wer seine Uhr vergisst, ist ja gerade nicht auf ihrer Karte. Die Kopfzeile ist der einzige Ort, den alle Seiten gemeinsam haben.
Eine Uhr je Person, und ein Wechsel statt einer Absage
Es läuft immer nur eine Erfassung je Person. Das erzwingt die Datenbank selbst: Die laufende Uhr liegt in einer eigenen kleinen Tabelle mit höchstens einer Zeile je Person. Zwei schnelle Klicks erzeugen deshalb keine zweite Uhr.
Die erste Fassung hat einen Start an einem anderen Vorgang einfach abgelehnt: Es läuft schon eine Uhr. Das war korrekt und im Alltag lästig. Wer von einer Aufgabe zur nächsten wechselt, hat die erste genau in diesem Moment beendet. Ihn erst zurück auf die alte Karte zu schicken, ist ein Umweg, den man nur geht, weil die Anwendung es verlangt. Jetzt beendet und bucht ein Start die laufende Uhr und startet die neue. Was dabei mit der alten geschehen ist, meldet die Anwendung, denn die Buchung entsteht an einem Vorgang, den man gerade nicht ansieht.
Dabei wird zuerst geprüft, ob man am neuen Vorgang überhaupt buchen darf, und erst danach die alte Uhr angefasst. Sonst stünde man nach einer Absage ohne sie da.
Zusätzlich sieht man auf der Karte, ob gerade jemand anderes am selben Vorgang Zeit erfasst, mit Bild, Name und laufender Dauer. Genau so fällt auf, wenn zwei Leute unabhängig voneinander an derselben Sache sitzen. Der Hinweis ist cyan und nicht gelb oder rot: Dass eine Kollegin auch daran arbeitet, ist ein Hinweis, keine Warnung.
Was beim Anhalten passiert
Beim Anhalten gibt es drei Ausgänge:
- Normal: gebucht wird die gelaufene Zeit.
- Zu kurz: Unter 18 Sekunden wird die Erfassung verworfen. Wer versehentlich startet und gleich wieder anhält, bekommt heute einen kurzen Hinweis. Anfangs gab es hier eine Fehlermeldung, und die Uhr lief weiter; das habe ich später geändert.
- Zu lang: Über 24 Stunden wird auf 24 gekappt, und zwar sichtbar. Ich hätte die Buchung auch verweigern können, aber eine vergessene Uhr ist trotzdem Arbeit, die sonst ganz verloren ginge.
Die Stunde gehört an den Tag, an dem man angefangen hat. Wer um 23 Uhr beginnt und um 1 Uhr aufhört, hat am Vortag gearbeitet. Die Beschreibung der Buchung setzt der Server aus Status und Titel des Vorgangs zusammen, und zwar mit dem Status beim Anhalten, nicht beim Start. Wer eine Stunde an etwas arbeitet, schiebt es dabei oft von „Offen“ nach „In Bearbeitung“, und die Buchung soll sagen, woran gearbeitet wurde. Später kam noch dazu, dass man stattdessen eine eigene Notiz in die Leiste der Kopfzeile schreiben kann.
Gebuchte Zeit landet in der Tagesübersicht der Seite „Zeiterfassung“, egal ob von Hand oder per Stoppuhr.
Der Fehler mit den zehn Sekunden
Auf einer Installation startete die Stoppuhr nicht bei null, sondern bei „00:00:10“. Die Buchung war trotzdem richtig, und genau deshalb suchte ich lange an der falschen Stelle. Den Startzeitpunkt setzt die Datenbank, die laufende Anzeige rechnete aber gegen die Uhr des Browsers. Angezeigt wurde also der Unterschied zweier Systemuhren. Auf meinem Entwicklungsrechner haben beide dieselbe Uhr, dort fällt das nie auf.
Die Lösung kostet keine einzige zusätzliche Anfrage: Jede Antwort des Servers trägt ohnehin seine Uhrzeit im Kopf mit, und daraus schätzt der Browser den Versatz. Kleine Schwankungen werden ignoriert, sonst liefe die Anzeige mal eine Sekunde rückwärts.
Außerdem
- Der Knopf „Zeiterfassung beenden“ ist blau und nicht rot. Rot heißt in GODAV „Fehler, Risiko, Blockierung“, und eine Erfassung zu beenden ist nichts davon.
- Verwerfen geht auch ohne Buchungsrecht, etwa nach dem Ausscheiden aus dem Projekt. Sonst bliebe die Uhr für immer stehen.
Was danach noch fehlte, war Arbeit, die zu gar keiner Story gehört. Dafür kamen die Sonderaufgaben.