bullshit

#dbhackathon

Ich wollte schon lange mal an einem Hackathon teilnehmen. Vor ungefähr einem halben Jahr — Mitte Dezember 2017 — fand dann der achte #db­hacka­thon in Berlin statt, ver­an­stal­tet von der Deutschen Bahn. Aber was ist das überhaupt, so ein Hackathon? Wikipedia sagt dazu:

Ein Hackathon (Wort­schöp­fung aus „Hack“ und „Marathon“) ist eine kol­la­bo­ra­ti­ve Software- und Hard­ware­ent­wick­lungs­ver­an­stal­tung. Al­ter­na­ti­ve Be­zeich­nun­gen sind „Hack Day“, „Hackfest“ und „codefest“. Ziel eines Hackathons ist es, innerhalb der Dauer dieser Ver­an­stal­tung gemeinsam nützliche, kreative oder un­ter­halt­sa­me Soft­ware­pro­duk­te her­zu­stel­len.

— Quelle: Internet

Ein Hackathon scheint vom Konzept her ein bisschen zu sein wie ein Barcamp: Jemand stellt den Platz, das Internet, Daten, Catering, kalte Getränke — ­ge­wis­ser­ma­ßen den Rahmen bereit und lädt ganz viele Leute ein. Diese Menschen füllen den Rahmen dann mit Inhalten: Sie entwickeln in der gegebenen Zeit in Teams oder alleine Dinge und Prototypen, probieren Ideen und lernen dabei.

Häufig gibt es ein Überthema — bei meinem ersten Hackathon war das Motto „Open Data“. Die Bahn und einige Part­ner­un­ter­neh­men stellten Schnitt­stel­len und Datensätze zur Verfügung, die man nutzen konnte, aber nicht musste.

Der Rahmen

Der Hackathon startete an einem Freitag um 17:00 Uhr in der DB Mindbox direkt unter dem S-Bahnhof Jan­no­witz­brü­cke. Jede*r Teil­neh­mer*in bekam ein Tshirt und nach einigen kurzen Ein­füh­rungs­vor­trä­gen, in denen das Programm vor­ge­stellt und ein Überblick über die mit­ge­brach­ten Daten gegeben wurde, startete ab 20:00 die sogenannte Hacknight: Ab dann hatten die Teams bis Samstag Nachmittag Zeit, an ihren Projekten zu arbeiten. Am Samstag um 16:30 Uhr konnten dann die Ergebnisse prä­sen­tiert werden.

Es gab dabei keinen Zwang, die an­ge­bo­te­nen APIs und Datensätze zu nutzen, geschweige denn, am Samstag etwas vorstellen zu müssen. Diesen Nicht-Druck fand ich sehr angenehm. Ich kam ohne Pro­jekt­idee oder Team zur Mindbox und stöberte dann einfach ein bisschen in dem, was die Bahn zur Verfügung stellte. Als Ziel hatte ich mir lediglich vor­ge­nom­men, das Projekt, an dem ich dann schluss­end­lich arbeiten würde, ei­ni­ger­ma­ßen ab­zu­schlie­ßen und am Ende vor­zu­stel­len.

Der ei­gent­li­che Hackathon

Es zeichnete sich relativ schnell ab, dass es eine App werden würde. Damit verdiene ich meine Brötchen und ich muss mich nicht erst in etwas ein­ar­bei­ten, bevor ich überhaupt startklar bin. Klar ist einer der Grund­ge­dan­ken, etwas zu lernen, aber es erschien mir mit meinem Ziel vor Augen einfach prag­ma­ti­scher.

Nachdem ich dann so in den mit­ge­brach­ten Daten der Deutschen Bahn stöberte, kam mir ein Gedanke:

Gibt es eine einfache, elegante Mög­lich­keit, mir schnell den Gleis­ab­schnitt für einen bestimmten Wagen ausgeben zu lassen, in dem ich bei­spiels­wei­se meine Re­ser­vie­rung habe? Quasi einen Wa­gen­rei­hungs­plan in besser?

