Architecture Kata "Dropbox Workflows"

Die Zusammenarbeit im Büro ist oft ad hoc. Das macht hohe Produktivität im Büro so herausfordernd. Immer wieder gibt es aber auch Gelegenheit, Zusammenarbeit zu systematisieren. Ein Mittel dafür sind Workflows (oder Protokolle, Routinen).
 
Workflows legen fest, welche Arbeitsschritte zu durchlaufen sind, um auf ein Ereignis zu reagieren.
 
Beispiele für Ereignisse: eine Rechnung trifft ein und muss vor Begleichung geprüft werden, ein Urlaubsantrag wird eingereicht und muss genehmigt werden, eine Bestellung wird aufgegeben und muss bearbeitet werden.
 
Als Ereignisse werden Nachrichten oder Dokumente in Form von Dateien angenommen.
 
Workflows definieren, wie diese Ereignisse in immer gleicher Weise behandelt werden. Sie sind codierte Praxis. Mit Workflows wird es leichter, neue Mitarbeiter einzuarbeiten, da die zu durchlaufenden Tätigkeiten nicht mehr nur in irgendwelchen Köpfen, sondern explizit festgehalten sind. Mit einer Workflow-Anwendung bringen sich dann die notwendigen Arbeitsschritte bei den relevanten Mitarbeitern selbst in Erinnerung.

Szenario "Rechnungsprüfung"

 
Eine Rechnung trifft ein und wird in ein spezielles Verzeichnis gescannt. Dieses Ereignis stößt den Workflow “Rechnungsprüfung” an.
 
Bei den relevanten Mitarbeitern – Buchhaltung, Einkäufer, Geschäftsführer – läuft die Workflow-Software. Sobald die Rechnung im Eingangsverzeichnis des Workflows ankommt, wird dafür ein Auftrag generiert; der lautet “gemeinschaftlich Rechnung prüfen”.
 
  • Zuerst wird die Buchhaltung benachrichtigt, um die Rechnung formal zu prüfen. Sind alle steuerlich nötigen Angaben vorhanden? Wenn ja, fließt der Auftrag weiter zum Einkäufer, falls sie unterhalb eines Grenzbetrags (z.B. 5000€) liegt. Andernfalls fließt sie sofort zum Einkaufsleiter. 
  • Einkäufer bzw. Einkaufsleiter genehmigen die Rechnung oder lehnen sie ab oder fühlen sich unerwartet überfordert. 
  • Bei Überforderung eskalieren sie die Prüfung und der Geschäftsführer hat das letzte Wort. Er lehnt ab oder genehmigt. 
  • Der Auftrag fließt zurück zur Buchhaltung, die nun entweder die Rechnung begleicht oder anders mit ihr verfährt.
 
Die Zusammenarbeit der Rollen wird durch die Workflow-Anwendung automatisiert. Niemand muss das Ganze im Blick behalten. Jeder schaut nur auf seinen Workflow-Client: in dem tauchen Aufträge zur Bearbeitung auf, wenn sie bei einem Arbeitsschritt ankommen, für den eine Rolle zuständig ist.
 
So wird die Abarbeitung von Aufträgen verlässlich gemacht. Selbst wenn ein Mitarbeiter seinen Arbeitsschritt nicht ausführt, geht das der Workflow-Anwendung nicht durch die Lappen. Jeder Auftrag ist mit einer Deadline je Arbeitsschritt versehen. Wird die nicht eingehalten, wird er automatisch eskaliert.

Die Welt der Workflows

 Zu Workflows gehören:
 
  • Startereignis: Ein Workflow beginnt, wenn ein Ereignis eintritt. Hier ist das der Empfang einer Datei in einem Verzeichnis.
  • Auftrag: Die Datei des Startereignisses wird in einen Auftrag verpackt. Dieser Auftrag wird gemäß der im Workflow verbundenen Arbeitsschritte abgearbeitet.
  • Arbeitsschritt: Jeder Arbeitsschritt (oder auch Station) steht für eine Aufgabe, die mit dem Auftrag zu erledigen ist. Arbeitsschritte werden mit einem Ergebnis abgeschlossen. Welcher Arbeitsschritt auf den aktuellen folgt, hängt vom Ergebnis ab.
 Die Elemente eines Workflows in action:
Jeder Mitarbeiter beobachtet nur “seine” Arbeitsschritte, der Einkäufer “Einkäufer.Rechnung prüfen”, die Buchhaltung “Buchhaltung.Rechnung validieren” und “Buchhaltung.Rechnung reklamieren” und “Buchhaltung.Rechnung bezahlen” usw.
 
In jedem Arbeitsschritt kann der zuständige Mitarbeiter Auftragsdaten erfassen (z.B. den Rechnungsbetrag). Zumindest wird aber ein Arbeitsergebnis zugewiesen, aufgrund dessen der Auftrag zum einen oder anderen nächsten Arbeitsschritt weiterfließt (z.B. “genehmigt” oder “<5000€”).
 
