[Script Info] Title: [Events] Format: Layer, Start, End, Style, Name, MarginL, MarginR, MarginV, Effect, Text Dialogue: 0,0:00:00.00,0:00:15.72,Default,,0000,0000,0000,,{\i1}34c3 preroll music{\i0} Dialogue: 0,0:00:15.72,0:00:20.94,Default,,0000,0000,0000,,Herald: Der Fefe hatte mich gebeten,\Nmich kurz zu halten, weil, er hat Angst, Dialogue: 0,0:00:20.94,0:00:26.74,Default,,0000,0000,0000,,dass der Talk nicht in die 30 Minuten passt.\NVon daher gebe ich jetzt mal Gas und Dialogue: 0,0:00:26.74,0:00:29.91,Default,,0000,0000,0000,,sage: „Antipatterns und Missverständnisse\Nin der Software-Entwicklung“! Dialogue: 0,0:00:29.91,0:00:34.05,Default,,0000,0000,0000,,Und wie sagte jemand gestern?\N„Ach Fefe! Das ist doch der mit der Kolumne Dialogue: 0,0:00:34.05,0:00:37.87,Default,,0000,0000,0000,,beim ehemaligen Nachrichtenmagazin!“\NHere we go! Dialogue: 0,0:00:37.87,0:00:47.04,Default,,0000,0000,0000,,{\i1}Applaus{\i0} Dialogue: 0,0:00:47.04,0:00:50.69,Default,,0000,0000,0000,,Fefe: Hallo hallo. Hallo hallo. Ja, ja\Nvielen Dank, dass ihr so zahlreich Dialogue: 0,0:00:50.69,0:00:53.35,Default,,0000,0000,0000,,erschienen seid. Ein bisschen zahlreicher,\Nals ich gedacht habe. Nächstes Mal mache Dialogue: 0,0:00:53.35,0:00:59.26,Default,,0000,0000,0000,,ich doch lieber parallel zu Minkorrekt\Nwieder. Es geht um Antipatterns. Dialogue: 0,0:00:59.26,0:01:04.17,Default,,0000,0000,0000,,Antipatterns sind Sachen, die man macht,\Ndie man häufig macht, die populäre Dialogue: 0,0:01:04.17,0:01:07.82,Default,,0000,0000,0000,,Maßnahmen sind, um ein Problem zu lösen,\Ndie dann aber entweder gar nicht Dialogue: 0,0:01:07.82,0:01:13.68,Default,,0000,0000,0000,,funktionieren oder nach hinten losgehen.\NUnd ich habe mir gedacht, beim Congress Dialogue: 0,0:01:13.68,0:01:17.84,Default,,0000,0000,0000,,gibt es immer so schöne Streitereien um\Ndas Motto. Da mache ich auch mal ein Motto. Dialogue: 0,0:01:17.84,0:01:20.35,Default,,0000,0000,0000,,Und das hier ist so ein Motto, was\Nich sehr profunde finde, und wo ihr Dialogue: 0,0:01:20.35,0:01:25.85,Default,,0000,0000,0000,,hoffentlich im Laufe des Vortrags sehen\Nwerdet, warum das das Motto ist. Ja, „wer Dialogue: 0,0:01:25.85,0:01:31.53,Default,,0000,0000,0000,,lesen kann, aber es nicht tut, hat keinen\NVorteil dem gegenüber, der das nicht kann“. Dialogue: 0,0:01:31.53,0:01:36.33,Default,,0000,0000,0000,,Die Struktur des Vortrags…\N{\i1}Applaus{\i0} Dialogue: 0,0:01:36.33,0:01:41.72,Default,,0000,0000,0000,,Die Struktur des Vortrags will ich an\Neinem Beispiel kurz umreißen. Dialogue: 0,0:01:41.72,0:01:45.64,Default,,0000,0000,0000,,Es geht immer damit los,\Ndass wir ein Problem haben. Dialogue: 0,0:01:45.64,0:01:50.38,Default,,0000,0000,0000,,Dann geht immer Seal Team 6\Nlos und hackt irgendwas. Dialogue: 0,0:01:50.38,0:01:53.28,Default,,0000,0000,0000,,Also denkt euch hier ein Team von\NSpezialexperten. Ja ich will jetzt nicht Dialogue: 0,0:01:53.28,0:01:58.19,Default,,0000,0000,0000,,die Seals beleidigen, bestimmt auch alles\Nnette Leute. Und dann kommt eine Umsetzung, Dialogue: 0,0:01:58.19,0:02:02.78,Default,,0000,0000,0000,,da geht es meistens in die Hose.\NUnd dann haben wir einen Effekt, und Dialogue: 0,0:02:02.78,0:02:08.39,Default,,0000,0000,0000,,hoffentlich, hoffentlich eine Erkenntnis\Ngewonnen. Ich habe mir gedacht, wir Dialogue: 0,0:02:08.39,0:02:11.84,Default,,0000,0000,0000,,versuchen mal so eine interaktive\NKomponente. Und zwar wenn man sich so Dialogue: 0,0:02:11.84,0:02:15.92,Default,,0000,0000,0000,,Übertragungen aus dem britischen Parlament\Nansieht, dann gibt es immer so ein Dialogue: 0,0:02:15.92,0:02:19.37,Default,,0000,0000,0000,,Gemurmel, wenn die Leute zustimmen. Und\Nich dachte mir, wenn ich sage, „Hebt mal Dialogue: 0,0:02:19.37,0:02:23.19,Default,,0000,0000,0000,,den Arm, wenn euch das mal passiert ist“,\Ndann haben die Leute vielleicht Angst, auf Dialogue: 0,0:02:23.19,0:02:26.69,Default,,0000,0000,0000,,dem Stream zu landen und sich zu outen.\NDeswegen dachte ich, wir murmeln mal. Also Dialogue: 0,0:02:26.69,0:02:30.02,Default,,0000,0000,0000,,wenn einer von euch sich bei einem Muster\Nwiedererkennt, könnt ihr mal versuchen. Dialogue: 0,0:02:30.02,0:02:34.21,Default,,0000,0000,0000,,Wir gucken mal, ob das klappt. Ja,\Nvielleicht hört man das dann. Okay. Dialogue: 0,0:02:34.21,0:02:38.69,Default,,0000,0000,0000,,Also, erstes Problem. Dieses Bild, ich\Nmöchte das gleich dazusagen, Dialogue: 0,0:02:38.69,0:02:44.68,Default,,0000,0000,0000,,{\i1}Lachen{\i0}\Nist mir gespendet worden. Dialogue: 0,0:02:44.68,0:02:48.34,Default,,0000,0000,0000,,Ich liefere hier keine Kunden ans Messer,\Nund es geht nur um Anekdoten. Dialogue: 0,0:02:48.34,0:02:52.60,Default,,0000,0000,0000,,Also wer sich glaubt, wiederzuerkennen,\Nliegt wahrscheinlich falsch. Dialogue: 0,0:02:52.60,0:02:56.04,Default,,0000,0000,0000,,So, das ist ein typisches Problem\Nin der Software-Entwicklung: Dialogue: 0,0:02:56.04,0:03:00.01,Default,,0000,0000,0000,,die Versionierung von und die Backups\Nvon alten Versionen aufzuheben. Dialogue: 0,0:03:00.01,0:03:05.22,Default,,0000,0000,0000,,Das ist hier, ich hoffe, ihr habt das gesehen\Noben in der Ecke, das ist ein USB-Stick. Dialogue: 0,0:03:05.22,0:03:07.95,Default,,0000,0000,0000,,Und die typische Idee ist: Wir machen\Njetzt mal ein Versionierungssystem! Dialogue: 0,0:03:07.95,0:03:11.80,Default,,0000,0000,0000,,Und das ist eine gute Idee. Die\NUmsetzung ist dann gewöhnlich: Dialogue: 0,0:03:11.80,0:03:14.82,Default,,0000,0000,0000,,der, der gerade ein akutes\NProblem hat, bastelt schnell was, Dialogue: 0,0:03:14.82,0:03:18.55,Default,,0000,0000,0000,,und dann kriegt man so ein Git. Und Git\Nist eigentlich gut, aber man hat halt Dialogue: 0,0:03:18.55,0:03:22.96,Default,,0000,0000,0000,,nicht nur Git, sondern man hat dann noch\Nso ein paar andere Versionierungssysteme, Dialogue: 0,0:03:22.96,0:03:27.13,Default,,0000,0000,0000,,und da gehen dann die Probleme los. Ja\Nalso, ich habe mal einen, ich habe mal so Dialogue: 0,0:03:27.13,0:03:30.07,Default,,0000,0000,0000,,einen Kunden gehabt, die meinten: „Ist im\NGit“, und dann meinte der Typ daneben: Dialogue: 0,0:03:30.07,0:03:33.01,Default,,0000,0000,0000,,„Ja, musst noch sagen, in welchem“.\NAlso das kommt vor. Dialogue: 0,0:03:33.01,0:03:36.38,Default,,0000,0000,0000,,{\i1}Lachen{\i0}\NEin anderer Effekt, den man häufig Dialogue: 0,0:03:36.38,0:03:40.77,Default,,0000,0000,0000,,sieht, ist, dass jeder überall einchecken\Ndarf. Und das führt dann zu so Sachen wie: Dialogue: 0,0:03:40.77,0:03:45.54,Default,,0000,0000,0000,,man meldet als Bug so was wie: „In dem\NImage sind aber noch set-UID-Binaries“ Dialogue: 0,0:03:45.54,0:03:48.54,Default,,0000,0000,0000,,oder sowas. Und dann machen die die alle\Nweg, und dann installiert man die nächste Dialogue: 0,0:03:48.54,0:03:52.04,Default,,0000,0000,0000,,Version, und dann sind wieder welche, und\Ndann sagt der Typ: „Ja, ich habe die zwar Dialogue: 0,0:03:52.04,0:03:55.85,Default,,0000,0000,0000,,alle weg gemacht, aber hat halt ein\NDeveloper wieder rein gemacht“. Dialogue: 0,0:03:55.85,0:04:00.27,Default,,0000,0000,0000,,Also Versionierung reicht noch nicht.\NDa muss man noch mehr machen. Dialogue: 0,0:04:00.27,0:04:04.47,Default,,0000,0000,0000,,Überhaupt die Idee, dass Leute Binaries\Neinchecken, ist eine ganz schlechte. Dialogue: 0,0:04:04.47,0:04:07.01,Default,,0000,0000,0000,,Das findet man immer wieder.\NIch rede jetzt hier nicht von png Dialogue: 0,0:04:07.01,0:04:11.14,Default,,0000,0000,0000,,oder irgendwie ein mpeg von einer Webseite\Noder sowas, sondern so eine Library oder Dialogue: 0,0:04:11.14,0:04:14.75,Default,,0000,0000,0000,,ein Executable. Das sollte man\Neigentlich nicht tun. Dialogue: 0,0:04:14.75,0:04:17.79,Default,,0000,0000,0000,,Es gibt ganz wenige Ausnahmen.\NWenn ihr eine von den Ausnahmen habt, Dialogue: 0,0:04:17.79,0:04:21.40,Default,,0000,0000,0000,,wisst ihr es, und ansonsten\Nmacht es nicht! Dialogue: 0,0:04:21.40,0:04:23.79,Default,,0000,0000,0000,,Das hier ist jetzt natürlich überspitzt,\Naber so ähnlich habe ich das schon Dialogue: 0,0:04:23.79,0:04:27.41,Default,,0000,0000,0000,,mal gesehen, dass Leute verschiedene\NVersionen einchecken, aber nicht Dialogue: 0,0:04:27.41,0:04:31.21,Default,,0000,0000,0000,,verstanden haben, was eigentlich die Aufgabe\Nvon so einem Versionierungssystem ist. Dialogue: 0,0:04:31.21,0:04:36.91,Default,,0000,0000,0000,,Das ist auch nicht gut, macht das nicht! Dialogue: 0,0:04:36.91,0:04:41.33,Default,,0000,0000,0000,,Ich habe dann immer so einen Ratschlag\Nam Ende von den jeweiligen Antipatterns. Dialogue: 0,0:04:41.33,0:04:44.71,Default,,0000,0000,0000,,Und mein Ratschlag für Versionierungssysteme\Nist: Git ist schon in Ordnung. Dialogue: 0,0:04:44.71,0:04:48.24,Default,,0000,0000,0000,,Ich bin mir der Ironie bewusst, dass meine\Neigene Software im Moment als CVS Dialogue: 0,0:04:48.24,0:04:51.49,Default,,0000,0000,0000,,im Internet ist. Das hat historische Gründe! Dialogue: 0,0:04:51.49,0:04:57.85,Default,,0000,0000,0000,,{\i1}Lachen und Applaus{\i0} Dialogue: 0,0:04:57.85,0:05:02.56,Default,,0000,0000,0000,,Patches hält man am besten klein, damit\Nman sie einzeln anfassen kann, Dialogue: 0,0:05:02.56,0:05:05.08,Default,,0000,0000,0000,,wenn sie nicht sauber applyen.\NDas ist ein Riesenproblem, wenn jemand Dialogue: 0,0:05:05.08,0:05:07.71,Default,,0000,0000,0000,,so einen Megabyte-Patch abliefert.\NDeswegen macht das nicht. Dialogue: 0,0:05:07.71,0:05:12.17,Default,,0000,0000,0000,,Wenn ihr größere Sachen vorbereiten müsst,\Ndann macht das nicht als einen großen Dialogue: 0,0:05:12.17,0:05:15.79,Default,,0000,0000,0000,,Patch, sondern nehmt einen eigenen Branch\Ndafür. So ein Versionierungssystem will Dialogue: 0,0:05:15.79,0:05:20.96,Default,,0000,0000,0000,,euch helfen. Also beschäftigt euch mit den\NFeatures, die sie euch bieten. Dialogue: 0,0:05:20.96,0:05:24.66,Default,,0000,0000,0000,,Wenn man Annahmen hat, über, welche APIs\Nverfügbar sind, oder welche Versionen von Dialogue: 0,0:05:24.66,0:05:29.19,Default,,0000,0000,0000,,Komponenten drin sein sollen, sollte man\Ndas im Build in einem Skript checken. Dialogue: 0,0:05:29.19,0:05:32.71,Default,,0000,0000,0000,,Und nicht erst anfangen zu bauen, und nach\Nzwei Stunden abbrechen, weil irgendwas Dialogue: 0,0:05:32.71,0:05:36.21,Default,,0000,0000,0000,,nicht geklappt hat. Sowas möglichst\Nvorher testen, damit es schnell failt, Dialogue: 0,0:05:36.21,0:05:39.28,Default,,0000,0000,0000,,damit man schnell reagieren kann. Dialogue: 0,0:05:39.28,0:05:42.66,Default,,0000,0000,0000,,Es gibt häufig so die Idee in Firmen, dass\Nman verschiedene Abteilungen hat und jede Dialogue: 0,0:05:42.66,0:05:47.47,Default,,0000,0000,0000,,hat ihr eigenes Versionierungssystem oder\Nihr eigenes Repository. Und das kann Dialogue: 0,0:05:47.47,0:05:52.16,Default,,0000,0000,0000,,funktionieren, aber es ist sehr selten, ja?\NHäufig, der… der… Dialogue: 0,0:05:52.16,0:05:55.98,Default,,0000,0000,0000,,die Sache, die stimmen muss, damit es\Nklappt, ist, dass die APIs stabil sind. Dialogue: 0,0:05:55.98,0:05:59.20,Default,,0000,0000,0000,,Und erfahrungsgemäß glauben alle, dass\Nihre APIs stabil bleiben werden, und Dialogue: 0,0:05:59.20,0:06:04.82,Default,,0000,0000,0000,,sie sind es dann aber nie. Also wenn ihr\Ndas vermeiden könnt, macht das nicht. Dialogue: 0,0:06:04.82,0:06:07.82,Default,,0000,0000,0000,,So, das nächste Problem ist: die Bugs\Nfallen immer unter den Tisch, werden Dialogue: 0,0:06:07.82,0:06:11.45,Default,,0000,0000,0000,,vergessen, gefixt zu werden. Und die\Noffensichtliche Lösung ist: Dialogue: 0,0:06:11.45,0:06:15.91,Default,,0000,0000,0000,,wir machen so einen Bugtracker.\NUmsetzung ist natürlich wie immer Seal Dialogue: 0,0:06:15.91,0:06:20.84,Default,,0000,0000,0000,,Team 6. Und der Effekt, der sich ganz\Nschnell einstellt, ist, dass man merkt, Dialogue: 0,0:06:20.84,0:06:25.66,Default,,0000,0000,0000,,man hat ganz viele Bugs. Und das\Nist dann gleich das nächste Problem: Dialogue: 0,0:06:25.66,0:06:29.47,Default,,0000,0000,0000,,wir haben so viele Bugs,\Nwas machen wir jetzt? Dialogue: 0,0:06:29.47,0:06:32.61,Default,,0000,0000,0000,,Eine Sache, die ich inzwischen als\NAntipattern sehe, ist: Priorisieren von Dialogue: 0,0:06:32.61,0:06:37.51,Default,,0000,0000,0000,,Bugs. Ja, so eine übliche Umsetzung ist:\Nman hat sowas wie „Severity: Blocker“ Dialogue: 0,0:06:37.51,0:06:41.76,Default,,0000,0000,0000,,oder das ist ein Security-Bug – das soll\Nhier eine Checkbox sein. Und der Effekt Dialogue: 0,0:06:41.76,0:06:45.67,Default,,0000,0000,0000,,davon ist, dass alle anderen Bugs liegen\Nbleiben. Das kann man immer und immer Dialogue: 0,0:06:45.67,0:06:49.83,Default,,0000,0000,0000,,wieder beobachten. Also die… der\Neigentliche… was ich so beobachte, der, Dialogue: 0,0:06:49.83,0:06:52.76,Default,,0000,0000,0000,,der Effekt, der die meisten Bugs tötet,\Nist, wenn eine Komponente einfach Dialogue: 0,0:06:52.76,0:06:55.93,Default,,0000,0000,0000,,abgeschafft wird. Und dann kann man\Nalles schließen in der Komponente. Dialogue: 0,0:06:55.93,0:06:59.55,Default,,0000,0000,0000,,Dass tatsächlich mal sowas\Nweggeht, gibt es nicht. Dialogue: 0,0:06:59.55,0:07:04.24,Default,,0000,0000,0000,,{\i1}Applaus{\i0}\NEs gibt ein schönes Wort dafür, wo mir Dialogue: 0,0:07:04.24,0:07:09.42,Default,,0000,0000,0000,,jetzt die Übersetzungsteams bisschen leid\Ntun, nämlich Bug-Welle, im Sinne von einer Dialogue: 0,0:07:09.42,0:07:14.04,Default,,0000,0000,0000,,Bugwelle vor so einem Tanker. Ich versuche\Ndas gerade mal zu etablieren, als Begriff. Dialogue: 0,0:07:14.04,0:07:18.08,Default,,0000,0000,0000,,Ich finde den nämlich sehr schön. So, also\Njetzt haben wir ganz viele offene Bugs, Dialogue: 0,0:07:18.08,0:07:22.30,Default,,0000,0000,0000,,was machen wir denn jetzt? Nächstes\NProblem. Und eine Idee, die häufig kommt, Dialogue: 0,0:07:22.30,0:07:27.32,Default,,0000,0000,0000,,und die auch erstmal total super klingt,\Nist, dass man bug-freien Code belohnt. Dialogue: 0,0:07:27.32,0:07:31.39,Default,,0000,0000,0000,,Und zwar am besten mit so einem Bonus, am\Nbesten in Geld. Wenn euer Team keine Dialogue: 0,0:07:31.39,0:07:36.78,Default,,0000,0000,0000,,offenen Bugs hat, dann werdet ihr belohnt.\NUnd das führt eben dazu, das ist mir mal Dialogue: 0,0:07:36.78,0:07:40.85,Default,,0000,0000,0000,,passiert, dass ich so eine Mail gekriegt\Nhabe von einem Typ, wo ich ein paar Bugs Dialogue: 0,0:07:40.85,0:07:45.29,Default,,0000,0000,0000,,gefilet habe, und der kommt und meint: „Du\NArschloch, jetzt ist mein Bonus weg. Ich Dialogue: 0,0:07:45.29,0:07:50.56,Default,,0000,0000,0000,,kann meine Hypothek nicht abzahlen!“\NUnd da wusste ich dann auch erstmal nicht Dialogue: 0,0:07:50.56,0:07:55.32,Default,,0000,0000,0000,,direkt, was ich dem sagen soll. Der hat\Ndas dann selbst gelöst, indem er alle Bugs Dialogue: 0,0:07:55.32,0:07:59.92,Default,,0000,0000,0000,,zugemacht hat und zwar mit NOTABUG.\N{\i1}Lachen{\i0} Dialogue: 0,0:07:59.92,0:08:02.61,Default,,0000,0000,0000,,Hat mir natürlich versprochen, dass die\Ntrotzdem alle gefixt werden. Aber das Dialogue: 0,0:08:02.61,0:08:07.03,Default,,0000,0000,0000,,könnt ihr euch ja vorstellen, wie gut das\Nklappt. Also sowas ist sehr… ist sehr mit Dialogue: 0,0:08:07.03,0:08:11.54,Default,,0000,0000,0000,,Vorsicht zu genießen. Reward- und\NIncentives-Sachen am besten nicht mit Dialogue: 0,0:08:11.54,0:08:16.81,Default,,0000,0000,0000,,Geld. Es gibt auch ein Anti-Antipattern\Ndazu. Nämlich habe ich mal erlebt, dass Dialogue: 0,0:08:16.81,0:08:20.99,Default,,0000,0000,0000,,jemand alle Bugs im Code gefixed hat, aber\Nim Bugtracker waren die noch offen. Und Dialogue: 0,0:08:20.99,0:08:23.92,Default,,0000,0000,0000,,dann habe ich nicht verstanden, bin\Nhingegangen, und dann hat er mir erklärt: Dialogue: 0,0:08:23.92,0:08:26.33,Default,,0000,0000,0000,,„Ja, die brauchen mich ja nicht mehr,\Nwenn die Bugs zu sind.“ Dialogue: 0,0:08:26.33,0:08:29.09,Default,,0000,0000,0000,,{\i1}Lachen und Applaus{\i0}\NDer hat halt gesehen, hat halt gesehen, um Dialogue: 0,0:08:29.09,0:08:34.63,Default,,0000,0000,0000,,ihn rum die Kollegen sind alle nach Indien\Nabgeschoben worden, die Projekte, und Dialogue: 0,0:08:34.63,0:08:37.78,Default,,0000,0000,0000,,hat sich gedacht: „Na, die lass ich lieber\Noffen, die Bugs, dann werde ich hier noch Dialogue: 0,0:08:37.78,0:08:41.64,Default,,0000,0000,0000,,ein paar Monate bezahlt.“ Das hat mir\Necht, das fand ich echt atemberaubend. Dialogue: 0,0:08:41.64,0:08:45.37,Default,,0000,0000,0000,,Da habe ich so ein paar Tage schlecht\Ngeschlafen. Weil das ist ja schon… was Dialogue: 0,0:08:45.37,0:08:49.04,Default,,0000,0000,0000,,für ein Selbstbild hat der denn, wenn er\Nglaubt, irgendwie diese, diese Einträge im Dialogue: 0,0:08:49.04,0:08:53.63,Default,,0000,0000,0000,,Bugtracker halten ihn da am Leben? Ganz\Nfurchtbar. Aber das gibt es in kleineren Dialogue: 0,0:08:53.63,0:09:00.04,Default,,0000,0000,0000,,Ausmaßen häufiger, dass Leute Bugs offen\Nlassen, weil sie wissen: wenn die Bugs weg Dialogue: 0,0:09:00.04,0:09:05.05,Default,,0000,0000,0000,,sind, dann kommt der Chef mit der nächsten\NTo-Do-Liste. Und der einzige Weg, mal eine Dialogue: 0,0:09:05.05,0:09:08.83,Default,,0000,0000,0000,,Woche Luft zu haben, ist einfach, die Bugs\Nnicht zu fixen. Das gibt es häufiger, Dialogue: 0,0:09:08.83,0:09:12.43,Default,,0000,0000,0000,,achtet mal darauf in eurer Firma, ob\Nihr das auch sehen könnt. Ich würde fast Dialogue: 0,0:09:12.43,0:09:18.60,Default,,0000,0000,0000,,wetten: ja. Das ist ein häufiges Pattern.\NDas ist auch ein Klassiker hier. Man hat Dialogue: 0,0:09:18.60,0:09:22.47,Default,,0000,0000,0000,,ein tolles Projekt, und das ist wunderbar,\Naber es funktioniert nur auf dem Rechner Dialogue: 0,0:09:22.47,0:09:26.89,Default,,0000,0000,0000,,vom Entwickler. Und die Idee ist: man hat\Njetzt einen Build-Server, ja? Wir haben Dialogue: 0,0:09:26.89,0:09:29.78,Default,,0000,0000,0000,,jetzt einen Build-Server, da wird\Ngebaut, das ist eine neutrale Umgebung, Dialogue: 0,0:09:29.78,0:09:33.71,Default,,0000,0000,0000,,alles super. Seal Team 6 bastelt kurz\Nwas, und das sieht auch echt geil aus, ja? Dialogue: 0,0:09:33.71,0:09:38.27,Default,,0000,0000,0000,,Hier, so Drohnen-assistierte\NBaugeschichten. Aber übliche Sachen, die Dialogue: 0,0:09:38.27,0:09:42.54,Default,,0000,0000,0000,,halt fehlschlagen, ist, dass dieser Build-\NServer von dem Team ist, und baut halt den Dialogue: 0,0:09:42.54,0:09:47.16,Default,,0000,0000,0000,,Code von dem Team. Und die anderen Sachen\Nwerden aus irgendwelchen antiken Snapshots Dialogue: 0,0:09:47.16,0:09:50.94,Default,,0000,0000,0000,,von anderen Leuten reingezogen. Oder was\Nich auch mal gesehen habe: dass Libraries Dialogue: 0,0:09:50.94,0:09:56.02,Default,,0000,0000,0000,,dann so per SMB da reingelinkt werden.\NUnd das ist natürlich totale Scheiße, ja? Dialogue: 0,0:09:56.02,0:10:01.72,Default,,0000,0000,0000,,Aber das passiert, so was passiert. Eine\Nhäufige Sache, die man auch sieht, ist, Dialogue: 0,0:10:01.72,0:10:04.76,Default,,0000,0000,0000,,dass man so einen Build-Server hat, aber\Nda muss dann jemand hinlaufen und so Dialogue: 0,0:10:04.76,0:10:09.34,Default,,0000,0000,0000,,„Build“ klicken. Und das ist auch nicht\Nschlau. Ich habe hier mal versucht, ein Dialogue: 0,0:10:09.34,0:10:16.13,Default,,0000,0000,0000,,Bild herauszusuchen. Die Idee beim\NBuild-Server ist es, dass der am besten Dialogue: 0,0:10:16.13,0:10:20.67,Default,,0000,0000,0000,,automatisiert baut, und zwar mindestens\Neinmal täglich. So, das habe ich auch Dialogue: 0,0:10:20.67,0:10:22.88,Default,,0000,0000,0000,,schon erlebt: der Build ist\Nfehlgeschlagen, und dann hat der Dialogue: 0,0:10:22.88,0:10:25.75,Default,,0000,0000,0000,,Entwickler eben auf dem Build-Server\Nangefangen, irgendwelche Dateien zu Dialogue: 0,0:10:25.75,0:10:31.47,Default,,0000,0000,0000,,editieren. Das ist jetzt gerade im\NWachstum von Devops ein Problem, was wir Dialogue: 0,0:10:31.47,0:10:35.25,Default,,0000,0000,0000,,häufiger sehen werden, glaube ich. Das\Nmacht natürlich den Vorteil vom Build- Dialogue: 0,0:10:35.25,0:10:39.11,Default,,0000,0000,0000,,Server komplett kaputt, ja? Weil, dann habe\Nich wieder den Effekt, das ist ja der Dialogue: 0,0:10:39.11,0:10:42.64,Default,,0000,0000,0000,,Rechner vom Developer, aber es ist halt nicht\Nmehr der unter seinem Tisch, sondern in Dialogue: 0,0:10:42.64,0:10:47.29,Default,,0000,0000,0000,,dem Rack da hinten, wo „Build-Server“\Ndransteht. So, ich hoffe, dass wir demnächst Dialogue: 0,0:10:47.29,0:10:50.24,Default,,0000,0000,0000,,ein Debian haben werden, was diese\NNamenskonvention übernimmt. Dialogue: 0,0:10:50.24,0:10:53.75,Default,,0000,0000,0000,,{\i1}Gelächter{\i0}\NDas sieht man auch häufig, ja, nicht nur Dialogue: 0,0:10:53.75,0:10:56.53,Default,,0000,0000,0000,,auf Build-Servern, sondern das wird halt\Nirgendwann aufgesetzt und danach bleibt Dialogue: 0,0:10:56.53,0:11:00.17,Default,,0000,0000,0000,,das halt so. Und das hält das ganze\NProjekt zurück, weil dann irgendwelche Dialogue: 0,0:11:00.17,0:11:04.26,Default,,0000,0000,0000,,Software-Versionen da drauf sind. So übliche\NSachen sind irgendwie eine SSL-Library, Dialogue: 0,0:11:04.26,0:11:09.04,Default,,0000,0000,0000,,die kein aktuelles TLS 1.2 kann. Und das\Nwerden wir mit 1.3 demnächst wieder haben, Dialogue: 0,0:11:09.04,0:11:12.92,Default,,0000,0000,0000,,das Problem. Oder irgendwie ein uraltes\NC++, und dann können die Leute die neuen Dialogue: 0,0:11:12.92,0:11:16.48,Default,,0000,0000,0000,,Features nicht benutzen. Also das ist\Nalles ganz furchtbar. Will das mal hier Dialogue: 0,0:11:16.48,0:11:20.64,Default,,0000,0000,0000,,mit so einem schönen Müllhaufen\Nillustrieren. Der Grund, warum man einen Dialogue: 0,0:11:20.64,0:11:25.19,Default,,0000,0000,0000,,Build-Server hat, ist, dass man täglich\Nbauen kann, automatisiert, ohne dass da Dialogue: 0,0:11:25.19,0:11:29.88,Default,,0000,0000,0000,,jemand hingehen muss, und ohne dass jemand\Nhingehen kann, um irgendwas zu fixen. Da Dialogue: 0,0:11:29.88,0:11:33.98,Default,,0000,0000,0000,,gibt es keine Interaktion außer: „Bau mal\Ndiese Version“, ja? Der Build soll Dialogue: 0,0:11:33.98,0:11:37.60,Default,,0000,0000,0000,,deterministisch sein. Das ist leider\Nunabhängig vom Build-Server, muss ich euch Dialogue: 0,0:11:37.60,0:11:41.11,Default,,0000,0000,0000,,erzählen. Es gibt tatsächlich Build-\NProzesse, da fällt jedesmal ein anderes Dialogue: 0,0:11:41.11,0:11:44.60,Default,,0000,0000,0000,,Binary raus, auch wenn man keine neue\NVersion ausgecheckt hat, weil irgendwie Dialogue: 0,0:11:44.60,0:11:48.57,Default,,0000,0000,0000,,parallel gebaut wird und irgendwelche\NDateien, die gebraucht werden, werden Dialogue: 0,0:11:48.57,0:11:52.21,Default,,0000,0000,0000,,asynchron von anderen Teilen aus dem\NParallel-Build erzeugt. Und wenn man Glück Dialogue: 0,0:11:52.21,0:11:56.30,Default,,0000,0000,0000,,hat, kommt die richtige an. Und wenn man\NPech hat, halt nicht. Also das muss man Dialogue: 0,0:11:56.30,0:12:00.96,Default,,0000,0000,0000,,fixen. Das ist Arbeit. Und es wäre mir\Nsehr lieb, dass so Open-Source-Entwickler Dialogue: 0,0:12:00.96,0:12:06.72,Default,,0000,0000,0000,,auch alle dafür sorgen, dass ihre Projekte\Nmit beliebiger Parallelität baubar sind. Dialogue: 0,0:12:06.72,0:12:09.82,Default,,0000,0000,0000,,Der nächste Grund für Build-Server\Nist Agilität. Dialogue: 0,0:12:09.82,0:12:12.18,Default,,0000,0000,0000,,{\i1}Applaus{\i0}\NJa? Wenn ich irgendwas kaputtgemacht habe, Dialogue: 0,0:12:12.18,0:12:15.58,Default,,0000,0000,0000,,dann soll keine Panik ausbrechen, sondern\Ndann sage ich „Rollback“ und bau halt die Dialogue: 0,0:12:15.58,0:12:19.35,Default,,0000,0000,0000,,Version von vorhin nochmal, die\Nfunktioniert hat. Wenn das nicht ein Dialogue: 0,0:12:19.35,0:12:23.69,Default,,0000,0000,0000,,Knopfdruck ist, dann könnt ihr den Build-\NServer auch wegschmeißen. Und natürlich Dialogue: 0,0:12:23.69,0:12:27.96,Default,,0000,0000,0000,,möchte man möglichst schnell mitkriegen,\Nwenn jemand was eingecheckt hat, was den Dialogue: 0,0:12:27.96,0:12:32.42,Default,,0000,0000,0000,,Build bricht. Aber nicht sanktionieren!\NIch habe mal so eine Firma erlebt, die hat Dialogue: 0,0:12:32.42,0:12:35.85,Default,,0000,0000,0000,,dann so ein Britney-Spears-T-Shirt gehabt,\Nund das musste der Typ tragen, der den Dialogue: 0,0:12:35.85,0:12:38.49,Default,,0000,0000,0000,,letzten, zum letzten Mal den Build\Ngebrochen hat. Dialogue: 0,0:12:38.49,0:12:43.72,Default,,0000,0000,0000,,{\i1}Lachen und Applaus{\i0}\NMacht das nicht. Das hat gut funktioniert, Dialogue: 0,0:12:43.72,0:12:46.41,Default,,0000,0000,0000,,bis sie so einen Britney-Spears-Fan als\NAngestellten hatten. Dialogue: 0,0:12:46.41,0:12:52.16,Default,,0000,0000,0000,,{\i1}Lachen{\i0}\NJa. So, also das nächste Problem: ich habe Dialogue: 0,0:12:52.16,0:12:55.08,Default,,0000,0000,0000,,jetzt zwar einen Build-Server, und der\Nbaut das zwar unabhängig vom Dialogue: 0,0:12:55.08,0:12:58.46,Default,,0000,0000,0000,,Entwicklerrechner, aber das Binary\Nfunktioniert nur auf dem Rechner vom Dialogue: 0,0:12:58.46,0:13:03.86,Default,,0000,0000,0000,,Entwickler. Ist ein subtil anderes\NProblem, aber verwandt. Und das löst man Dialogue: 0,0:13:03.86,0:13:07.03,Default,,0000,0000,0000,,heute mit Docker, ist ja klar!\N{\i1}Applaus{\i0} Dialogue: 0,0:13:07.03,0:13:10.81,Default,,0000,0000,0000,,Und Docker ist im Prinzip keine schlechte\NIdee. Man darf halt nicht Seal Team 6 Dialogue: 0,0:13:10.81,0:13:14.61,Default,,0000,0000,0000,,basteln lassen. Denn da kommen\Ndann so Effekte wie: ich lutsche mir Dialogue: 0,0:13:14.61,0:13:18.92,Default,,0000,0000,0000,,irgendwelche Images von irgendwo aus dem\NInternet rein. Klassiker sind so Ramses- Dialogue: 0,0:13:18.92,0:13:24.92,Default,,0000,0000,0000,,der-Zweite-Debian und MySQL drei Punkt\Nirgendwas von neunzehnhundert-äh. Dialogue: 0,0:13:24.92,0:13:29.57,Default,,0000,0000,0000,,So, dafür ist Docker nicht da. Docker ist\Ngerade dafür da, dass das agil änderbar Dialogue: 0,0:13:29.57,0:13:33.14,Default,,0000,0000,0000,,ist. Und wenn ihr das nicht macht, dann\Nist es, als wenn ihr nicht lest. Könnt ihr Dialogue: 0,0:13:33.14,0:13:37.06,Default,,0000,0000,0000,,euch das gleich sparen. Also ich habe hier\Nmal Frankenstein als Illustration Dialogue: 0,0:13:37.06,0:13:41.04,Default,,0000,0000,0000,,gebracht. Das bringt nichts. Dann habt ihr\Nso ein Schrott-Projekt am Ende. Ich sehe Dialogue: 0,0:13:41.04,0:13:44.41,Default,,0000,0000,0000,,das häufig in der Industrie, dass die\NLeute alle Nachteile mitnehmen, aber die Dialogue: 0,0:13:44.41,0:13:49.28,Default,,0000,0000,0000,,Vorteile gezielt stehen lassen.\N{\i1}Lachen und Applaus{\i0} Dialogue: 0,0:13:49.28,0:13:52.88,Default,,0000,0000,0000,,Häufig gerade bei so Build-Systemen und\NDocker ist, dass man die Komponenten in Dialogue: 0,0:13:52.88,0:13:56.21,Default,,0000,0000,0000,,irgendwelchen statischen Versionen hart-\Ncodet, die halt aktuell waren, als es Dialogue: 0,0:13:56.21,0:14:01.75,Default,,0000,0000,0000,,aufgesetzt wurde, und danach nicht mehr\Ngeupdatet werden, ja? Also ich habe in den Dialogue: 0,0:14:01.75,0:14:04.82,Default,,0000,0000,0000,,letzten Jahren immer mehr Leute mit\NBuild-Servern gesehen, die alles Dialogue: 0,0:14:04.82,0:14:08.79,Default,,0000,0000,0000,,automatisiert bauen. Und alle Dateien\Nim Image haben so denselben Time- Dialogue: 0,0:14:08.79,0:14:12.63,Default,,0000,0000,0000,,Stamp grob. Also man sieht, dass es alles\Nfrisch gebaut wurde, aber es sind trotzdem Dialogue: 0,0:14:12.63,0:14:18.40,Default,,0000,0000,0000,,Versionen von 2004. Das ist sehr häufig,\Nachtet darauf bei euch, ja? Und wenn ein Dialogue: 0,0:14:18.40,0:14:22.83,Default,,0000,0000,0000,,Zulieferer euch Kram gibt, der vom\NBuild-Server kommt mit alten Versionen, Dialogue: 0,0:14:22.83,0:14:27.03,Default,,0000,0000,0000,,dann weist ihn darauf hin. Negatives\NFeedback. Das ist sonst wie so ein Dialogue: 0,0:14:27.03,0:14:34.85,Default,,0000,0000,0000,,Rollator: bremst nur. Container hat man\Nfür automatisiertes Deployment in Dialogue: 0,0:14:34.85,0:14:39.46,Default,,0000,0000,0000,,deterministischem Zustand. Das ist eine\NSache, die haben fast alle verstanden. Dialogue: 0,0:14:39.46,0:14:43.05,Default,,0000,0000,0000,,Aber was nicht so verstanden wird, ist\Ndieser, der Rollback ist eben auch Dialogue: 0,0:14:43.05,0:14:47.24,Default,,0000,0000,0000,,trivial, wenn man das mit so einem Docker-\NSystem baut. Dann klicke ich halt „Mach mal Dialogue: 0,0:14:47.24,0:14:50.73,Default,,0000,0000,0000,,die alte Version“ und dann fällt das Image\Nder alten Version raus. Das ist ein Dialogue: 0,0:14:50.73,0:14:54.17,Default,,0000,0000,0000,,Feature, das ist nicht ein Seiteneffekt,\Nsondern das ist einer der Gründe, warum Dialogue: 0,0:14:54.17,0:14:58.85,Default,,0000,0000,0000,,man das überhaupt hat. Nutzt das auch.\NDas ist nicht mehr… es tut nicht mehr weh, Dialogue: 0,0:14:58.85,0:15:02.21,Default,,0000,0000,0000,,wenn man was kaputtmacht im Build,\Nsondern dann kann ich zurückrollen. Nicht Dialogue: 0,0:15:02.21,0:15:06.51,Default,,0000,0000,0000,,nur im Versionierungssystem, sondern ich\Nkann auch einfach komplett, einen neuen Dialogue: 0,0:15:06.51,0:15:10.68,Default,,0000,0000,0000,,Build, fällt dann halt raus. Und am besten\Nmacht man sowas über die Mittagspause, ja? Dialogue: 0,0:15:10.68,0:15:14.86,Default,,0000,0000,0000,,Daher vorhin der Ratschlag, im Skript\NAbhängigkeiten testen. Und nicht nach zwei Dialogue: 0,0:15:14.86,0:15:18.99,Default,,0000,0000,0000,,Stunden den Build failen lassen.\NDocker ist… und Container sind Dialogue: 0,0:15:18.99,0:15:22.39,Default,,0000,0000,0000,,eigentlich eine gute Idee. Aber die\Nmeisten Leute nehmen nur die Nachteile Dialogue: 0,0:15:22.39,0:15:29.69,Default,,0000,0000,0000,,mit. Komponenten kann man agil updaten.\NDas muss man auch tun. Also ist hier keine Dialogue: 0,0:15:29.69,0:15:32.56,Default,,0000,0000,0000,,schwarze Magie, die ich hier erzähle. Aber\Nes ist erstaunlich, wie viele Leute das Dialogue: 0,0:15:32.56,0:15:37.10,Default,,0000,0000,0000,,nicht machen. Und der mir als Security-Typ\Nnatürlich am wichtigsten erscheinende Dialogue: 0,0:15:37.10,0:15:41.40,Default,,0000,0000,0000,,Aspekt bei Containern ist, dass man damit\NKomponenten im Gesamtsystem isolieren kann Dialogue: 0,0:15:41.40,0:15:45.97,Default,,0000,0000,0000,,voneinander. Dass nicht ein Typ, der\Ndiesen einen Prozess hackt, automatisch Dialogue: 0,0:15:45.97,0:15:49.95,Default,,0000,0000,0000,,alle anderen im Zugriff hat. Sondern die\Nlaufen halt in ihren eigenen Containern. Dialogue: 0,0:15:49.95,0:15:53.35,Default,,0000,0000,0000,,Aber in der Praxis sieht man, dass dann\Nder Monster-Container gebaut wird mit den Dialogue: 0,0:15:53.35,0:16:00.30,Default,,0000,0000,0000,,50 Komponenten drin. Das ist nicht gut.\NAlso nehmt alle Vorteile mit. Richtig gut Dialogue: 0,0:16:00.30,0:16:04.80,Default,,0000,0000,0000,,ist das natürlich erst in Kombination, ja?\NDer Git hat alle Versionen und dem Build- Dialogue: 0,0:16:04.80,0:16:07.83,Default,,0000,0000,0000,,Server kann ich eine Version zurufen und\Ndann fällt ein Image raus ohne Dialogue: 0,0:16:07.83,0:16:13.10,Default,,0000,0000,0000,,Abhängigkeiten. So, wenn ihr das nicht\Nhabt, dann benutzt ihr das nicht richtig. Dialogue: 0,0:16:13.10,0:16:18.71,Default,,0000,0000,0000,,Ganz einfach. Das nächste Problem ist: Der\NCode funktioniert nicht. Das kennen Dialogue: 0,0:16:18.71,0:16:22.36,Default,,0000,0000,0000,,wahrscheinlich auch alle, ist ein Problem.\NWas machen wir jetzt? Und die Lösung ist: Dialogue: 0,0:16:22.36,0:16:27.81,Default,,0000,0000,0000,,Unit-Tests! Und die Umsetzung ist häufig:\Nich habe hier gerade einen Bug, den fixe Dialogue: 0,0:16:27.81,0:16:32.56,Default,,0000,0000,0000,,ich mal, und den Check, ob der Bug weg\Nist, den mache ich jetzt als Unit-Test. Ja Dialogue: 0,0:16:32.56,0:16:35.92,Default,,0000,0000,0000,,und das ist nicht gut. Da kriegt man dann\Nso eine Coverage von 2,3 Prozent, wenn es Dialogue: 0,0:16:35.92,0:16:40.73,Default,,0000,0000,0000,,hoch kommt. Und ich weiß nicht, ob ihr\Nalle das Video hier gesehen habt. Das war Dialogue: 0,0:16:40.73,0:16:43.84,Default,,0000,0000,0000,,so ein Automat, der erkennen sollte, ob\Neine Hand drunter gehalten wurde. Und der Dialogue: 0,0:16:43.84,0:16:48.20,Default,,0000,0000,0000,,wurde halt von Weißen gemacht. Und die\Nhaben halt nie eine andere Hautfarbe Dialogue: 0,0:16:48.20,0:16:52.56,Default,,0000,0000,0000,,getestet. Und da kommt dann halt nix raus.\NSo, das ist ein typischer Fall von „Unit- Dialogue: 0,0:16:52.56,0:16:59.44,Default,,0000,0000,0000,,Test-Abdeckung zu gering“. Ich glaube\Nauch, dass hier die Perspektive die Dialogue: 0,0:16:59.44,0:17:02.71,Default,,0000,0000,0000,,falsche ist häufig. Die Leute glauben, sie\Nmachen Unit-Tests, damit sie wissen, dass Dialogue: 0,0:17:02.71,0:17:08.30,Default,,0000,0000,0000,,der Code jetzt okay ist. Nein! Unit-Tests\Nsind dafür da, dass sich was ändern kann Dialogue: 0,0:17:08.30,0:17:12.69,Default,,0000,0000,0000,,und [man] sehen kann, ob es -noch- geht.\NDamit ich keine Angst mehr haben muss, Dialogue: 0,0:17:12.69,0:17:17.16,Default,,0000,0000,0000,,alten Code anzufassen. Das ist das, was\NUnit-Tests euch abnehmen: die Angst, in Dialogue: 0,0:17:17.16,0:17:21.83,Default,,0000,0000,0000,,altem Code was zu fixen. Weil ihr den\Nnicht komplett versteht oder so. Und Dialogue: 0,0:17:21.83,0:17:26.98,Default,,0000,0000,0000,,je mehr Abdeckung ihr mit den Unit-Tests\Nhabt, desto stärker ist diese Waffe. Dialogue: 0,0:17:26.98,0:17:35.54,Default,,0000,0000,0000,,Nutzt das.\N{\i1}Applaus{\i0} Dialogue: 0,0:17:35.54,0:17:38.81,Default,,0000,0000,0000,,Ich muss hier ein bisschen durchgaloppieren,\Nweil ich zu viele Folien habe. Ich hoffe, Dialogue: 0,0:17:38.81,0:17:42.25,Default,,0000,0000,0000,,das verzeiht ihr mir. So, das nächste\NProblem sind, dass die Leute nur positive Dialogue: 0,0:17:42.25,0:17:47.23,Default,,0000,0000,0000,,Tests haben. Die gucken: funktioniert das\Nhier? Und der Effekt ist normalerweise so gut Dialogue: 0,0:17:47.23,0:17:51.23,Default,,0000,0000,0000,,wie keiner, denn die ganzen interessanten\NBugs sind in der Fehlerbehandlung, dafür Dialogue: 0,0:17:51.23,0:17:55.98,Default,,0000,0000,0000,,braucht ihr auch Unit-Tests. Und zwar\Nmüsst ihr eigentlich für alles, was Dialogue: 0,0:17:55.98,0:18:00.64,Default,,0000,0000,0000,,fehlschlagen kann, einen Test haben, der\Ndas fehlschlagen lässt. Und dann gucken, Dialogue: 0,0:18:00.64,0:18:05.62,Default,,0000,0000,0000,,ob das immer noch funktioniert, wie es\Nsoll. Das sind die Sachen, die am Ende Dialogue: 0,0:18:05.62,0:18:09.93,Default,,0000,0000,0000,,über Bande woanders einen Fehler erzeugen,\Nja? Irgendwie eine Memory Corruption in Dialogue: 0,0:18:09.93,0:18:13.70,Default,,0000,0000,0000,,einem Fehlerfall, oder irgendwie „RAM wird\Nnicht freigegeben im Fehlerfall“. Und dann Dialogue: 0,0:18:13.70,0:18:16.84,Default,,0000,0000,0000,,stellt sich raus: das kann man als\NAngreifer triggern. Und dann habe ich einen Dialogue: 0,0:18:16.84,0:18:21.32,Default,,0000,0000,0000,,Remote-Memory-Leak und der Prozess crasht.\NDiese Art von Sachen sind völlig überflüssig Dialogue: 0,0:18:21.32,0:18:26.54,Default,,0000,0000,0000,,und mit ordentlichen Unit-Tests abfangbar.\NAlso macht das. Unit-Tests sind aber kein Dialogue: 0,0:18:26.54,0:18:29.39,Default,,0000,0000,0000,,Allheilmittel, den Eindruck möchte ich\Nnicht vermitteln. Selbst wenn ich 100% Dialogue: 0,0:18:29.39,0:18:33.01,Default,,0000,0000,0000,,Unit-Test-Coverage habe, kann ich\Nimmer noch einen Fall übersehen haben. Dialogue: 0,0:18:33.01,0:18:36.69,Default,,0000,0000,0000,,Dennoch: das ist ein Ziel, was ihr haben\Nsolltet. Es gibt Tools, um die Coverage zu Dialogue: 0,0:18:36.69,0:18:42.84,Default,,0000,0000,0000,,prüfen. Nutzt diese Tools. Das ist\Nwichtig. So, der nächste Fall, jetzt habe Dialogue: 0,0:18:42.84,0:18:45.80,Default,,0000,0000,0000,,ich Unit-Tests ausgerollt, ist: die\NEntwickler haben Fälle vergessen zu Dialogue: 0,0:18:45.80,0:18:51.37,Default,,0000,0000,0000,,testen, ja? Das kommt häufig vor.\NUnd da gibt es einen neuen Hype: Test- Dialogue: 0,0:18:51.37,0:18:55.34,Default,,0000,0000,0000,,Driven-Development. Du schreibst erst die\NTests und dann den Code. Und da kann ich Dialogue: 0,0:18:55.34,0:18:58.81,Default,,0000,0000,0000,,leider nichts zu sagen, weil ich das noch\Nnie in der Produktion gesehen habe. Dialogue: 0,0:18:58.81,0:19:02.10,Default,,0000,0000,0000,,Ich kenne nur Leute… Dialogue: 0,0:19:02.10,0:19:07.22,Default,,0000,0000,0000,,{\i1}Lachen und Applaus{\i0} Dialogue: 0,0:19:07.22,0:19:10.71,Default,,0000,0000,0000,,Ich kenne nur Leute, die sich ganz sicher\Nsind, dass das total geil ist. Aber ich Dialogue: 0,0:19:10.71,0:19:13.13,Default,,0000,0000,0000,,habe es noch nie… also wenn ihr da\Nirgendwie wisst, dann schreibt mir mal Dialogue: 0,0:19:13.13,0:19:16.99,Default,,0000,0000,0000,,eine Mail, das würde mich echt\Ninteressieren. Ja, das nächste Problem Dialogue: 0,0:19:16.99,0:19:20.33,Default,,0000,0000,0000,,ist: wir haben hier Code, und der tut\Nirgendwas, aber wir haben keine Ahnung, Dialogue: 0,0:19:20.33,0:19:24.38,Default,,0000,0000,0000,,wie das funktioniert. Und die Lösung ist\Nnatürlich: Dokumentation! Ist auch eine Dialogue: 0,0:19:24.38,0:19:28.12,Default,,0000,0000,0000,,gute Idee, das will ich keinem ausreden.\NAber es kommt häufig vor, Seal Team 6 Dialogue: 0,0:19:28.12,0:19:32.86,Default,,0000,0000,0000,,setzt ein Wiki auf, und da gibt es ganz\Nhäufig so Effekte – da werde ich hier Dialogue: 0,0:19:32.86,0:19:38.12,Default,,0000,0000,0000,,Congress-Teilnehmern nichts Neues erzählen\N– das Zertifikat ist gerade abgelaufen Dialogue: 0,0:19:38.12,0:19:41.77,Default,,0000,0000,0000,,oder das Wiki wirft Exceptions oder ist\Nnicht erreichbar oder so. Das ist ganz Dialogue: 0,0:19:41.77,0:19:47.35,Default,,0000,0000,0000,,häufig. Und dann fallen so Sätze wie: „Ja,\Ndas hatte ich, glaube ich, ins Wiki getan“. Dialogue: 0,0:19:47.35,0:19:52.37,Default,,0000,0000,0000,,Und so: „Ja, das musst du halt bookmarken,\Nweil Navigation haben wir noch nicht“. Und Dialogue: 0,0:19:52.37,0:19:58.74,Default,,0000,0000,0000,,ganz häufig gibt es auch: „Jaja, das\Nhier oben, das stimmt nicht mehr“. Dialogue: 0,0:19:58.74,0:20:04.24,Default,,0000,0000,0000,,Also Wiki ist keine Lösung. Je kleiner man\Ndie Schwelle setzt dafür, da was zu Dialogue: 0,0:20:04.24,0:20:08.53,Default,,0000,0000,0000,,editieren, desto mehr fällt es unter den…\Nvom Tisch. Weil die Leute Dialogue: 0,0:20:08.53,0:20:12.32,Default,,0000,0000,0000,,einfach das nicht als als wichtigen\NSchritt sehen, sondern als so kleines Dialogue: 0,0:20:12.32,0:20:18.41,Default,,0000,0000,0000,,Ding. Das muss ein richtiger Schritt im\NSystem sein, im Produktivbetrieb, dass Dialogue: 0,0:20:18.41,0:20:23.34,Default,,0000,0000,0000,,man sagt: „Jede Änderung wird dokumentiert,\NPunkt.“ So, die nächste Idee, die man in Dialogue: 0,0:20:23.34,0:20:26.52,Default,,0000,0000,0000,,großen Firmen häufig hört, dass man sagt:\N„Wir müssen hier mehr Kommunikation haben, Dialogue: 0,0:20:26.52,0:20:32.62,Default,,0000,0000,0000,,die Leute reden zu wenig miteinander“. Und\Ndann hat man so Großraumbüros. Dialogue: 0,0:20:32.62,0:20:40.88,Default,,0000,0000,0000,,{\i1}Lachen und Applaus{\i0} Dialogue: 0,0:20:40.88,0:20:43.67,Default,,0000,0000,0000,,Habe ich auch noch nie\Nfunktionieren sehen. Dialogue: 0,0:20:43.67,0:20:46.44,Default,,0000,0000,0000,,Das klappt nicht, ja? Menschen\Nmüssen sich mal am Stück konzentrieren Dialogue: 0,0:20:46.44,0:20:50.03,Default,,0000,0000,0000,,können. Und je mehr Unterbrechung man hat,\Ndesto schlechter ist das. Und heute geht Dialogue: 0,0:20:50.03,0:20:52.30,Default,,0000,0000,0000,,der Trend sogar dahin… Dialogue: 0,0:20:52.30,0:20:57.81,Default,,0000,0000,0000,,{\i1}Applaus{\i0} Dialogue: 0,0:20:57.81,0:21:00.88,Default,,0000,0000,0000,,Heute geht der Trend sogar dahin, dass die\NLeute sich Slack installieren. Die Dialogue: 0,0:21:00.88,0:21:05.07,Default,,0000,0000,0000,,plakatieren gerade in Berlin. Also, die\Nsich absichtlich gegenseitig unterbrechen. Dialogue: 0,0:21:05.07,0:21:08.57,Default,,0000,0000,0000,,Ist mir völlig ein Rätsel, warum Leute\Nsowas tun würden. Denn nach jeder Dialogue: 0,0:21:08.57,0:21:12.04,Default,,0000,0000,0000,,Unterbrechung braucht man so eine\NViertelstunde, bis man wieder drin ist. Dialogue: 0,0:21:12.04,0:21:16.90,Default,,0000,0000,0000,,Und diese Chatsysteme und auch Mail-\NUnterbrechungen sind darauf ausgelegt, Dialogue: 0,0:21:16.90,0:21:22.13,Default,,0000,0000,0000,,dass man nie diese 15 Minuten schafft.\NJa, ich weiß, die Zeit ist knapp, ist gut! Dialogue: 0,0:21:22.13,0:21:23.69,Default,,0000,0000,0000,,{\i1}lacht{\i0}\N{\i1}Lachen{\i0} Dialogue: 0,0:21:23.69,0:21:29.90,Default,,0000,0000,0000,,Meetings, ja. Meetings. Da muss ich,\Nglaube ich, nicht viel zu sagen. Dialogue: 0,0:21:29.90,0:21:32.46,Default,,0000,0000,0000,,Aber der Effekt ist immer derselbe: ich\Nkann mich nicht konzentrieren. Und das Dialogue: 0,0:21:32.46,0:21:35.92,Default,,0000,0000,0000,,ist ein ernstes Problem.\NDa muss man aktiv gegenhalten, Dialogue: 0,0:21:35.92,0:21:39.23,Default,,0000,0000,0000,,ja? Das ist nicht so einfach. Ich habe\Njetzt überlegt: soll ich vorschlagen, die Dialogue: 0,0:21:39.23,0:21:42.39,Default,,0000,0000,0000,,Meetings kurz zu machen? Aber das ist so,\Nhabe ich auch nie funktionieren sehen, den Dialogue: 0,0:21:42.39,0:21:46.78,Default,,0000,0000,0000,,Ratschlag. Alle Leute glauben immer, sie\Nmachen ihre Meetings kurz. Funktioniert Dialogue: 0,0:21:46.78,0:21:51.72,Default,,0000,0000,0000,,nicht. Daher sage ich: lieber selten und\NOne-on-One. Denn wenn man jetzt irgendein Dialogue: 0,0:21:51.72,0:21:55.58,Default,,0000,0000,0000,,Problem klären will, und da sitzen alle\NLeute aus dem Team, dann gibt es eine Dialogue: 0,0:21:55.58,0:21:58.23,Default,,0000,0000,0000,,höhere Schwelle für den Einzelnen, zu\Nsagen: „Ja, da habe ich einen Fehler Dialogue: 0,0:21:58.23,0:22:01.30,Default,,0000,0000,0000,,gemacht.“ Deswegen lieber einzeln. Dialogue: 0,0:22:01.30,0:22:04.79,Default,,0000,0000,0000,,{\i1}Applaus{\i0} Dialogue: 0,0:22:04.79,0:22:08.77,Default,,0000,0000,0000,,Niemand, niemand hat Bock darauf, sich vor\Nseinen Kollegen zu entblößen. Und das muss Dialogue: 0,0:22:08.77,0:22:13.37,Default,,0000,0000,0000,,man also nicht künstlich herbeiführen. So,\Njetzt kommen wir zur Security-Abteilung. Dialogue: 0,0:22:13.37,0:22:16.23,Default,,0000,0000,0000,,Wir haben Code und er tut irgendwas, aber\Nwir trauen dem nicht. Was machen wir Dialogue: 0,0:22:16.23,0:22:22.21,Default,,0000,0000,0000,,jetzt? Nächste Idee: naja okay, wir machen\Nerstmal die Compiler-Warnungen weg, ja? Dialogue: 0,0:22:22.21,0:22:26.49,Default,,0000,0000,0000,,Gute Idee. Der Effekt ist – und ich war\Nschockiert, dass es da einen Begriff für Dialogue: 0,0:22:26.49,0:22:31.29,Default,,0000,0000,0000,,gibt: Onion-Code. So, Onion-Code bedeutet,\Ndass ich so einen Chunk Legacy-Code habe, Dialogue: 0,0:22:31.29,0:22:34.77,Default,,0000,0000,0000,,der total viele Warnungen drin hat, und\Nden seit fünf Jahren keiner mehr angefasst Dialogue: 0,0:22:34.77,0:22:39.16,Default,,0000,0000,0000,,hat. Und da findet jetzt jemand einen Bug\Ndrin. Und der würde den gerne fixen. Aber Dialogue: 0,0:22:39.16,0:22:43.19,Default,,0000,0000,0000,,dann compilet der Rest immer noch mit den\Nganzen Warnungen. Und die müsste ich dann Dialogue: 0,0:22:43.19,0:22:47.22,Default,,0000,0000,0000,,fixen, damit ich den Fix einchecken kann\Nfür den Bug. Und ich verstehe diesen Code Dialogue: 0,0:22:47.22,0:22:50.67,Default,,0000,0000,0000,,aber nicht. Ich verstehe nur den kleinen\NTeil, wo ich den Bug gefunden habe. Und Dialogue: 0,0:22:50.67,0:22:55.75,Default,,0000,0000,0000,,dann mache ich einen Layer drum rum, und\Nder guckt diesen einen Fall, fängt ihn ab. Dialogue: 0,0:22:55.75,0:22:59.06,Default,,0000,0000,0000,,Und wenn das mehrere Leute machen, hat man\Nso eine Zwiebel. Und deswegen heißt das Dialogue: 0,0:22:59.06,0:23:03.75,Default,,0000,0000,0000,,Onion-Code. Das ist ganz furchtbar, ja? Dialogue: 0,0:23:03.75,0:23:09.59,Default,,0000,0000,0000,,Wenn ihr das irgendwo seht,\Ndann ‚burn it with fire‘! Dialogue: 0,0:23:09.59,0:23:12.82,Default,,0000,0000,0000,,So, nächster Vorschlag: wir haben nur noch\NReleases ohne offene Bugs. Das klingt auch Dialogue: 0,0:23:12.82,0:23:17.28,Default,,0000,0000,0000,,total super. Und ich war auch mal bei\Neinem Kunden, der das probiert hat, Dialogue: 0,0:23:17.28,0:23:22.01,Default,,0000,0000,0000,,und da kam dann so eine Mail:\N„Mach mal deine Bugs alle zu.“ Und Dialogue: 0,0:23:22.01,0:23:24.62,Default,,0000,0000,0000,,dann meine ich so: „Ich bin aber hier,\Num Bugs aufzumachen, nicht um sie Dialogue: 0,0:23:24.62,0:23:28.35,Default,,0000,0000,0000,,zuzumachen.“ Und dann meinte er: „Ja,\Ndie machen wir danach wieder auf, keine Dialogue: 0,0:23:28.35,0:23:36.69,Default,,0000,0000,0000,,Sorge.“\N{\i1}Lachen und Applaus{\i0} Dialogue: 0,0:23:36.69,0:23:40.59,Default,,0000,0000,0000,,Muss ich, glaube ich, nicht erläutern, ob\Ndie wieder aufgemacht wurden oder nicht. Dialogue: 0,0:23:40.59,0:23:43.72,Default,,0000,0000,0000,,Ja, externer Audit, und das tut mir in der\NSeele weh, denn das biete ich geschäftlich Dialogue: 0,0:23:43.72,0:23:47.55,Default,,0000,0000,0000,,an, ja, das ist leider auch teilweise ein\NAntipattern. Denn was hier passiert, ist, Dialogue: 0,0:23:47.55,0:23:51.69,Default,,0000,0000,0000,,dass die Leute so einen Blackbox-Pentest\Nbeauftragen. Und ein Blackbox-Pentest Dialogue: 0,0:23:51.69,0:23:54.70,Default,,0000,0000,0000,,heißt, der Tester hat keinen vollen\NZugriff auf das System, der weiß nicht, Dialogue: 0,0:23:54.70,0:23:57.80,Default,,0000,0000,0000,,wie das funktioniert, sondern soll das in\Ndem Test selber rausfinden. Und dann Dialogue: 0,0:23:57.80,0:24:02.26,Default,,0000,0000,0000,,passiert sowas hier. Und was mich an der\NStelle am meisten beeindruckt hat, ist, Dialogue: 0,0:24:02.26,0:24:07.48,Default,,0000,0000,0000,,dass es dieses Bild schon gab. Das habe\Nich jetzt nicht gemacht. So, das ist Dialogue: 0,0:24:07.48,0:24:12.09,Default,,0000,0000,0000,,leider üblich. Man testet nicht den Code,\Nsondern man testet den Pentester. Und ich Dialogue: 0,0:24:12.09,0:24:15.35,Default,,0000,0000,0000,,als Pentester habe jetzt natürlich… könnte\Njetzt sagen: „Ja, ist mir doch egal, wen Dialogue: 0,0:24:15.35,0:24:19.58,Default,,0000,0000,0000,,die da testen, solange ich bezahlt werde.“\NAber ich habe da so einen Moralkodex. Ich Dialogue: 0,0:24:19.58,0:24:23.07,Default,,0000,0000,0000,,hätte gern dem Kunden geholfen und nicht\Nnur das Geld genommen. Das ist für alle Dialogue: 0,0:24:23.07,0:24:27.46,Default,,0000,0000,0000,,Seiten Scheiße. Macht das nicht. Ja,\NPentests. Ich sage, das ist ein Dialogue: 0,0:24:27.46,0:24:31.72,Default,,0000,0000,0000,,Compliance-Problem, dass die Leute alle\Naus Compliance-Gründen Pentests machen. Dialogue: 0,0:24:31.72,0:24:35.30,Default,,0000,0000,0000,,Und das ist eigentlich an sich schon ein\Nfurchtbares Zeichen, dass wir die Security Dialogue: 0,0:24:35.30,0:24:38.93,Default,,0000,0000,0000,,nicht hinkriegen, sondern Compliance\Nbrauchen, um uns dazu zu bringen, dass wir Dialogue: 0,0:24:38.93,0:24:44.99,Default,,0000,0000,0000,,doch Security machen. Wir sollten uns alle\Nschämen! Fuzzing ist auch so ein Ding. Das Dialogue: 0,0:24:44.99,0:24:49.50,Default,,0000,0000,0000,,wird gerne gemacht. Fuzzing heißt, dass\Nich zufällige Eingaben generiere und gegen Dialogue: 0,0:24:49.50,0:24:52.96,Default,,0000,0000,0000,,meinen Endpunkt werfe und gucke, ob der\Nplatzt oder nicht. Und das ist Dialogue: 0,0:24:52.96,0:24:56.93,Default,,0000,0000,0000,,erschütternd erfolgreich, ja? Das\Nfunktioniert. Und ich habe mal erlebt, Dialogue: 0,0:24:56.93,0:24:59.73,Default,,0000,0000,0000,,dass sie gesagt haben: „Nee, den Code\Nhier, den musst du nicht testen, den haben Dialogue: 0,0:24:59.73,0:25:04.10,Default,,0000,0000,0000,,wir schon zu Tode gefuzzt. Seit Monaten\Nläuft unsere Fuzzing-Farm.“ Und da stellt Dialogue: 0,0:25:04.10,0:25:06.100,Default,,0000,0000,0000,,sich dann heraus: die haben zwar\NMilliarden von Test-Cases geprüft. Aber Dialogue: 0,0:25:06.100,0:25:11.81,Default,,0000,0000,0000,,das war immer derselbe.\N{\i1}Lachen{\i0} Dialogue: 0,0:25:11.81,0:25:16.00,Default,,0000,0000,0000,,Total super. Und häufig ist Fuzzing so ein\NFeigenblatt, womit dann andere Maßnahmen Dialogue: 0,0:25:16.00,0:25:18.47,Default,,0000,0000,0000,,nicht gemacht werden, weil wir haben doch\Nschon gefuzzt, und das ist auch in Dialogue: 0,0:25:18.47,0:25:21.99,Default,,0000,0000,0000,,Ordnung, ja? Also ich habe nichts gegen\NFuzzing an sich, denn es funktioniert Dialogue: 0,0:25:21.99,0:25:31.61,Default,,0000,0000,0000,,leider. Aber es darf kein Hindernis dafür\Nsein, andere wichtige Maßnahmen zu machen. Dialogue: 0,0:25:31.61,0:25:35.23,Default,,0000,0000,0000,,Das ist ein generelles Problem, was ich\Nhäufiger sehe, dass, wenn das Management Dialogue: 0,0:25:35.23,0:25:39.58,Default,,0000,0000,0000,,die Wahl hat zwischen einer Maßnahme, die\Nwahrscheinlich funktioniert, aber keine Dialogue: 0,0:25:39.58,0:25:43.38,Default,,0000,0000,0000,,Metriken abwirft, und einer Maßnahme, die\Nwahrscheinlich nicht funktioniert, aber Dialogue: 0,0:25:43.38,0:25:48.20,Default,,0000,0000,0000,,Metriken abwirft, dass immer die mit den\NMetriken gemacht wird. Management liebt Dialogue: 0,0:25:48.20,0:25:51.90,Default,,0000,0000,0000,,qualifizierbare Geschichten, wo irgend…\Nquantifizierbare Geschichten, wo Dialogue: 0,0:25:51.90,0:25:56.28,Default,,0000,0000,0000,,irgendeine Zahl rausfällt. Und das geht\Nhäufig nach hinten los, ja? Ich habe also Dialogue: 0,0:25:56.28,0:26:01.63,Default,,0000,0000,0000,,mal so ein… das war ein wirklich\Nschockierendes Erlebnis für mich. Ich bin, Dialogue: 0,0:26:01.63,0:26:05.82,Default,,0000,0000,0000,,ich sage mal preiswert, aber nicht billig,\Nja, also meine Tagessätze. – Ich weiß, ich Dialogue: 0,0:26:05.82,0:26:11.16,Default,,0000,0000,0000,,weiß! – So und dann gehe ich dahin, zu dem\NKunden, und der Kunde sagt: „Geh mal nach Dialogue: 0,0:26:11.16,0:26:15.36,Default,,0000,0000,0000,,Hause.“ Also ich wurde trotzdem bezahlt,\Nja? Haben gesagt: „Geh mal nach Hause.“ Dialogue: 0,0:26:15.36,0:26:19.73,Default,,0000,0000,0000,,Und ich so: „Wie jetzt?“ „Ja, ist warm\Nheute.“ Meinte ich so: „Was?“ „Ja die Dialogue: 0,0:26:19.73,0:26:23.11,Default,,0000,0000,0000,,Klimaanlage reicht für das Fuzzing-Lab\Noder die Consultants.“ Dialogue: 0,0:26:23.11,0:26:31.72,Default,,0000,0000,0000,,{\i1}Lachen und Applaus{\i0}\NJa. Gut. Das nächste Problem, das ist so Dialogue: 0,0:26:31.72,0:26:35.58,Default,,0000,0000,0000,,ein bisschen schwierig. Aber es ist mir\Nsehr wichtig, weil das so gerade im Kommen Dialogue: 0,0:26:35.58,0:26:40.65,Default,,0000,0000,0000,,ist. Die Coder sind überfordert. Und dann\Nsagt man: wir brauchen irgendeinen soliden Dialogue: 0,0:26:40.65,0:26:43.82,Default,,0000,0000,0000,,Ansatz. Thread-Modeling! Das ist gerade\Nim Kommen. Und das ist eine gute Dialogue: 0,0:26:43.82,0:26:47.52,Default,,0000,0000,0000,,Geschichte, aber es wird häufig\Nmissverstanden. Thread-Modeling, der Dialogue: 0,0:26:47.52,0:26:50.89,Default,,0000,0000,0000,,übliche Ansatz ist, dass man sagt: jedes\NTeam macht ein Thread-Model für den Code. Dialogue: 0,0:26:50.89,0:26:56.42,Default,,0000,0000,0000,,Das ist gut. Ja? Aber häufig macht dann\Nder Feature-Owner oder Projektmanager Dialogue: 0,0:26:56.42,0:27:00.35,Default,,0000,0000,0000,,mit dem Dokumentationsteam zusammen, füllt\Nirgendwelche Formulare aus, und die Dialogue: 0,0:27:00.35,0:27:05.05,Default,,0000,0000,0000,,Developer sind überhaupt nicht betroffen.\NUnd das ist ein krasser Fehler. Denn beim Dialogue: 0,0:27:05.05,0:27:09.08,Default,,0000,0000,0000,,Thread-Modeling geht es nicht um das\NPapier am Ende. Das ist kein Zertifikat. Dialogue: 0,0:27:09.08,0:27:13.55,Default,,0000,0000,0000,,Sondern es geht um den Weg zum Papier. Es\Ngeht darum, dass die Entwickler mal aus Dialogue: 0,0:27:13.55,0:27:17.23,Default,,0000,0000,0000,,der Sicht des Angreifers versuchen, auf\Nihren Code zu gucken, dass sie verstehen, Dialogue: 0,0:27:17.23,0:27:21.24,Default,,0000,0000,0000,,was da Angriffsoberfläche ist, dass sie\Nsehen, wo die Sachen sind, auf die man Dialogue: 0,0:27:21.24,0:27:25.10,Default,,0000,0000,0000,,aufpassen muss, welche Angriffe denkbar\Nsind. Wenn jemand anderes das Thread-Model Dialogue: 0,0:27:25.10,0:27:29.72,Default,,0000,0000,0000,,macht, das hätte man sich auch sparen\Nkönnen, ja? Also: Thread-Model ist gut, Dialogue: 0,0:27:29.72,0:27:34.23,Default,,0000,0000,0000,,aber das müssen die Entwickler machen. Wir\Nsind fast durch. Ich habe noch ein paar Dialogue: 0,0:27:34.23,0:27:37.06,Default,,0000,0000,0000,,allgemeine Ratschläge, weil ich mir\Ndachte: ich kann euch hier nicht so Dialogue: 0,0:27:37.06,0:27:41.82,Default,,0000,0000,0000,,deprimiert nach Hause gehen lassen. Aus\NSicht des Management ist aus meiner Seite Dialogue: 0,0:27:41.82,0:27:44.80,Default,,0000,0000,0000,,ganz wichtig, dass man eine Fehlerkultur\Netabliert. Das heißt: niemand wird Dialogue: 0,0:27:44.80,0:27:48.39,Default,,0000,0000,0000,,bestraft für Bugs. Denn sonst verstecken\Ndie Leute Bugs, und das ist noch Dialogue: 0,0:27:48.39,0:27:51.61,Default,,0000,0000,0000,,schlechter, ja? Man muss Leute belohnen,\N… Dialogue: 0,0:27:51.61,0:27:58.23,Default,,0000,0000,0000,,{\i1}Applaus{\i0}\NMan muss Leute belohnen, wenn sie Dialogue: 0,0:27:58.23,0:28:02.24,Default,,0000,0000,0000,,einen Bug finden und fixen. Aber nicht\Nmit Geld belohnen, sondern mit Ruhm und Dialogue: 0,0:28:02.24,0:28:06.86,Default,,0000,0000,0000,,Ehre. Ich schlage immer vor, einmal die\NWoche, irgendwie Freitag ab 4 oder so, Dialogue: 0,0:28:06.86,0:28:12.76,Default,,0000,0000,0000,,macht man so ein All-Hands-Meeting, wo –\Nwenn die Leute wirklich was Anderes Dialogue: 0,0:28:12.76,0:28:17.07,Default,,0000,0000,0000,,vorhaben, müssen sie nicht hingehen, also\Nkein Zwang – aber wo dann die alten Dialogue: 0,0:28:17.07,0:28:22.16,Default,,0000,0000,0000,,Hasen ihre schönsten Bugs erklären, ja?\NDamit es als etwas Positives gesehen wird, Dialogue: 0,0:28:22.16,0:28:25.83,Default,,0000,0000,0000,,einen Bug zu finden, und damit die Jungen\Nwas dabei lernen. Das ist eine gute Sache, Dialogue: 0,0:28:25.83,0:28:29.09,Default,,0000,0000,0000,,das kann ich empfehlen. Das funktioniert\Nauch gut, und das bringt auch das Team Dialogue: 0,0:28:29.09,0:28:35.01,Default,,0000,0000,0000,,zusammen. Und es nimmt so diesen Rockstar-\NStatus weg, der auch nur schadet. So, die Dialogue: 0,0:28:35.01,0:28:38.87,Default,,0000,0000,0000,,nächste Sache ist, dass man dafür sorgt,\Ndass der Bug auch von dem gefixed wird, Dialogue: 0,0:28:38.87,0:28:42.65,Default,,0000,0000,0000,,der den Code geschrieben hat. Es gibt\Ngroße Firmen, die teilweise ein zweites Dialogue: 0,0:28:42.65,0:28:46.73,Default,,0000,0000,0000,,Team dafür haben, Sicherheits-Bugs zu\Nfixen. Und dann kriegt der Typ, der das Dialogue: 0,0:28:46.73,0:28:49.32,Default,,0000,0000,0000,,programmiert hat, überhaupt nicht mit,\Ndass er die ganze Zeit schlechten Code Dialogue: 0,0:28:49.32,0:28:52.88,Default,,0000,0000,0000,,programmiert. Der zieht dann am besten\Nnoch so von Team zu Team, hinterlässt Dialogue: 0,0:28:52.88,0:28:57.41,Default,,0000,0000,0000,,überall so Tretminen. Das ist wichtig,\Ndass es Feedback gibt. Und zwar nicht als Dialogue: 0,0:28:57.41,0:29:00.65,Default,,0000,0000,0000,,Strafe, sondern damit die Leute merken,\Nwenn sie Fehler machen, ja? Menschen Dialogue: 0,0:29:00.65,0:29:04.01,Default,,0000,0000,0000,,lernen aus ihren Fehlern. Dafür muss man\Nverstehen, wenn man einen Fehler gemacht Dialogue: 0,0:29:04.01,0:29:08.20,Default,,0000,0000,0000,,hat. Und das ist die, wo… komme ich\Nzurück zu dieser Meeting-Kultur. Wenn man Dialogue: 0,0:29:08.20,0:29:11.68,Default,,0000,0000,0000,,ein Meeting hat und sagt: „Du hast hier\Naber Scheiße gemacht“, dann macht man den Dialogue: 0,0:29:11.68,0:29:15.64,Default,,0000,0000,0000,,vor dem ganzen Team nackig. Das hilft\Nüberhaupt nicht, ja? Man… es ist auch Dialogue: 0,0:29:15.64,0:29:19.37,Default,,0000,0000,0000,,eine Kulturkreis-Frage. Manche\NKulturkreise können damit besser umgehen Dialogue: 0,0:29:19.37,0:29:24.98,Default,,0000,0000,0000,,als andere. Aber es gibt eben viele Leute,\Ndie haben ein starkes Problem damit, dass Dialogue: 0,0:29:24.98,0:29:28.16,Default,,0000,0000,0000,,ihnen gesagt wird: „Du hast einen Fehler\Ngemacht“, ja? Weil das, in Japan zum Dialogue: 0,0:29:28.16,0:29:32.19,Default,,0000,0000,0000,,Beispiel ist es sehr wichtig, dass man der\NFirma hilft und nicht gesehen wird, wie Dialogue: 0,0:29:32.19,0:29:36.28,Default,,0000,0000,0000,,man irgendwie an irgendwas schuld ist.\NAlso das ist schwierig, so etwas Dialogue: 0,0:29:36.28,0:29:40.21,Default,,0000,0000,0000,,aufzubauen. Aber das ist sehr wichtig.\NFehler sind nicht schlecht, sondern aus Dialogue: 0,0:29:40.21,0:29:46.04,Default,,0000,0000,0000,,den Fehlern kann man lernen, ja? Fehler\Nsind gut. Dann finde ich, dass die Firma Dialogue: 0,0:29:46.04,0:29:50.52,Default,,0000,0000,0000,,Werte kommunizieren sollte. Werte wie:\Nuns ist der Code wichtiger, die Güte des Dialogue: 0,0:29:50.52,0:29:54.79,Default,,0000,0000,0000,,Codes ist wichtiger als die Quantität, ja?\NEs kommt nicht darauf an, hier mehr Kram Dialogue: 0,0:29:54.79,0:29:59.62,Default,,0000,0000,0000,,dran zu tun, sondern es kommt darauf an,\Ndass wir, wenn wir was geschrieben haben, Dialogue: 0,0:29:59.62,0:30:02.82,Default,,0000,0000,0000,,da auch noch einmal darauf zurückkommen\Nspäter, ja? Wenn wir was dazugelernt Dialogue: 0,0:30:02.82,0:30:07.93,Default,,0000,0000,0000,,haben, dass wir das auf den alten Code\Nanwenden. Und damit das stressfrei machbar Dialogue: 0,0:30:07.93,0:30:12.60,Default,,0000,0000,0000,,ist, braucht man ordentliche Unit-Tests.\NSo haben wir dann so einen Kreisschluss. Dialogue: 0,0:30:12.60,0:30:15.91,Default,,0000,0000,0000,,Die Anekdote, die ich hier erzählen\Nwollte, war, dass ich mit einem Freund Dialogue: 0,0:30:15.91,0:30:20.69,Default,,0000,0000,0000,,einen Job hatte. Und da war… Teil von dem\NProblem war ein User-Interface. Und da Dialogue: 0,0:30:20.69,0:30:24.11,Default,,0000,0000,0000,,hatten wir beide überhaupt keine Ahnung\Nvon. Und der Freund meinte dann ganz Dialogue: 0,0:30:24.11,0:30:27.98,Default,,0000,0000,0000,,locker: „Ja lass uns das in Qt machen.“\NUnd ich meinte so: „Wir haben beide keine Dialogue: 0,0:30:27.98,0:30:30.99,Default,,0000,0000,0000,,Ahnung von Qt. Was machst du hier?“ Und\Nda meint er: „Ja, das hätte ich gerne im Dialogue: 0,0:30:30.99,0:30:34.32,Default,,0000,0000,0000,,Resümee stehen, ja? Das muss… in meinem\NLebenslauf sieht das gut aus.“ Das ist Dialogue: 0,0:30:34.32,0:30:37.35,Default,,0000,0000,0000,,schon ein paar Jahre her. Aber was ich\Nsagen will: wenn die Firma den Leuten Dialogue: 0,0:30:37.35,0:30:41.21,Default,,0000,0000,0000,,nicht die Zeit gibt, Sachen zu lernen,\Ndann lernen sie das in Projekten der Dialogue: 0,0:30:41.21,0:30:45.39,Default,,0000,0000,0000,,Firma, und die werden dann Scheiße. Dialogue: 0,0:30:45.39,0:30:55.13,Default,,0000,0000,0000,,{\i1}Applaus{\i0} Dialogue: 0,0:30:55.13,0:30:58.45,Default,,0000,0000,0000,,Was man auch häufiger sieht, ist, dass das\NManagement glaubt, sie müsste die Dialogue: 0,0:30:58.45,0:31:02.60,Default,,0000,0000,0000,,Architektur der Software vorgeben, oder\Nwelche Datenbank verwendet wird oder so. Dialogue: 0,0:31:02.60,0:31:05.48,Default,,0000,0000,0000,,Und das ist eigentlich auch immer eine\Nschlechte Idee. Denn entweder die Dialogue: 0,0:31:05.48,0:31:08.66,Default,,0000,0000,0000,,Architektur ist offensichtlich, dann hilft\Nes nichts. Oder sie ist nicht Dialogue: 0,0:31:08.66,0:31:11.06,Default,,0000,0000,0000,,offensichtlich, dann sind die Ratschläge\Nwahrscheinlich falsch, weil wir das Dialogue: 0,0:31:11.06,0:31:14.73,Default,,0000,0000,0000,,Problem noch nicht wirklich verstanden\Nhaben. Also das ist auch eine Sache, da Dialogue: 0,0:31:14.73,0:31:18.49,Default,,0000,0000,0000,,sollte sich das Management\Nzurücknehmen an der Stelle. Dialogue: 0,0:31:18.49,0:31:23.55,Default,,0000,0000,0000,,{\i1}Applaus{\i0}\NUnd hier noch so ein bisschen Selbsthilfe Dialogue: 0,0:31:23.55,0:31:28.41,Default,,0000,0000,0000,,für Entwickler. Ist die letzte Folie, ganz\Nentspannt bleiben. Der Druck kommt immer Dialogue: 0,0:31:28.41,0:31:32.69,Default,,0000,0000,0000,,von euch selbst. Das Management kann viel\Nerzählen, ja? Deadline hier, Deadline da. Dialogue: 0,0:31:32.69,0:31:37.33,Default,,0000,0000,0000,,Lasst euch da nicht dazu bringen,\NÜberstunden zu fahren. Immer schön um 9 Dialogue: 0,0:31:37.33,0:31:44.28,Default,,0000,0000,0000,,kommen, um 5 nach Hause gehen. Also…\N{\i1}Applaus{\i0} Dialogue: 0,0:31:44.28,0:31:49.80,Default,,0000,0000,0000,,Wenn unrealistische Anforderungen\Nreinkommen, dann müsst ihr da ganz ehrlich Dialogue: 0,0:31:49.80,0:31:52.91,Default,,0000,0000,0000,,sein und sagen: „Das wird wahrscheinlich\Nnicht klappen. Ich nehme jetzt euer Geld Dialogue: 0,0:31:52.91,0:31:56.73,Default,,0000,0000,0000,,und arbeite daran. Aber ich sage euch\Njetzt: das wird nix, ja?“ Immer schön Dialogue: 0,0:31:56.73,0:32:00.46,Default,,0000,0000,0000,,Paper-Trail hinterlassen, dass das nichts\Nwird und man es rechtzeitig gesagt hat. Dialogue: 0,0:32:00.46,0:32:03.23,Default,,0000,0000,0000,,Man kann dann dran arbeiten, weil viele\Nvon euch werden wahrscheinlich die Kohle Dialogue: 0,0:32:03.23,0:32:07.11,Default,,0000,0000,0000,,brauchen, aber ehrlich sein, nicht so tun,\Nals wenn wir das mit ein paar irgendwie Dialogue: 0,0:32:07.11,0:32:10.92,Default,,0000,0000,0000,,die-Nacht-durchgemacht am Ende noch\Nreißen können. Das ist besonders in der Dialogue: 0,0:32:10.92,0:32:15.60,Default,,0000,0000,0000,,Spielebranche ein riesiges Problem, dass\Ndie Leute total Burnout kriegen. Man muss Dialogue: 0,0:32:15.60,0:32:19.46,Default,,0000,0000,0000,,das verstehen mit dem Management wie ein\Ngegenseitiges Training, ja? Wenn ich dem Dialogue: 0,0:32:19.46,0:32:22.97,Default,,0000,0000,0000,,Management so etwas durchgehen lasse,\Ndann zeige ich ihnen: das ist die neue Dialogue: 0,0:32:22.97,0:32:25.61,Default,,0000,0000,0000,,Baseline, ja? Das erwarten die ab dann. Dialogue: 0,0:32:25.61,0:32:27.57,Default,,0000,0000,0000,,Herald: Soll ich mir einen Stuhl holen,\Ndamit ich mich daneben setze? Dialogue: 0,0:32:27.57,0:32:28.94,Default,,0000,0000,0000,,Fefe: Kannst du machen,\Ndas ist die letzte Folie. Dialogue: 0,0:32:28.94,0:32:31.22,Default,,0000,0000,0000,,Herald: Okay.\NFefe: Ganz ruhig! Dialogue: 0,0:32:31.22,0:32:33.77,Default,,0000,0000,0000,,So, und der letzte Satz,\Nden ich habe: Zeit ist… muss man sich Dialogue: 0,0:32:33.77,0:32:36.24,Default,,0000,0000,0000,,selber nehmen, ja?\NIch habe zwar gerade gesagt… Dialogue: 0,0:32:36.24,0:32:42.06,Default,,0000,0000,0000,,{\i1}Lachen und Applaus{\i0} Dialogue: 0,0:32:42.06,0:32:50.30,Default,,0000,0000,0000,,Herald: Raus mit dir!\N{\i1}weiter Applaus{\i0} Dialogue: 0,0:32:50.30,0:32:52.91,Default,,0000,0000,0000,,Ich habe zwar gerade dem Management\Nempfohlen, euch Zeit zu geben, Dialogue: 0,0:32:52.91,0:32:56.02,Default,,0000,0000,0000,,aber wenn ihr darauf wartet,\Ndas wird nichts. Dialogue: 0,0:32:56.02,0:32:59.54,Default,,0000,0000,0000,,{\i1}Lachen{\i0}\NSo, ich fürchte, die Fragezeit ist schon Dialogue: 0,0:32:59.54,0:33:02.83,Default,,0000,0000,0000,,vorbei, oder?\NHerald: Jo. Dialogue: 0,0:33:02.83,0:33:13.52,Default,,0000,0000,0000,,{\i1}Lachen und Applaus{\i0} Dialogue: 0,0:33:13.52,0:33:17.27,Default,,0000,0000,0000,,Das Beeindruckende ist ja wirklich:\Ndie sind alle da geblieben, und da ist Dialogue: 0,0:33:17.27,0:33:22.38,Default,,0000,0000,0000,,nicht einer vom Stuhl gefallen.\NFefe: Ja! {\i1}lacht{\i0} Dialogue: 0,0:33:22.38,0:33:27.75,Default,,0000,0000,0000,,Herald: Vielen, vielen Dank! Ausgänge\Nsind beide offen. Das war’s von Fefe. Dialogue: 0,0:33:27.75,0:33:30.34,Default,,0000,0000,0000,,Hier noch mal ein Applaus für ihn bitte! Dialogue: 0,0:33:30.34,0:33:38.09,Default,,0000,0000,0000,,{\i1}Applaus{\i0} Dialogue: 0,0:33:38.09,0:33:54.42,Default,,0000,0000,0000,,{\i1}Abspannmusik{\i0} Dialogue: 0,0:33:54.42,0:33:59.30,Default,,0000,0000,0000,,{\i1}Untertitel erstellt von c3subtitles.de\Nim Jahr 2018{\i0}