Wenn ich vermeiden wollte, die Waggons im Zug zu durch­que­ren, ging ich dafür bisher immer zum aus­ge­druck­ten Wa­gen­rei­hungs­plan am jeweiligen Gleis. Dort steht dann üb­li­cher­wei­se eine Traube von Menschen, die ebenfalls her­aus­fin­den möchten, wo ein bestimmter Wagen hält, weil sie ebenfalls keine Lust haben, sich durch volle Waggons quetschen zu müssen. Warum geht das nicht eleganter? Einfacher? Warum geht das nicht mit dem Smartphone?

Ich fand raus, dass der Wa­gen­rei­hungs­plan auch im DB Navigator integriert ist:

Integration vom Wagenreihungsplan in den DB-Navigator

Aber das fühlte sich nicht gut an, nicht zuende gedacht, zu kom­pli­ziert. So als hätte jemand den analogen, aus­ge­druck­ten Wa­gen­rei­hungs­plan genommen und einfach in die App gegossen. Warum in­ter­es­siert mich, wie der ganze Zug auf dem Gleis hält, wenn ich nur wissen will, dass Wagen 23 in Abschnitt E ist? Das geht doch bestimmt besser.

Durch einen glück­li­chen Zufall hatte die Bahn auch die Daten der Wa­gen­rei­hungs­plä­ne mit­ge­bracht — ich hatte also ein Projekt. An­schlies­send for­mu­lier­te ich ein Ziel und schrieb eine kurze Nachricht im Hackathon-internen Slack-Channel.

Dann fing ich an, mich in die Wa­gen­rei­hungs­planda­ten zu graben, entwarf eine sehr einfache App und übersah, dass vier Menschen mich im Slack­chan­nel an­ge­schrie­ben hatten: Sie wären in­ter­es­siert. Kurze Zeit später setzten wir uns zusammen, ich stellte ihnen die Idee und das, was ich bisher her­aus­ge­fun­den und entworfen hatte. Wir verteilten die Aufgaben und dann ging es um kurz nach 21:00 Uhr wirklich los mit der Hacknight.

Einfache grafische Oberfläche der WRP-App

Die vier hatten im Gegensatz zu mir keine Erfahrung in der iOS-Ent­wick­lung, aber sie waren alle motiviert und In­for­ma­tik­stu­den­ten. Zwei bastelten die UI, zwei kümmerten sich um das Da­ten­mo­dell und einer behielt das große Ganze im Blick. Und so arbeiteten wir und tauschten uns re­gel­mäs­sig aus. Es wurde später und später und immer mehr Menschen gingen nach Hause oder legten sich einfach irgendwo in die Mindbox, um zu schlafen. Ich blieb dran und arbeitete hoch­mo­ti­viert weiter.

Morgens um sechs fielen mir immer wieder die Augen zu. Ich wurde immer müder, aber war immernoch un­glaub­lich motiviert, nur noch nicht zufrieden. Ich wollte mich von dieser Müdigkeit nicht aufhalten lassen, ich arbeitete weiter, merkte aber, wie mir das Denken immer schwerer fiel.

Irgendwann gegen acht Uhr morgens hatte ich dann einen Stand, mit dem ich mit ei­ni­ger­ma­ßen guten Gewissen schlafen konnte. Ich fuhr nach Hause, legte mich ins Bett und schlief ungefähr fünf Stunden.

Als ich aufwachte, war ich sehr un­aus­ge­schla­fen und mürrisch. Ich war unsicher, ob das, was ich bis in die Mor­gen­stun­den zu­sam­men­ge­baut habe, gut genug war, um es vor­zu­stel­len. Ich tat, was ich in so einer Situation meistens tue: Ich suche Feedback und twittere. Das Feedback war positiv und sorgte dafür, dass Le­bens­geis­ter und Motivation zu­rück­kehr­ten.

Ich sprang unter die Dusche, an­schlies­send aufs Fahrrad und war um kurz vor zwei wieder in der Mindbox. Einige aus meinem Team waren ebenfalls wieder da und so besprachen wir uns bei Kuchen und Pizza zum Frühstück. Wir fixten noch ein paar Klei­nig­kei­ten, änderten hier noch ein paar Farben und dort noch ein paar Schrift­ar­ten. Und dann hatten wir etwas vor­zu­wei­sen. Ich entwarf ein paar Folien und meldeten unser Projekt zur Vor­stel­lung an.

Nach einem Pro­be­durch­lauf der Prä­sen­ta­ti­on, noch mehr Pizza und Kuchen wurden dann die Projekte vor­ge­stellt. Jedes Team hatte zwei Minute Zeit, die Ergebnisse zu prä­sen­tie­ren.