Aufträge führen ein Logbuch über die Stationen durch die sie fließen mit sich. In diesem Logbuch können Bearbeiter auch Notizen ablegen.
 
Arbeitsschritte werden vor allem manuell durchgeführt (Kästen mit abgerundeten Ecken im obigen Bild). Das verlässlich zu organisieren, ist der Hauptzweck einer Workflow-Anwendung.
 
Darüber hinaus ist es aber auch möglich, einen Arbeitsschritt durch ein Programm (Workflow-Bot) abarbeiten zu lassen (Kasten mit spitzen Ecken im obigen Bild). Die Kommunikation mit einem Bot findet über die Kommandozeile statt. Er kann auf die Workflow-Definition lesend und den in Frage stehenden Auftrag sowie zugehörige Dokumente lesend und schreibend zugreifen.

Workflow-Elemente

Jede Workflow-Definition enthält…
 
  • Titel (z.B. “Rechnungsprüfung”)
  • Arbeitsschritt*
    • Titel (z.B. “Buchhaltung.Rechnung validieren”)
    • mögliches Ergebnis* (z.B. “genehmigt”, “<5000€”)
    • zu erfassende Eigenschaft* (z.B. “Rechnungsnummer”)
    • max. Bearbeitungsdauer (z.B. “2 Stunden” oder “3 Tage”)
    • [WIP Limit]
    • [Bot] (Kommandozeile zum Aufruf eines Programms, z.B. “mono rechnung_verteilen.exe”)
  • Quelle* (z.B. “Eingangsrechnungen”)
  • Senke* (z.B. “Bezahlte Rechnungen”)
  • Beziehung*
    • (Quelle | Arbeitsschrittergebnis) (z.B. “Eingangsrechnungen”, “Einkäufer.Rechnung prüfen.genehmigt”)
    • (Arbeitsschritt | Senke) (z.B. “Bezahlte Rechnungen”, “Buchhaltung.Rechnung bezahlen”)
 
Arbeitsschritten, Quellen, Senken, Ergebnissen könnten auch Ids zugewiesen werden, über die sie in Beziehung gesetzt werden.

 

Auftragselemente

Jede Auftragsdatei enthält…
 
  • Auftragsnummer
  • Auftragseingangszeitstempel
  • Erfasste Eigenschaft*
    • Name (z.B. “Rechnungsnummer”)
    • Wert (z.B. “20170106-1”)
  • Anhang* (relativer Pfad zu einer Datei im Auftragsverzeichnis, z.B. “rechnung123.docx”)
  • Historie
    • Arbeitsschritt*
      • Arbeitsschritttitel
      • Ankunftszeitstempel
      • Arbeitsbeginnzeitstempel
      • Arbeitsendezeitstempel
      • Ergebnis (z.B. “genehmigt”)
      • Kennung für den Bearbeiter (z.B. “dwalin@acme.com” oder Bot-Name)
      • Notiz*
        • Text
        • Zeitstempel

 

Dropbox als Fundament

Zur Speicherung von Workflows, Aufträgen und Dokumenten soll das Dateisystem zum Einsatz kommen. Werden Dropbox-Verzeichnisse benutzt, kann sogar über die Grenze eines Unternehmensnetzwerkes hinweg zusammengearbeitet werden.
 
Das Dateisystem bzw. Dropbox als Fundament statt einer Datenbanktechnologie wie RDBMS oder NoSql soll es leicht machen, die Workflow-Anwendung zu deployen. Es ist keine spezielle Infrastruktur nötig. Die Anwendung ist lediglich auf teilnehmenden Mitarbeiterrechnern zu installieren und minimal zu konfigurieren. Dadurch soll die Hemmschwelle gesenkt werden, Workflows zur Systematisierung der Arbeit einzusetzen. Das ist insbesondere wichtig für kleine Unternehmen ohne IT-Abteilung. Eine Fileshare oder Dropbox (bzw. ein anderer Cloudspeicher, sogar Git wäre möglich) finden sich überall.
 
Eine Desktop-Anwendung scheint auch zunächst einfacher zu “verkaufen”. Wenn nur im lokalen Netz Workflows bearbeitet werden sollen, muss kein Webserver aufgesetzt werden. Und für Workflows, die über das lokale Netz hinausgehen, muss kein Server in der Cloud betrieben werden; Dropbox o.ä. genügt.
 
Alternative: Die Workflow-Anwendung wird als Server ausgeliefert, der nicht nur die Workflow-Engine hostet, sondern auch ein REST-API anbietet, mit dem sich HTML/JS- oder Elm-Clients verbinden können. (Die HTML/JS/CSS/Bild-Dateien werden auch vom Server geliefert.)

 

Ordnerstruktur

