Return to Video

34C3 - Antipatterns und Missverständnisse in der Softwareentwicklung

  • 0:00 - 0:16
    34c3 preroll music
  • 0:16 - 0:21
    Herald: Der Fefe hatte mich gebeten,
    mich kurz zu halten, weil, er hat Angst,
  • 0:21 - 0:27
    dass der Talk nicht in die 30 Minuten passt.
    Von daher gebe ich jetzt mal Gas und
  • 0:27 - 0:30
    sage: „Antipatterns und Missverständnisse
    in der Software-Entwicklung“!
  • 0:30 - 0:34
    Und wie sagte jemand gestern?
    „Ach Fefe! Das ist doch der mit der Kolumne
  • 0:34 - 0:38
    beim ehemaligen Nachrichtenmagazin!“
    Here we go!
  • 0:38 - 0:47
    Applaus
  • 0:47 - 0:51
    Fefe: Hallo hallo. Hallo hallo. Ja, ja
    vielen Dank, dass ihr so zahlreich
  • 0:51 - 0:53
    erschienen seid. Ein bisschen zahlreicher,
    als ich gedacht habe. Nächstes Mal mache
  • 0:53 - 0:59
    ich doch lieber parallel zu Minkorrekt
    wieder. Es geht um Antipatterns.
  • 0:59 - 1:04
    Antipatterns sind Sachen, die man macht,
    die man häufig macht, die populäre
  • 1:04 - 1:08
    Maßnahmen sind, um ein Problem zu lösen,
    die dann aber entweder gar nicht
  • 1:08 - 1:14
    funktionieren oder nach hinten losgehen.
    Und ich habe mir gedacht, beim Congress
  • 1:14 - 1:18
    gibt es immer so schöne Streitereien um
    das Motto. Da mache ich auch mal ein Motto.
  • 1:18 - 1:20
    Und das hier ist so ein Motto, was
    ich sehr profunde finde, und wo ihr
  • 1:20 - 1:26
    hoffentlich im Laufe des Vortrags sehen
    werdet, warum das das Motto ist. Ja, „wer
  • 1:26 - 1:32
    lesen kann, aber es nicht tut, hat keinen
    Vorteil dem gegenüber, der das nicht kann“.
  • 1:32 - 1:36
    Die Struktur des Vortrags…
    Applaus
  • 1:36 - 1:42
    Die Struktur des Vortrags will ich an
    einem Beispiel kurz umreißen.
  • 1:42 - 1:46
    Es geht immer damit los,
    dass wir ein Problem haben.
  • 1:46 - 1:50
    Dann geht immer Seal Team 6
    los und hackt irgendwas.
  • 1:50 - 1:53
    Also denkt euch hier ein Team von
    Spezialexperten. Ja ich will jetzt nicht
  • 1:53 - 1:58
    die Seals beleidigen, bestimmt auch alles
    nette Leute. Und dann kommt eine Umsetzung,
  • 1:58 - 2:03
    da geht es meistens in die Hose.
    Und dann haben wir einen Effekt, und
  • 2:03 - 2:08
    hoffentlich, hoffentlich eine Erkenntnis
    gewonnen. Ich habe mir gedacht, wir
  • 2:08 - 2:12
    versuchen mal so eine interaktive
    Komponente. Und zwar wenn man sich so
  • 2:12 - 2:16
    Übertragungen aus dem britischen Parlament
    ansieht, dann gibt es immer so ein
  • 2:16 - 2:19
    Gemurmel, wenn die Leute zustimmen. Und
    ich dachte mir, wenn ich sage, „Hebt mal
  • 2:19 - 2:23
    den Arm, wenn euch das mal passiert ist“,
    dann haben die Leute vielleicht Angst, auf
  • 2:23 - 2:27
    dem Stream zu landen und sich zu outen.
    Deswegen dachte ich, wir murmeln mal. Also
  • 2:27 - 2:30
    wenn einer von euch sich bei einem Muster
    wiedererkennt, könnt ihr mal versuchen.
  • 2:30 - 2:34
    Wir gucken mal, ob das klappt. Ja,
    vielleicht hört man das dann. Okay.
  • 2:34 - 2:39
    Also, erstes Problem. Dieses Bild, ich
    möchte das gleich dazusagen,
  • 2:39 - 2:45
    Lachen
    ist mir gespendet worden.
  • 2:45 - 2:48
    Ich liefere hier keine Kunden ans Messer,
    und es geht nur um Anekdoten.
  • 2:48 - 2:53
    Also wer sich glaubt, wiederzuerkennen,
    liegt wahrscheinlich falsch.
  • 2:53 - 2:56
    So, das ist ein typisches Problem
    in der Software-Entwicklung:
  • 2:56 - 3:00
    die Versionierung von und die Backups
    von alten Versionen aufzuheben.
  • 3:00 - 3:05
    Das ist hier, ich hoffe, ihr habt das gesehen
    oben in der Ecke, das ist ein USB-Stick.
  • 3:05 - 3:08
    Und die typische Idee ist: Wir machen
    jetzt mal ein Versionierungssystem!
  • 3:08 - 3:12
    Und das ist eine gute Idee. Die
    Umsetzung ist dann gewöhnlich:
  • 3:12 - 3:15
    der, der gerade ein akutes
    Problem hat, bastelt schnell was,
  • 3:15 - 3:19
    und dann kriegt man so ein Git. Und Git
    ist eigentlich gut, aber man hat halt
  • 3:19 - 3:23
    nicht nur Git, sondern man hat dann noch
    so ein paar andere Versionierungssysteme,
  • 3:23 - 3:27
    und da gehen dann die Probleme los. Ja
    also, ich habe mal einen, ich habe mal so
  • 3:27 - 3:30
    einen Kunden gehabt, die meinten: „Ist im
    Git“, und dann meinte der Typ daneben:
  • 3:30 - 3:33
    „Ja, musst noch sagen, in welchem“.
    Also das kommt vor.
  • 3:33 - 3:36
    Lachen
    Ein anderer Effekt, den man häufig
  • 3:36 - 3:41
    sieht, ist, dass jeder überall einchecken
    darf. Und das führt dann zu so Sachen wie:
  • 3:41 - 3:46
    man meldet als Bug so was wie: „In dem
    Image sind aber noch set-UID-Binaries“
  • 3:46 - 3:49
    oder sowas. Und dann machen die die alle
    weg, und dann installiert man die nächste
  • 3:49 - 3:52
    Version, und dann sind wieder welche, und
    dann sagt der Typ: „Ja, ich habe die zwar
  • 3:52 - 3:56
    alle weg gemacht, aber hat halt ein
    Developer wieder rein gemacht“.
  • 3:56 - 4:00
    Also Versionierung reicht noch nicht.
    Da muss man noch mehr machen.
  • 4:00 - 4:04
    Überhaupt die Idee, dass Leute Binaries
    einchecken, ist eine ganz schlechte.
  • 4:04 - 4:07
    Das findet man immer wieder.
    Ich rede jetzt hier nicht von png
  • 4:07 - 4:11
    oder irgendwie ein mpeg von einer Webseite
    oder sowas, sondern so eine Library oder
  • 4:11 - 4:15
    ein Executable. Das sollte man
    eigentlich nicht tun.
  • 4:15 - 4:18
    Es gibt ganz wenige Ausnahmen.
    Wenn ihr eine von den Ausnahmen habt,
  • 4:18 - 4:21
    wisst ihr es, und ansonsten
    macht es nicht!
  • 4:21 - 4:24
    Das hier ist jetzt natürlich überspitzt,
    aber so ähnlich habe ich das schon
  • 4:24 - 4:27
    mal gesehen, dass Leute verschiedene
    Versionen einchecken, aber nicht
  • 4:27 - 4:31
    verstanden haben, was eigentlich die Aufgabe
    von so einem Versionierungssystem ist.
  • 4:31 - 4:37
    Das ist auch nicht gut, macht das nicht!
  • 4:37 - 4:41
    Ich habe dann immer so einen Ratschlag
    am Ende von den jeweiligen Antipatterns.
  • 4:41 - 4:45
    Und mein Ratschlag für Versionierungssysteme
    ist: Git ist schon in Ordnung.
  • 4:45 - 4:48
    Ich bin mir der Ironie bewusst, dass meine
    eigene Software im Moment als CVS
  • 4:48 - 4:51
    im Internet ist. Das hat historische Gründe!
  • 4:51 - 4:58
    Lachen und Applaus
  • 4:58 - 5:03
    Patches hält man am besten klein, damit
    man sie einzeln anfassen kann,
  • 5:03 - 5:05
    wenn sie nicht sauber applyen.
    Das ist ein Riesenproblem, wenn jemand
  • 5:05 - 5:08
    so einen Megabyte-Patch abliefert.
    Deswegen macht das nicht.
  • 5:08 - 5:12
    Wenn ihr größere Sachen vorbereiten müsst,
    dann macht das nicht als einen großen
  • 5:12 - 5:16
    Patch, sondern nehmt einen eigenen Branch
    dafür. So ein Versionierungssystem will
  • 5:16 - 5:21
    euch helfen. Also beschäftigt euch mit den
    Features, die sie euch bieten.
  • 5:21 - 5:25
    Wenn man Annahmen hat, über, welche APIs
    verfügbar sind, oder welche Versionen von
  • 5:25 - 5:29
    Komponenten drin sein sollen, sollte man
    das im Build in einem Skript checken.
  • 5:29 - 5:33
    Und nicht erst anfangen zu bauen, und nach
    zwei Stunden abbrechen, weil irgendwas
  • 5:33 - 5:36
    nicht geklappt hat. Sowas möglichst
    vorher testen, damit es schnell failt,
  • 5:36 - 5:39
    damit man schnell reagieren kann.
  • 5:39 - 5:43
    Es gibt häufig so die Idee in Firmen, dass
    man verschiedene Abteilungen hat und jede
  • 5:43 - 5:47
    hat ihr eigenes Versionierungssystem oder
    ihr eigenes Repository. Und das kann
  • 5:47 - 5:52
    funktionieren, aber es ist sehr selten, ja?
    Häufig, der… der…
  • 5:52 - 5:56
    die Sache, die stimmen muss, damit es
    klappt, ist, dass die APIs stabil sind.
  • 5:56 - 5:59
    Und erfahrungsgemäß glauben alle, dass
    ihre APIs stabil bleiben werden, und
  • 5:59 - 6:05
    sie sind es dann aber nie. Also wenn ihr
    das vermeiden könnt, macht das nicht.
  • 6:05 - 6:08
    So, das nächste Problem ist: die Bugs
    fallen immer unter den Tisch, werden
  • 6:08 - 6:11
    vergessen, gefixt zu werden. Und die
    offensichtliche Lösung ist:
  • 6:11 - 6:16
    wir machen so einen Bugtracker.
    Umsetzung ist natürlich wie immer Seal
  • 6:16 - 6:21
    Team 6. Und der Effekt, der sich ganz
    schnell einstellt, ist, dass man merkt,
  • 6:21 - 6:26
    man hat ganz viele Bugs. Und das
    ist dann gleich das nächste Problem:
  • 6:26 - 6:29
    wir haben so viele Bugs,
    was machen wir jetzt?
  • 6:29 - 6:33
    Eine Sache, die ich inzwischen als
    Antipattern sehe, ist: Priorisieren von
  • 6:33 - 6:38
    Bugs. Ja, so eine übliche Umsetzung ist:
    man hat sowas wie „Severity: Blocker“
  • 6:38 - 6:42
    oder das ist ein Security-Bug – das soll
    hier eine Checkbox sein. Und der Effekt
  • 6:42 - 6:46
    davon ist, dass alle anderen Bugs liegen
    bleiben. Das kann man immer und immer
  • 6:46 - 6:50
    wieder beobachten. Also die… der
    eigentliche… was ich so beobachte, der,
  • 6:50 - 6:53
    der Effekt, der die meisten Bugs tötet,
    ist, wenn eine Komponente einfach
  • 6:53 - 6:56
    abgeschafft wird. Und dann kann man
    alles schließen in der Komponente.
  • 6:56 - 7:00
    Dass tatsächlich mal sowas
    weggeht, gibt es nicht.
  • 7:00 - 7:04
    Applaus
    Es gibt ein schönes Wort dafür, wo mir
  • 7:04 - 7:09
    jetzt die Übersetzungsteams bisschen leid
    tun, nämlich Bug-Welle, im Sinne von einer
  • 7:09 - 7:14
    Bugwelle vor so einem Tanker. Ich versuche
    das gerade mal zu etablieren, als Begriff.
  • 7:14 - 7:18
    Ich finde den nämlich sehr schön. So, also
    jetzt haben wir ganz viele offene Bugs,
  • 7:18 - 7:22
    was machen wir denn jetzt? Nächstes
    Problem. Und eine Idee, die häufig kommt,
  • 7:22 - 7:27
    und die auch erstmal total super klingt,
    ist, dass man bug-freien Code belohnt.
  • 7:27 - 7:31
    Und zwar am besten mit so einem Bonus, am
    besten in Geld. Wenn euer Team keine
  • 7:31 - 7:37
    offenen Bugs hat, dann werdet ihr belohnt.
    Und das führt eben dazu, das ist mir mal
  • 7:37 - 7:41
    passiert, dass ich so eine Mail gekriegt
    habe von einem Typ, wo ich ein paar Bugs
  • 7:41 - 7:45
    gefilet habe, und der kommt und meint: „Du
    Arschloch, jetzt ist mein Bonus weg. Ich
  • 7:45 - 7:51
    kann meine Hypothek nicht abzahlen!“
    Und da wusste ich dann auch erstmal nicht
  • 7:51 - 7:55
    direkt, was ich dem sagen soll. Der hat
    das dann selbst gelöst, indem er alle Bugs
  • 7:55 - 8:00
    zugemacht hat und zwar mit NOTABUG.
    Lachen
  • 8:00 - 8:03
    Hat mir natürlich versprochen, dass die
    trotzdem alle gefixt werden. Aber das
  • 8:03 - 8:07
    könnt ihr euch ja vorstellen, wie gut das
    klappt. Also sowas ist sehr… ist sehr mit
  • 8:07 - 8:12
    Vorsicht zu genießen. Reward- und
    Incentives-Sachen am besten nicht mit
  • 8:12 - 8:17
    Geld. Es gibt auch ein Anti-Antipattern
    dazu. Nämlich habe ich mal erlebt, dass
  • 8:17 - 8:21
    jemand alle Bugs im Code gefixed hat, aber
    im Bugtracker waren die noch offen. Und
  • 8:21 - 8:24
    dann habe ich nicht verstanden, bin
    hingegangen, und dann hat er mir erklärt:
  • 8:24 - 8:26
    „Ja, die brauchen mich ja nicht mehr,
    wenn die Bugs zu sind.“
  • 8:26 - 8:29
    Lachen und Applaus
    Der hat halt gesehen, hat halt gesehen, um
  • 8:29 - 8:35
    ihn rum die Kollegen sind alle nach Indien
    abgeschoben worden, die Projekte, und
  • 8:35 - 8:38
    hat sich gedacht: „Na, die lass ich lieber
    offen, die Bugs, dann werde ich hier noch
  • 8:38 - 8:42
    ein paar Monate bezahlt.“ Das hat mir
    echt, das fand ich echt atemberaubend.
  • 8:42 - 8:45
    Da habe ich so ein paar Tage schlecht
    geschlafen. Weil das ist ja schon… was
  • 8:45 - 8:49
    für ein Selbstbild hat der denn, wenn er
    glaubt, irgendwie diese, diese Einträge im
  • 8:49 - 8:54
    Bugtracker halten ihn da am Leben? Ganz
    furchtbar. Aber das gibt es in kleineren
  • 8:54 - 9:00
    Ausmaßen häufiger, dass Leute Bugs offen
    lassen, weil sie wissen: wenn die Bugs weg
  • 9:00 - 9:05
    sind, dann kommt der Chef mit der nächsten
    To-Do-Liste. Und der einzige Weg, mal eine
  • 9:05 - 9:09
    Woche Luft zu haben, ist einfach, die Bugs
    nicht zu fixen. Das gibt es häufiger,
  • 9:09 - 9:12
    achtet mal darauf in eurer Firma, ob
    ihr das auch sehen könnt. Ich würde fast
  • 9:12 - 9:19
    wetten: ja. Das ist ein häufiges Pattern.
    Das ist auch ein Klassiker hier. Man hat
  • 9:19 - 9:22
    ein tolles Projekt, und das ist wunderbar,
    aber es funktioniert nur auf dem Rechner
  • 9:22 - 9:27
    vom Entwickler. Und die Idee ist: man hat
    jetzt einen Build-Server, ja? Wir haben
  • 9:27 - 9:30
    jetzt einen Build-Server, da wird
    gebaut, das ist eine neutrale Umgebung,
  • 9:30 - 9:34
    alles super. Seal Team 6 bastelt kurz
    was, und das sieht auch echt geil aus, ja?
  • 9:34 - 9:38
    Hier, so Drohnen-assistierte
    Baugeschichten. Aber übliche Sachen, die
  • 9:38 - 9:43
    halt fehlschlagen, ist, dass dieser Build-
    Server von dem Team ist, und baut halt den
  • 9:43 - 9:47
    Code von dem Team. Und die anderen Sachen
    werden aus irgendwelchen antiken Snapshots
  • 9:47 - 9:51
    von anderen Leuten reingezogen. Oder was
    ich auch mal gesehen habe: dass Libraries
  • 9:51 - 9:56
    dann so per SMB da reingelinkt werden.
    Und das ist natürlich totale Scheiße, ja?
  • 9:56 - 10:02
    Aber das passiert, so was passiert. Eine
    häufige Sache, die man auch sieht, ist,
  • 10:02 - 10:05
    dass man so einen Build-Server hat, aber
    da muss dann jemand hinlaufen und so
  • 10:05 - 10:09
    „Build“ klicken. Und das ist auch nicht
    schlau. Ich habe hier mal versucht, ein
  • 10:09 - 10:16
    Bild herauszusuchen. Die Idee beim
    Build-Server ist es, dass der am besten
  • 10:16 - 10:21
    automatisiert baut, und zwar mindestens
    einmal täglich. So, das habe ich auch
  • 10:21 - 10:23
    schon erlebt: der Build ist
    fehlgeschlagen, und dann hat der
  • 10:23 - 10:26
    Entwickler eben auf dem Build-Server
    angefangen, irgendwelche Dateien zu
  • 10:26 - 10:31
    editieren. Das ist jetzt gerade im
    Wachstum von Devops ein Problem, was wir
  • 10:31 - 10:35
    häufiger sehen werden, glaube ich. Das
    macht natürlich den Vorteil vom Build-
  • 10:35 - 10:39
    Server komplett kaputt, ja? Weil, dann habe
    ich wieder den Effekt, das ist ja der
  • 10:39 - 10:43
    Rechner vom Developer, aber es ist halt nicht
    mehr der unter seinem Tisch, sondern in
  • 10:43 - 10:47
    dem Rack da hinten, wo „Build-Server“
    dransteht. So, ich hoffe, dass wir demnächst
  • 10:47 - 10:50
    ein Debian haben werden, was diese
    Namenskonvention übernimmt.
  • 10:50 - 10:54
    Gelächter
    Das sieht man auch häufig, ja, nicht nur
  • 10:54 - 10:57
    auf Build-Servern, sondern das wird halt
    irgendwann aufgesetzt und danach bleibt
  • 10:57 - 11:00
    das halt so. Und das hält das ganze
    Projekt zurück, weil dann irgendwelche
  • 11:00 - 11:04
    Software-Versionen da drauf sind. So übliche
    Sachen sind irgendwie eine SSL-Library,
  • 11:04 - 11:09
    die kein aktuelles TLS 1.2 kann. Und das
    werden wir mit 1.3 demnächst wieder haben,
  • 11:09 - 11:13
    das Problem. Oder irgendwie ein uraltes
    C++, und dann können die Leute die neuen
  • 11:13 - 11:16
    Features nicht benutzen. Also das ist
    alles ganz furchtbar. Will das mal hier
  • 11:16 - 11:21
    mit so einem schönen Müllhaufen
    illustrieren. Der Grund, warum man einen
  • 11:21 - 11:25
    Build-Server hat, ist, dass man täglich
    bauen kann, automatisiert, ohne dass da
  • 11:25 - 11:30
    jemand hingehen muss, und ohne dass jemand
    hingehen kann, um irgendwas zu fixen. Da
  • 11:30 - 11:34
    gibt es keine Interaktion außer: „Bau mal
    diese Version“, ja? Der Build soll
  • 11:34 - 11:38
    deterministisch sein. Das ist leider
    unabhängig vom Build-Server, muss ich euch
  • 11:38 - 11:41
    erzählen. Es gibt tatsächlich Build-
    Prozesse, da fällt jedesmal ein anderes
  • 11:41 - 11:45
    Binary raus, auch wenn man keine neue
    Version ausgecheckt hat, weil irgendwie
  • 11:45 - 11:49
    parallel gebaut wird und irgendwelche
    Dateien, die gebraucht werden, werden
  • 11:49 - 11:52
    asynchron von anderen Teilen aus dem
    Parallel-Build erzeugt. Und wenn man Glück
  • 11:52 - 11:56
    hat, kommt die richtige an. Und wenn man
    Pech hat, halt nicht. Also das muss man
  • 11:56 - 12:01
    fixen. Das ist Arbeit. Und es wäre mir
    sehr lieb, dass so Open-Source-Entwickler
  • 12:01 - 12:07
    auch alle dafür sorgen, dass ihre Projekte
    mit beliebiger Parallelität baubar sind.
  • 12:07 - 12:10
    Der nächste Grund für Build-Server
    ist Agilität.
  • 12:10 - 12:12
    Applaus
    Ja? Wenn ich irgendwas kaputtgemacht habe,
  • 12:12 - 12:16
    dann soll keine Panik ausbrechen, sondern
    dann sage ich „Rollback“ und bau halt die
  • 12:16 - 12:19
    Version von vorhin nochmal, die
    funktioniert hat. Wenn das nicht ein
  • 12:19 - 12:24
    Knopfdruck ist, dann könnt ihr den Build-
    Server auch wegschmeißen. Und natürlich
  • 12:24 - 12:28
    möchte man möglichst schnell mitkriegen,
    wenn jemand was eingecheckt hat, was den
  • 12:28 - 12:32
    Build bricht. Aber nicht sanktionieren!
    Ich habe mal so eine Firma erlebt, die hat
  • 12:32 - 12:36
    dann so ein Britney-Spears-T-Shirt gehabt,
    und das musste der Typ tragen, der den
  • 12:36 - 12:38
    letzten, zum letzten Mal den Build
    gebrochen hat.
  • 12:38 - 12:44
    Lachen und Applaus
    Macht das nicht. Das hat gut funktioniert,
  • 12:44 - 12:46
    bis sie so einen Britney-Spears-Fan als
    Angestellten hatten.
  • 12:46 - 12:52
    Lachen
    Ja. So, also das nächste Problem: ich habe
  • 12:52 - 12:55
    jetzt zwar einen Build-Server, und der
    baut das zwar unabhängig vom
  • 12:55 - 12:58
    Entwicklerrechner, aber das Binary
    funktioniert nur auf dem Rechner vom
  • 12:58 - 13:04
    Entwickler. Ist ein subtil anderes
    Problem, aber verwandt. Und das löst man
  • 13:04 - 13:07
    heute mit Docker, ist ja klar!
    Applaus
  • 13:07 - 13:11
    Und Docker ist im Prinzip keine schlechte
    Idee. Man darf halt nicht Seal Team 6
  • 13:11 - 13:15
    basteln lassen. Denn da kommen
    dann so Effekte wie: ich lutsche mir
  • 13:15 - 13:19
    irgendwelche Images von irgendwo aus dem
    Internet rein. Klassiker sind so Ramses-
  • 13:19 - 13:25
    der-Zweite-Debian und MySQL drei Punkt
    irgendwas von neunzehnhundert-äh.
  • 13:25 - 13:30
    So, dafür ist Docker nicht da. Docker ist
    gerade dafür da, dass das agil änderbar
  • 13:30 - 13:33
    ist. Und wenn ihr das nicht macht, dann
    ist es, als wenn ihr nicht lest. Könnt ihr
  • 13:33 - 13:37
    euch das gleich sparen. Also ich habe hier
    mal Frankenstein als Illustration
  • 13:37 - 13:41
    gebracht. Das bringt nichts. Dann habt ihr
    so ein Schrott-Projekt am Ende. Ich sehe
  • 13:41 - 13:44
    das häufig in der Industrie, dass die
    Leute alle Nachteile mitnehmen, aber die
  • 13:44 - 13:49
    Vorteile gezielt stehen lassen.
    Lachen und Applaus
  • 13:49 - 13:53
    Häufig gerade bei so Build-Systemen und
    Docker ist, dass man die Komponenten in
  • 13:53 - 13:56
    irgendwelchen statischen Versionen hart-
    codet, die halt aktuell waren, als es
  • 13:56 - 14:02
    aufgesetzt wurde, und danach nicht mehr
    geupdatet werden, ja? Also ich habe in den
  • 14:02 - 14:05
    letzten Jahren immer mehr Leute mit
    Build-Servern gesehen, die alles
  • 14:05 - 14:09
    automatisiert bauen. Und alle Dateien
    im Image haben so denselben Time-
  • 14:09 - 14:13
    Stamp grob. Also man sieht, dass es alles
    frisch gebaut wurde, aber es sind trotzdem
  • 14:13 - 14:18
    Versionen von 2004. Das ist sehr häufig,
    achtet darauf bei euch, ja? Und wenn ein
  • 14:18 - 14:23
    Zulieferer euch Kram gibt, der vom
    Build-Server kommt mit alten Versionen,
  • 14:23 - 14:27
    dann weist ihn darauf hin. Negatives
    Feedback. Das ist sonst wie so ein
  • 14:27 - 14:35
    Rollator: bremst nur. Container hat man
    für automatisiertes Deployment in
  • 14:35 - 14:39
    deterministischem Zustand. Das ist eine
    Sache, die haben fast alle verstanden.
  • 14:39 - 14:43
    Aber was nicht so verstanden wird, ist
    dieser, der Rollback ist eben auch
  • 14:43 - 14:47
    trivial, wenn man das mit so einem Docker-
    System baut. Dann klicke ich halt „Mach mal
  • 14:47 - 14:51
    die alte Version“ und dann fällt das Image
    der alten Version raus. Das ist ein
  • 14:51 - 14:54
    Feature, das ist nicht ein Seiteneffekt,
    sondern das ist einer der Gründe, warum
  • 14:54 - 14:59
    man das überhaupt hat. Nutzt das auch.
    Das ist nicht mehr… es tut nicht mehr weh,
  • 14:59 - 15:02
    wenn man was kaputtmacht im Build,
    sondern dann kann ich zurückrollen. Nicht
  • 15:02 - 15:07
    nur im Versionierungssystem, sondern ich
    kann auch einfach komplett, einen neuen
  • 15:07 - 15:11
    Build, fällt dann halt raus. Und am besten
    macht man sowas über die Mittagspause, ja?
  • 15:11 - 15:15
    Daher vorhin der Ratschlag, im Skript
    Abhängigkeiten testen. Und nicht nach zwei
  • 15:15 - 15:19
    Stunden den Build failen lassen.
    Docker ist… und Container sind
  • 15:19 - 15:22
    eigentlich eine gute Idee. Aber die
    meisten Leute nehmen nur die Nachteile
  • 15:22 - 15:30
    mit. Komponenten kann man agil updaten.
    Das muss man auch tun. Also ist hier keine
  • 15:30 - 15:33
    schwarze Magie, die ich hier erzähle. Aber
    es ist erstaunlich, wie viele Leute das
  • 15:33 - 15:37
    nicht machen. Und der mir als Security-Typ
    natürlich am wichtigsten erscheinende
  • 15:37 - 15:41
    Aspekt bei Containern ist, dass man damit
    Komponenten im Gesamtsystem isolieren kann
  • 15:41 - 15:46
    voneinander. Dass nicht ein Typ, der
    diesen einen Prozess hackt, automatisch
  • 15:46 - 15:50
    alle anderen im Zugriff hat. Sondern die
    laufen halt in ihren eigenen Containern.
  • 15:50 - 15:53
    Aber in der Praxis sieht man, dass dann
    der Monster-Container gebaut wird mit den
  • 15:53 - 16:00
    50 Komponenten drin. Das ist nicht gut.
    Also nehmt alle Vorteile mit. Richtig gut
  • 16:00 - 16:05
    ist das natürlich erst in Kombination, ja?
    Der Git hat alle Versionen und dem Build-
  • 16:05 - 16:08
    Server kann ich eine Version zurufen und
    dann fällt ein Image raus ohne
  • 16:08 - 16:13
    Abhängigkeiten. So, wenn ihr das nicht
    habt, dann benutzt ihr das nicht richtig.
  • 16:13 - 16:19
    Ganz einfach. Das nächste Problem ist: Der
    Code funktioniert nicht. Das kennen
  • 16:19 - 16:22
    wahrscheinlich auch alle, ist ein Problem.
    Was machen wir jetzt? Und die Lösung ist:
  • 16:22 - 16:28
    Unit-Tests! Und die Umsetzung ist häufig:
    ich habe hier gerade einen Bug, den fixe
  • 16:28 - 16:33
    ich mal, und den Check, ob der Bug weg
    ist, den mache ich jetzt als Unit-Test. Ja
  • 16:33 - 16:36
    und das ist nicht gut. Da kriegt man dann
    so eine Coverage von 2,3 Prozent, wenn es
  • 16:36 - 16:41
    hoch kommt. Und ich weiß nicht, ob ihr
    alle das Video hier gesehen habt. Das war
  • 16:41 - 16:44
    so ein Automat, der erkennen sollte, ob
    eine Hand drunter gehalten wurde. Und der
  • 16:44 - 16:48
    wurde halt von Weißen gemacht. Und die
    haben halt nie eine andere Hautfarbe
  • 16:48 - 16:53
    getestet. Und da kommt dann halt nix raus.
    So, das ist ein typischer Fall von „Unit-
  • 16:53 - 16:59
    Test-Abdeckung zu gering“. Ich glaube
    auch, dass hier die Perspektive die
  • 16:59 - 17:03
    falsche ist häufig. Die Leute glauben, sie
    machen Unit-Tests, damit sie wissen, dass
  • 17:03 - 17:08
    der Code jetzt okay ist. Nein! Unit-Tests
    sind dafür da, dass sich was ändern kann
  • 17:08 - 17:13
    und [man] sehen kann, ob es -noch- geht.
    Damit ich keine Angst mehr haben muss,
  • 17:13 - 17:17
    alten Code anzufassen. Das ist das, was
    Unit-Tests euch abnehmen: die Angst, in
  • 17:17 - 17:22
    altem Code was zu fixen. Weil ihr den
    nicht komplett versteht oder so. Und
  • 17:22 - 17:27
    je mehr Abdeckung ihr mit den Unit-Tests
    habt, desto stärker ist diese Waffe.
  • 17:27 - 17:36
    Nutzt das.
    Applaus
  • 17:36 - 17:39
    Ich muss hier ein bisschen durchgaloppieren,
    weil ich zu viele Folien habe. Ich hoffe,
  • 17:39 - 17:42
    das verzeiht ihr mir. So, das nächste
    Problem sind, dass die Leute nur positive
  • 17:42 - 17:47
    Tests haben. Die gucken: funktioniert das
    hier? Und der Effekt ist normalerweise so gut
  • 17:47 - 17:51
    wie keiner, denn die ganzen interessanten
    Bugs sind in der Fehlerbehandlung, dafür
  • 17:51 - 17:56
    braucht ihr auch Unit-Tests. Und zwar
    müsst ihr eigentlich für alles, was
  • 17:56 - 18:01
    fehlschlagen kann, einen Test haben, der
    das fehlschlagen lässt. Und dann gucken,
  • 18:01 - 18:06
    ob das immer noch funktioniert, wie es
    soll. Das sind die Sachen, die am Ende
  • 18:06 - 18:10
    über Bande woanders einen Fehler erzeugen,
    ja? Irgendwie eine Memory Corruption in
  • 18:10 - 18:14
    einem Fehlerfall, oder irgendwie „RAM wird
    nicht freigegeben im Fehlerfall“. Und dann
  • 18:14 - 18:17
    stellt sich raus: das kann man als
    Angreifer triggern. Und dann habe ich einen
  • 18:17 - 18:21
    Remote-Memory-Leak und der Prozess crasht.
    Diese Art von Sachen sind völlig überflüssig
  • 18:21 - 18:27
    und mit ordentlichen Unit-Tests abfangbar.
    Also macht das. Unit-Tests sind aber kein
  • 18:27 - 18:29
    Allheilmittel, den Eindruck möchte ich
    nicht vermitteln. Selbst wenn ich 100%
  • 18:29 - 18:33
    Unit-Test-Coverage habe, kann ich
    immer noch einen Fall übersehen haben.
  • 18:33 - 18:37
    Dennoch: das ist ein Ziel, was ihr haben
    solltet. Es gibt Tools, um die Coverage zu
  • 18:37 - 18:43
    prüfen. Nutzt diese Tools. Das ist
    wichtig. So, der nächste Fall, jetzt habe
  • 18:43 - 18:46
    ich Unit-Tests ausgerollt, ist: die
    Entwickler haben Fälle vergessen zu
  • 18:46 - 18:51
    testen, ja? Das kommt häufig vor.
    Und da gibt es einen neuen Hype: Test-
  • 18:51 - 18:55
    Driven-Development. Du schreibst erst die
    Tests und dann den Code. Und da kann ich
  • 18:55 - 18:59
    leider nichts zu sagen, weil ich das noch
    nie in der Produktion gesehen habe.
  • 18:59 - 19:02
    Ich kenne nur Leute…
  • 19:02 - 19:07
    Lachen und Applaus
  • 19:07 - 19:11
    Ich kenne nur Leute, die sich ganz sicher
    sind, dass das total geil ist. Aber ich
  • 19:11 - 19:13
    habe es noch nie… also wenn ihr da
    irgendwie wisst, dann schreibt mir mal
  • 19:13 - 19:17
    eine Mail, das würde mich echt
    interessieren. Ja, das nächste Problem
  • 19:17 - 19:20
    ist: wir haben hier Code, und der tut
    irgendwas, aber wir haben keine Ahnung,
  • 19:20 - 19:24
    wie das funktioniert. Und die Lösung ist
    natürlich: Dokumentation! Ist auch eine
  • 19:24 - 19:28
    gute Idee, das will ich keinem ausreden.
    Aber es kommt häufig vor, Seal Team 6
  • 19:28 - 19:33
    setzt ein Wiki auf, und da gibt es ganz
    häufig so Effekte – da werde ich hier
  • 19:33 - 19:38
    Congress-Teilnehmern nichts Neues erzählen
    – das Zertifikat ist gerade abgelaufen
  • 19:38 - 19:42
    oder das Wiki wirft Exceptions oder ist
    nicht erreichbar oder so. Das ist ganz
  • 19:42 - 19:47
    häufig. Und dann fallen so Sätze wie: „Ja,
    das hatte ich, glaube ich, ins Wiki getan“.
  • 19:47 - 19:52
    Und so: „Ja, das musst du halt bookmarken,
    weil Navigation haben wir noch nicht“. Und
  • 19:52 - 19:59
    ganz häufig gibt es auch: „Jaja, das
    hier oben, das stimmt nicht mehr“.
  • 19:59 - 20:04
    Also Wiki ist keine Lösung. Je kleiner man
    die Schwelle setzt dafür, da was zu
  • 20:04 - 20:09
    editieren, desto mehr fällt es unter den…
    vom Tisch. Weil die Leute
  • 20:09 - 20:12
    einfach das nicht als als wichtigen
    Schritt sehen, sondern als so kleines
  • 20:12 - 20:18
    Ding. Das muss ein richtiger Schritt im
    System sein, im Produktivbetrieb, dass
  • 20:18 - 20:23
    man sagt: „Jede Änderung wird dokumentiert,
    Punkt.“ So, die nächste Idee, die man in
  • 20:23 - 20:27
    großen Firmen häufig hört, dass man sagt:
    „Wir müssen hier mehr Kommunikation haben,
  • 20:27 - 20:33
    die Leute reden zu wenig miteinander“. Und
    dann hat man so Großraumbüros.
  • 20:33 - 20:41
    Lachen und Applaus
  • 20:41 - 20:44
    Habe ich auch noch nie
    funktionieren sehen.
  • 20:44 - 20:46
    Das klappt nicht, ja? Menschen
    müssen sich mal am Stück konzentrieren
  • 20:46 - 20:50
    können. Und je mehr Unterbrechung man hat,
    desto schlechter ist das. Und heute geht
  • 20:50 - 20:52
    der Trend sogar dahin…
  • 20:52 - 20:58
    Applaus
  • 20:58 - 21:01
    Heute geht der Trend sogar dahin, dass die
    Leute sich Slack installieren. Die
  • 21:01 - 21:05
    plakatieren gerade in Berlin. Also, die
    sich absichtlich gegenseitig unterbrechen.
  • 21:05 - 21:09
    Ist mir völlig ein Rätsel, warum Leute
    sowas tun würden. Denn nach jeder
  • 21:09 - 21:12
    Unterbrechung braucht man so eine
    Viertelstunde, bis man wieder drin ist.
  • 21:12 - 21:17
    Und diese Chatsysteme und auch Mail-
    Unterbrechungen sind darauf ausgelegt,
  • 21:17 - 21:22
    dass man nie diese 15 Minuten schafft.
    Ja, ich weiß, die Zeit ist knapp, ist gut!
  • 21:22 - 21:24
    lacht
    Lachen
  • 21:24 - 21:30
    Meetings, ja. Meetings. Da muss ich,
    glaube ich, nicht viel zu sagen.
  • 21:30 - 21:32
    Aber der Effekt ist immer derselbe: ich
    kann mich nicht konzentrieren. Und das
  • 21:32 - 21:36
    ist ein ernstes Problem.
    Da muss man aktiv gegenhalten,
  • 21:36 - 21:39
    ja? Das ist nicht so einfach. Ich habe
    jetzt überlegt: soll ich vorschlagen, die
  • 21:39 - 21:42
    Meetings kurz zu machen? Aber das ist so,
    habe ich auch nie funktionieren sehen, den
  • 21:42 - 21:47
    Ratschlag. Alle Leute glauben immer, sie
    machen ihre Meetings kurz. Funktioniert
  • 21:47 - 21:52
    nicht. Daher sage ich: lieber selten und
    One-on-One. Denn wenn man jetzt irgendein
  • 21:52 - 21:56
    Problem klären will, und da sitzen alle
    Leute aus dem Team, dann gibt es eine
  • 21:56 - 21:58
    höhere Schwelle für den Einzelnen, zu
    sagen: „Ja, da habe ich einen Fehler
  • 21:58 - 22:01
    gemacht.“ Deswegen lieber einzeln.
  • 22:01 - 22:05
    Applaus
  • 22:05 - 22:09
    Niemand, niemand hat Bock darauf, sich vor
    seinen Kollegen zu entblößen. Und das muss
  • 22:09 - 22:13
    man also nicht künstlich herbeiführen. So,
    jetzt kommen wir zur Security-Abteilung.
  • 22:13 - 22:16
    Wir haben Code und er tut irgendwas, aber
    wir trauen dem nicht. Was machen wir
  • 22:16 - 22:22
    jetzt? Nächste Idee: naja okay, wir machen
    erstmal die Compiler-Warnungen weg, ja?
  • 22:22 - 22:26
    Gute Idee. Der Effekt ist – und ich war
    schockiert, dass es da einen Begriff für
  • 22:26 - 22:31
    gibt: Onion-Code. So, Onion-Code bedeutet,
    dass ich so einen Chunk Legacy-Code habe,
  • 22:31 - 22:35
    der total viele Warnungen drin hat, und
    den seit fünf Jahren keiner mehr angefasst
  • 22:35 - 22:39
    hat. Und da findet jetzt jemand einen Bug
    drin. Und der würde den gerne fixen. Aber
  • 22:39 - 22:43
    dann compilet der Rest immer noch mit den
    ganzen Warnungen. Und die müsste ich dann
  • 22:43 - 22:47
    fixen, damit ich den Fix einchecken kann
    für den Bug. Und ich verstehe diesen Code
  • 22:47 - 22:51
    aber nicht. Ich verstehe nur den kleinen
    Teil, wo ich den Bug gefunden habe. Und
  • 22:51 - 22:56
    dann mache ich einen Layer drum rum, und
    der guckt diesen einen Fall, fängt ihn ab.
  • 22:56 - 22:59
    Und wenn das mehrere Leute machen, hat man
    so eine Zwiebel. Und deswegen heißt das
  • 22:59 - 23:04
    Onion-Code. Das ist ganz furchtbar, ja?
  • 23:04 - 23:10
    Wenn ihr das irgendwo seht,
    dann ‚burn it with fire‘!
  • 23:10 - 23:13
    So, nächster Vorschlag: wir haben nur noch
    Releases ohne offene Bugs. Das klingt auch
  • 23:13 - 23:17
    total super. Und ich war auch mal bei
    einem Kunden, der das probiert hat,
  • 23:17 - 23:22
    und da kam dann so eine Mail:
    „Mach mal deine Bugs alle zu.“ Und
  • 23:22 - 23:25
    dann meine ich so: „Ich bin aber hier,
    um Bugs aufzumachen, nicht um sie
  • 23:25 - 23:28
    zuzumachen.“ Und dann meinte er: „Ja,
    die machen wir danach wieder auf, keine
  • 23:28 - 23:37
    Sorge.“
    Lachen und Applaus
  • 23:37 - 23:41
    Muss ich, glaube ich, nicht erläutern, ob
    die wieder aufgemacht wurden oder nicht.
  • 23:41 - 23:44
    Ja, externer Audit, und das tut mir in der
    Seele weh, denn das biete ich geschäftlich
  • 23:44 - 23:48
    an, ja, das ist leider auch teilweise ein
    Antipattern. Denn was hier passiert, ist,
  • 23:48 - 23:52
    dass die Leute so einen Blackbox-Pentest
    beauftragen. Und ein Blackbox-Pentest
  • 23:52 - 23:55
    heißt, der Tester hat keinen vollen
    Zugriff auf das System, der weiß nicht,
  • 23:55 - 23:58
    wie das funktioniert, sondern soll das in
    dem Test selber rausfinden. Und dann
  • 23:58 - 24:02
    passiert sowas hier. Und was mich an der
    Stelle am meisten beeindruckt hat, ist,
  • 24:02 - 24:07
    dass es dieses Bild schon gab. Das habe
    ich jetzt nicht gemacht. So, das ist
  • 24:07 - 24:12
    leider üblich. Man testet nicht den Code,
    sondern man testet den Pentester. Und ich
  • 24:12 - 24:15
    als Pentester habe jetzt natürlich… könnte
    jetzt sagen: „Ja, ist mir doch egal, wen
  • 24:15 - 24:20
    die da testen, solange ich bezahlt werde.“
    Aber ich habe da so einen Moralkodex. Ich
  • 24:20 - 24:23
    hätte gern dem Kunden geholfen und nicht
    nur das Geld genommen. Das ist für alle
  • 24:23 - 24:27
    Seiten Scheiße. Macht das nicht. Ja,
    Pentests. Ich sage, das ist ein
  • 24:27 - 24:32
    Compliance-Problem, dass die Leute alle
    aus Compliance-Gründen Pentests machen.
  • 24:32 - 24:35
    Und das ist eigentlich an sich schon ein
    furchtbares Zeichen, dass wir die Security
  • 24:35 - 24:39
    nicht hinkriegen, sondern Compliance
    brauchen, um uns dazu zu bringen, dass wir
  • 24:39 - 24:45
    doch Security machen. Wir sollten uns alle
    schämen! Fuzzing ist auch so ein Ding. Das
  • 24:45 - 24:50
    wird gerne gemacht. Fuzzing heißt, dass
    ich zufällige Eingaben generiere und gegen
  • 24:50 - 24:53
    meinen Endpunkt werfe und gucke, ob der
    platzt oder nicht. Und das ist
  • 24:53 - 24:57
    erschütternd erfolgreich, ja? Das
    funktioniert. Und ich habe mal erlebt,
  • 24:57 - 25:00
    dass sie gesagt haben: „Nee, den Code
    hier, den musst du nicht testen, den haben
  • 25:00 - 25:04
    wir schon zu Tode gefuzzt. Seit Monaten
    läuft unsere Fuzzing-Farm.“ Und da stellt
  • 25:04 - 25:07
    sich dann heraus: die haben zwar
    Milliarden von Test-Cases geprüft. Aber
  • 25:07 - 25:12
    das war immer derselbe.
    Lachen
  • 25:12 - 25:16
    Total super. Und häufig ist Fuzzing so ein
    Feigenblatt, womit dann andere Maßnahmen
  • 25:16 - 25:18
    nicht gemacht werden, weil wir haben doch
    schon gefuzzt, und das ist auch in
  • 25:18 - 25:22
    Ordnung, ja? Also ich habe nichts gegen
    Fuzzing an sich, denn es funktioniert
  • 25:22 - 25:32
    leider. Aber es darf kein Hindernis dafür
    sein, andere wichtige Maßnahmen zu machen.
  • 25:32 - 25:35
    Das ist ein generelles Problem, was ich
    häufiger sehe, dass, wenn das Management
  • 25:35 - 25:40
    die Wahl hat zwischen einer Maßnahme, die
    wahrscheinlich funktioniert, aber keine
  • 25:40 - 25:43
    Metriken abwirft, und einer Maßnahme, die
    wahrscheinlich nicht funktioniert, aber
  • 25:43 - 25:48
    Metriken abwirft, dass immer die mit den
    Metriken gemacht wird. Management liebt
  • 25:48 - 25:52
    qualifizierbare Geschichten, wo irgend…
    quantifizierbare Geschichten, wo
  • 25:52 - 25:56
    irgendeine Zahl rausfällt. Und das geht
    häufig nach hinten los, ja? Ich habe also
  • 25:56 - 26:02
    mal so ein… das war ein wirklich
    schockierendes Erlebnis für mich. Ich bin,
  • 26:02 - 26:06
    ich sage mal preiswert, aber nicht billig,
    ja, also meine Tagessätze. – Ich weiß, ich
  • 26:06 - 26:11
    weiß! – So und dann gehe ich dahin, zu dem
    Kunden, und der Kunde sagt: „Geh mal nach
  • 26:11 - 26:15
    Hause.“ Also ich wurde trotzdem bezahlt,
    ja? Haben gesagt: „Geh mal nach Hause.“
  • 26:15 - 26:20
    Und ich so: „Wie jetzt?“ „Ja, ist warm
    heute.“ Meinte ich so: „Was?“ „Ja die
  • 26:20 - 26:23
    Klimaanlage reicht für das Fuzzing-Lab
    oder die Consultants.“
  • 26:23 - 26:32
    Lachen und Applaus
    Ja. Gut. Das nächste Problem, das ist so
  • 26:32 - 26:36
    ein bisschen schwierig. Aber es ist mir
    sehr wichtig, weil das so gerade im Kommen
  • 26:36 - 26:41
    ist. Die Coder sind überfordert. Und dann
    sagt man: wir brauchen irgendeinen soliden
  • 26:41 - 26:44
    Ansatz. Thread-Modeling! Das ist gerade
    im Kommen. Und das ist eine gute
  • 26:44 - 26:48
    Geschichte, aber es wird häufig
    missverstanden. Thread-Modeling, der
  • 26:48 - 26:51
    übliche Ansatz ist, dass man sagt: jedes
    Team macht ein Thread-Model für den Code.
  • 26:51 - 26:56
    Das ist gut. Ja? Aber häufig macht dann
    der Feature-Owner oder Projektmanager
  • 26:56 - 27:00
    mit dem Dokumentationsteam zusammen, füllt
    irgendwelche Formulare aus, und die
  • 27:00 - 27:05
    Developer sind überhaupt nicht betroffen.
    Und das ist ein krasser Fehler. Denn beim
  • 27:05 - 27:09
    Thread-Modeling geht es nicht um das
    Papier am Ende. Das ist kein Zertifikat.
  • 27:09 - 27:14
    Sondern es geht um den Weg zum Papier. Es
    geht darum, dass die Entwickler mal aus
  • 27:14 - 27:17
    der Sicht des Angreifers versuchen, auf
    ihren Code zu gucken, dass sie verstehen,
  • 27:17 - 27:21
    was da Angriffsoberfläche ist, dass sie
    sehen, wo die Sachen sind, auf die man
  • 27:21 - 27:25
    aufpassen muss, welche Angriffe denkbar
    sind. Wenn jemand anderes das Thread-Model
  • 27:25 - 27:30
    macht, das hätte man sich auch sparen
    können, ja? Also: Thread-Model ist gut,
  • 27:30 - 27:34
    aber das müssen die Entwickler machen. Wir
    sind fast durch. Ich habe noch ein paar
  • 27:34 - 27:37
    allgemeine Ratschläge, weil ich mir
    dachte: ich kann euch hier nicht so
  • 27:37 - 27:42
    deprimiert nach Hause gehen lassen. Aus
    Sicht des Management ist aus meiner Seite
  • 27:42 - 27:45
    ganz wichtig, dass man eine Fehlerkultur
    etabliert. Das heißt: niemand wird
  • 27:45 - 27:48
    bestraft für Bugs. Denn sonst verstecken
    die Leute Bugs, und das ist noch
  • 27:48 - 27:52
    schlechter, ja? Man muss Leute belohnen,
  • 27:52 - 27:58
    Applaus
    Man muss Leute belohnen, wenn sie
  • 27:58 - 28:02
    einen Bug finden und fixen. Aber nicht
    mit Geld belohnen, sondern mit Ruhm und
  • 28:02 - 28:07
    Ehre. Ich schlage immer vor, einmal die
    Woche, irgendwie Freitag ab 4 oder so,
  • 28:07 - 28:13
    macht man so ein All-Hands-Meeting, wo –
    wenn die Leute wirklich was Anderes
  • 28:13 - 28:17
    vorhaben, müssen sie nicht hingehen, also
    kein Zwang – aber wo dann die alten
  • 28:17 - 28:22
    Hasen ihre schönsten Bugs erklären, ja?
    Damit es als etwas Positives gesehen wird,
  • 28:22 - 28:26
    einen Bug zu finden, und damit die Jungen
    was dabei lernen. Das ist eine gute Sache,
  • 28:26 - 28:29
    das kann ich empfehlen. Das funktioniert
    auch gut, und das bringt auch das Team
  • 28:29 - 28:35
    zusammen. Und es nimmt so diesen Rockstar-
    Status weg, der auch nur schadet. So, die
  • 28:35 - 28:39
    nächste Sache ist, dass man dafür sorgt,
    dass der Bug auch von dem gefixed wird,
  • 28:39 - 28:43
    der den Code geschrieben hat. Es gibt
    große Firmen, die teilweise ein zweites
  • 28:43 - 28:47
    Team dafür haben, Sicherheits-Bugs zu
    fixen. Und dann kriegt der Typ, der das
  • 28:47 - 28:49
    programmiert hat, überhaupt nicht mit,
    dass er die ganze Zeit schlechten Code
  • 28:49 - 28:53
    programmiert. Der zieht dann am besten
    noch so von Team zu Team, hinterlässt
  • 28:53 - 28:57
    überall so Tretminen. Das ist wichtig,
    dass es Feedback gibt. Und zwar nicht als
  • 28:57 - 29:01
    Strafe, sondern damit die Leute merken,
    wenn sie Fehler machen, ja? Menschen
  • 29:01 - 29:04
    lernen aus ihren Fehlern. Dafür muss man
    verstehen, wenn man einen Fehler gemacht
  • 29:04 - 29:08
    hat. Und das ist die, wo… komme ich
    zurück zu dieser Meeting-Kultur. Wenn man
  • 29:08 - 29:12
    ein Meeting hat und sagt: „Du hast hier
    aber Scheiße gemacht“, dann macht man den
  • 29:12 - 29:16
    vor dem ganzen Team nackig. Das hilft
    überhaupt nicht, ja? Man… es ist auch
  • 29:16 - 29:19
    eine Kulturkreis-Frage. Manche
    Kulturkreise können damit besser umgehen
  • 29:19 - 29:25
    als andere. Aber es gibt eben viele Leute,
    die haben ein starkes Problem damit, dass
  • 29:25 - 29:28
    ihnen gesagt wird: „Du hast einen Fehler
    gemacht“, ja? Weil das, in Japan zum
  • 29:28 - 29:32
    Beispiel ist es sehr wichtig, dass man der
    Firma hilft und nicht gesehen wird, wie
  • 29:32 - 29:36
    man irgendwie an irgendwas schuld ist.
    Also das ist schwierig, so etwas
  • 29:36 - 29:40
    aufzubauen. Aber das ist sehr wichtig.
    Fehler sind nicht schlecht, sondern aus
  • 29:40 - 29:46
    den Fehlern kann man lernen, ja? Fehler
    sind gut. Dann finde ich, dass die Firma
  • 29:46 - 29:51
    Werte kommunizieren sollte. Werte wie:
    uns ist der Code wichtiger, die Güte des
  • 29:51 - 29:55
    Codes ist wichtiger als die Quantität, ja?
    Es kommt nicht darauf an, hier mehr Kram
  • 29:55 - 30:00
    dran zu tun, sondern es kommt darauf an,
    dass wir, wenn wir was geschrieben haben,
  • 30:00 - 30:03
    da auch noch einmal darauf zurückkommen
    später, ja? Wenn wir was dazugelernt
  • 30:03 - 30:08
    haben, dass wir das auf den alten Code
    anwenden. Und damit das stressfrei machbar
  • 30:08 - 30:13
    ist, braucht man ordentliche Unit-Tests.
    So haben wir dann so einen Kreisschluss.
  • 30:13 - 30:16
    Die Anekdote, die ich hier erzählen
    wollte, war, dass ich mit einem Freund
  • 30:16 - 30:21
    einen Job hatte. Und da war… Teil von dem
    Problem war ein User-Interface. Und da
  • 30:21 - 30:24
    hatten wir beide überhaupt keine Ahnung
    von. Und der Freund meinte dann ganz
  • 30:24 - 30:28
    locker: „Ja lass uns das in Qt machen.“
    Und ich meinte so: „Wir haben beide keine
  • 30:28 - 30:31
    Ahnung von Qt. Was machst du hier?“ Und
    da meint er: „Ja, das hätte ich gerne im
  • 30:31 - 30:34
    Resümee stehen, ja? Das muss… in meinem
    Lebenslauf sieht das gut aus.“ Das ist
  • 30:34 - 30:37
    schon ein paar Jahre her. Aber was ich
    sagen will: wenn die Firma den Leuten
  • 30:37 - 30:41
    nicht die Zeit gibt, Sachen zu lernen,
    dann lernen sie das in Projekten der
  • 30:41 - 30:45
    Firma, und die werden dann Scheiße.
  • 30:45 - 30:55
    Applaus
  • 30:55 - 30:58
    Was man auch häufiger sieht, ist, dass das
    Management glaubt, sie müsste die
  • 30:58 - 31:03
    Architektur der Software vorgeben, oder
    welche Datenbank verwendet wird oder so.
  • 31:03 - 31:05
    Und das ist eigentlich auch immer eine
    schlechte Idee. Denn entweder die
  • 31:05 - 31:09
    Architektur ist offensichtlich, dann hilft
    es nichts. Oder sie ist nicht
  • 31:09 - 31:11
    offensichtlich, dann sind die Ratschläge
    wahrscheinlich falsch, weil wir das
  • 31:11 - 31:15
    Problem noch nicht wirklich verstanden
    haben. Also das ist auch eine Sache, da
  • 31:15 - 31:18
    sollte sich das Management
    zurücknehmen an der Stelle.
  • 31:18 - 31:24
    Applaus
    Und hier noch so ein bisschen Selbsthilfe
  • 31:24 - 31:28
    für Entwickler. Ist die letzte Folie, ganz
    entspannt bleiben. Der Druck kommt immer
  • 31:28 - 31:33
    von euch selbst. Das Management kann viel
    erzählen, ja? Deadline hier, Deadline da.
  • 31:33 - 31:37
    Lasst euch da nicht dazu bringen,
    Überstunden zu fahren. Immer schön um 9
  • 31:37 - 31:44
    kommen, um 5 nach Hause gehen. Also…
    Applaus
  • 31:44 - 31:50
    Wenn unrealistische Anforderungen
    reinkommen, dann müsst ihr da ganz ehrlich
  • 31:50 - 31:53
    sein und sagen: „Das wird wahrscheinlich
    nicht klappen. Ich nehme jetzt euer Geld
  • 31:53 - 31:57
    und arbeite daran. Aber ich sage euch
    jetzt: das wird nix, ja?“ Immer schön
  • 31:57 - 32:00
    Paper-Trail hinterlassen, dass das nichts
    wird und man es rechtzeitig gesagt hat.
  • 32:00 - 32:03
    Man kann dann dran arbeiten, weil viele
    von euch werden wahrscheinlich die Kohle
  • 32:03 - 32:07
    brauchen, aber ehrlich sein, nicht so tun,
    als wenn wir das mit ein paar irgendwie
  • 32:07 - 32:11
    die-Nacht-durchgemacht am Ende noch
    reißen können. Das ist besonders in der
  • 32:11 - 32:16
    Spielebranche ein riesiges Problem, dass
    die Leute total Burnout kriegen. Man muss
  • 32:16 - 32:19
    das verstehen mit dem Management wie ein
    gegenseitiges Training, ja? Wenn ich dem
  • 32:19 - 32:23
    Management so etwas durchgehen lasse,
    dann zeige ich ihnen: das ist die neue
  • 32:23 - 32:26
    Baseline, ja? Das erwarten die ab dann.
  • 32:26 - 32:28
    Herald: Soll ich mir einen Stuhl holen,
    damit ich mich daneben setze?
  • 32:28 - 32:29
    Fefe: Kannst du machen,
    das ist die letzte Folie.
  • 32:29 - 32:31
    Herald: Okay.
    Fefe: Ganz ruhig!
  • 32:31 - 32:34
    So, und der letzte Satz,
    den ich habe: Zeit ist… muss man sich
  • 32:34 - 32:36
    selber nehmen, ja?
    Ich habe zwar gerade gesagt…
  • 32:36 - 32:42
    Lachen und Applaus
  • 32:42 - 32:50
    Herald: Raus mit dir!
    weiter Applaus
  • 32:50 - 32:53
    Ich habe zwar gerade dem Management
    empfohlen, euch Zeit zu geben,
  • 32:53 - 32:56
    aber wenn ihr darauf wartet,
    das wird nichts.
  • 32:56 - 33:00
    Lachen
    So, ich fürchte, die Fragezeit ist schon
  • 33:00 - 33:03
    vorbei, oder?
    Herald: Jo.
  • 33:03 - 33:14
    Lachen und Applaus
  • 33:14 - 33:17
    Das Beeindruckende ist ja wirklich:
    die sind alle da geblieben, und da ist
  • 33:17 - 33:22
    nicht einer vom Stuhl gefallen.
    Fefe: Ja! lacht
  • 33:22 - 33:28
    Herald: Vielen, vielen Dank! Ausgänge
    sind beide offen. Das war’s von Fefe.
  • 33:28 - 33:30
    Hier noch mal ein Applaus für ihn bitte!
  • 33:30 - 33:38
    Applaus
  • 33:38 - 33:54
    Abspannmusik
  • 33:54 - 33:59
    Untertitel erstellt von c3subtitles.de
    im Jahr 2018
Title:
34C3 - Antipatterns und Missverständnisse in der Softwareentwicklung
Description:

more » « less
Video Language:
German
Duration:
34:00

German subtitles

Revisions