Ein Team konnte mithilfe der Mo­bil­funk­da­ten berechnen, wie lange das WLAN im Zug noch funk­tio­niert oder wie lange man noch warten muss, bis man nach dem Tunnel wieder Internet hat. Sie hatten es ausserdem in den frühen Mor­gen­stun­den in freier Wildbahn getestet. Ein anderes Team hatte ein al­ter­na­ti­ves Routing im­ple­men­tiert, mit dessen Hilfe man bei­spiels­wei­se im Winter Zug­ver­bin­dun­gen finden kann, auf denen man möglichst wenig umstiegen muss.

Angespannt stellte ich dann den Wa­gen­rei­hungs­plan vor, inklusive Live-Demo. Die Müdigkeit und der wenige Schlaf forderten ihren Tribut und ich war sehr hart in meiner Wortwahl. Das bekam ich dann auch direkt auf Twitter gespiegelt — ­voll­kom­men zu recht. Später ent­schul­dig­te ich mich dafür.

An­schlies­send kürte die Jury nach einer Beratung dann die Projekte, die gewonnen hatten – der Wa­gen­rei­hungs­plan war einer von ihnen!

Jedes Team­mit­glied eines Winning Project bekam einen Rei­se­gut­schein für die Bahn per Post zugesandt. Irgendwann gingen wir alle nach Hause und ich flog nach einer weiteren sehr kurzen Nacht in den Weih­nachts­ur­laub.

Als ich den Rei­se­gut­schein vor einigen Tagen einlösen wollte, stellte ich fest, dass man das nur im Rei­se­zen­trum machen kann. Ich musste schmunzeln, buchte meine Reise dann halt im Rei­se­zen­trum und nahm mir vor, endlich mal über den Hackathon zu bloggen.

Vor einigen Wochen machte die Bahn dann im DB-Navigator nochmal prominent auf den in­te­grier­ten Wa­gen­rei­hungs­plan aufmerksam. Da musste ich dann tat­säch­lich schmunzeln.

Screenshot vom Hinweis zur Wagenreihung

Fazit

Insgesamt war der Hackathon eine un­glaub­lich in­ter­es­san­te Erfahrung. Es hat mich selbst überrascht zu sehen, wie un­glaub­lich kon­zen­triert ich an etwas arbeiten kann, wenn ich ent­spre­chend motiviert bin, bereit, auch über meine Grenzen zu gehen.

Unter Zeitdruck eine Lösung — und in diesem Fall auch das da­zu­ge­hö­ri­ge Problem — zu finden, war spannend, ebenso wie der Umgang mit Hin­der­nis­sen, die einfach so auftauchen. Im Idealfall versucht man natürlich vorher, solche Probleme zu vermeiden. Kommen sie trotzdem, macht man sich Gedanken, um eine möglichst gute Lösung zu finden. Beim Hackathon war mir das nicht immer möglich, es musste möglichst schnell eine Lösung her, die das Problem aus dem Weg räumt:

Nor­ma­ler­wei­se würdest du einen XML-Parser mit Bord­mit­teln selbst schreiben? Vergiss es, du hast keine Zeit, nimm ein Framework dafür. Du willst die Daten lieber aus einer Datenbank als aus 20 Megabyte Text­da­tei­en lesen? Ja, ist ja schön, aber dafür hast du jetzt keine Zeit.

Insgesamt war ich dann aber doch ganz zufrieden, zumal ich mein selbst­ge­steck­tes Ziel ja erreicht hatte. Das Ergebnis finde ich auf eine gewisse Art und Weise angemessen, auch wenn die Code­qua­li­tät gefühlt ziemlich schlecht ist (Github). Und auch wenn der Hackathon spannend war, so war er auch un­glaub­lich an­stren­gend, und ich kann und möchte nicht jeden Tag so massiv über meine Grenzen gehen. Ausserdem werde ich das nächste Mal vielleicht nicht direkt am nächsten Tag früh morgens verreisen.

Trotz allem war es mit Sicherheit nicht mein letzter Hackathon. Dafür ist der Rausch, in dem ich ge­rar­bei­tet habe, eine zu starke Droge.

Weitere Links

Open Source » « preconditionFailure