Kata Dropbox Workflow - Clean Code Developer Akademie 2
  • Alle Workflows unter einer Wurzel.
  • Das Auftragsverzeichnis und die Auftragsdatei werden automatisch angelegt, wenn eine Datei in einer Quelle eintrifft.
  • Das Auftragsverzeichnis fließt durch die Arbeitsschritte. (Die Auftragsdatei könnte als Evensource strukturiert sein.)
  • Jeder Arbeitsschritt besteht aus drei Verzeichnissen für seine Aufträge
    • /todo: Aufträge, die eine Bearbeitung erwarten. Bei manueller Bearbeitung sieht der Mitarbeiter, was noch zu tun ist.
    • /inprogress: Aufträge, die in Bearbeitung sind. Bei manueller Bearbeitung nimmt der Mitarbeiter einen Auftrag explizit an.
    • /done: Aufträge, deren Bearbeitung in dem Arbeitsschritt mit einem Ergebnis abgeschlossen wurden.
 
Pfade in den json-Dateien sind immer relativ zum Verzeichnis der Datei.
 
Aufträge in /done werden in manuellen Arbeitsschritten nicht mehr angezeigt. Sie werden von der Workflow-Engine gem. Workflow-Definition und dem aktueller Arbeitsschrittergebnis zum nächsten Arbeitsschritt in dessen /todo verschoben.

Workflow-Anwendung

Workflow-Client

Der Workflow-Client dient Mitarbeitern zur Ausführung von Arbeitsschritten. Mit dem Client beobachten sie ausgewählte Stationen und werden über eingehende Aufträge informiert (/todo). Sie wählen dann Aufträge zur Bearbeitung (/inprogress), erfassen Daten, schreiben Notizen und schließen den Arbeitsschritt mit einem Ergebnis ab.
 
  • Fokus auf Arbeitsschritte eines Workflows
    • Was steht an Aufträgen an?
    • Was ist in Bearbeitung?
    • Datenerfassung während der Bearbeitung
 
Mitarbeiter melden sich beim Client mit ihrer Email-Adresse an.

Workflow-Engine

Die Workflow-Engine stellt den Fluss der Aufträge her.
 
  • Sie beobachtet die Quellen und legt neue Aufträge für eingehende Dateien an.
  • Sie beobachtet Quellen und /done Verzeichnisse der Arbeitsschritte und verschiebt Aufträge gem. Ergebnis in das nächste /todo Verzeichnis bzw. eine Senke.
  • Sie beobachtet /todo und /inprogress Verzeichnisse um festzustellen, ob Aufträge ihre Deadline überschritten haben, um sie mit dem Ergebnis “timeout” weiterzuschieben.
  • Sie führt Bots bei automatischen Arbeitsschritten aus. Dem Bot übergibt sie den aktuellen Workflow, den aktuellen Arbeitsschritt und den aktuellen Auftrag. Der Bot produziert Ergebnisse im Auftragsverzeichnis und kehrt mit einem Exit-Code zurück. Bei Exit-Code ungleich 0 wird der Arbeitsschritt des Auftrags mit dem Ergebnis “exception” abgeschlossen; dito, falls der Bot abstürzt oder länger als 60 Sekunden braucht.
 
Die Workflow-Engine kann zunächst im Client enthalten sein; ansonsten läuft sie als Service allein auf einem Rechner.
 
Wenn die Workflow-Engine im Client läuft, kann sie für jeden mit Ergebnis abgeschlossenen Arbeitsschritt sofort aufgerufen werden. Zusätzlich müsste nur noch ein Client für die Quellen laufen, um Aufträge bei Eintreffen neuer Dateien zu schnüren.
 
Achtung: Auftragsverzeichnisse dürfen nicht manuell bearbeitet werden! Insb. müssen alle Dateien, die darin liegen in der Auftragsdatei vermerkt sein. Sonst kann bei einer Dropbox-Synchronisation auf Empfängerseite nicht festgestellt werden, ob schon alle Dateien angekommen sind.

Workflow-Designer

Workflow-Definitionen sind json-Dateien. Die können zunächst von Hand codiert werden. Endanwender brauchen jedoch einen Workflow-Designer, visuell oder nicht fehlerfreie Workflow-Definitionen zusichert.

Workflow-Bots

Bots sind Programme, die von der Kommandozeile aufgerufen werden können. Sie müssen für die Engine nur erreichbar sein. Die Plattform, mit der sie entwickelt werden, ist unerheblich. Der Kontrakt umfasst nur die Kommandozeile und den Exit-Code (und Standard-Output für Log-Nachrichten).
 
Beispielaufruf:
Kata Dropbox Workflow - Clean Code Developer Akademie 3

Der Standard-Output sowie der Exit-Code eines Bot könnte als Notiz in den Auftrag eingehen.

 
 
 
 
 
 

 

 
 
 

 

 

 

de_DEGerman