 Der Pfeffer hatte mich gebeten, mich kurz zu halten, weil er hat mir Angst, dass der Tor nicht in die 30 Minuten passt. Vielen Dank für die Zeit, dass ich mich so lange nicht erwähnt habe. Wir reden über Antipattern. Man macht viel, das Probleme hat, um die Probleme zu lösen, die nicht lösen oder mehr Probleme zu lösen. Hier ist ein Motto, das ich sehr profound finde. Man sieht sehr viel, warum es so ein Motto ist. Wenn man es readen kann, kann man es nicht. Man kann es nicht. Die Struktur des Vortrags will ich an einem Beispiel reisen. Wir beginnen mit einem Problem. Siehl Team 6 ist auf dem Job. Ein Team von Spezial-Experten. Ich bin sicher, dass sie alle nice sind. Dann kommt es in die Implementation. Das ist es, wenn Dinge falsch gehen. Wir haben eine Erkenntnis gewonnen. Problem ist Problemfaktory. Wir haben eine interaktive Komponente, inspiriert von den Britischen Parlaments. Wenn die Menschen etwas vermögen, können sie sich für ihre Hand erinnern. Sie können sich für ihre Hand erinnern. Wir haben eine Versionung und eine Mischung. Ich hoffe, dass ihr das Video sehen könnt. Die Idee, die ihr habt, ist ein Versionungssystem. Das ist eine gute Idee. Siehl Team 6 ist auf dem Job. Die Effekt ist, dass es gut ist. Es gibt nicht nur Svm, Bitbucket Perforce, für GitHub Accounts. Ich habe einen Customer, der Git benutzt. Dann hat er gesagt, welches Git. Die Effekt ist, dass jeder alles checkt. Dann installiert man die Nete-Version. Dann sagt er, ich habe die alle weggemacht. Aber er hat einen Developer. Wir haben es gemacht. Wir haben es gemacht. Das ist nicht genug. Sie haben die Vermischung gebraucht. Sie haben die Versionungssysteme gebraucht. Dann checken sie die Migrationen. Es gibt keine영-Images oder Screenshots. Sie haben die Migrationen und die Exekutables. Das ist etwas, was man nicht tun muss. Es gibt viele Exzeptions, Man hat eine von diesen Erfolgen, die man wissen kann. Und sonst nicht. Das ist natürlich ein extremes Beispiel. Aber ich habe etwas ähnliches gesehen. Ich habe Menschen in verschiedenen Versionen checkt. Und ich verstehe nicht, was der Punkt des Versionen-Systems ist. Das Bild hier hat verschiedene Zip-Files checkt in den Versionen-Systems. Und ich habe immer einen Tipp. Meine Tipps sind, dass man sich in den Versionen-Systems befindet. Das ist okay. Ich bin sicher, dass ich meine eigene Software als CVS auf der Internet habe. Aber das hat historische Gründe. Bevor die Versionen-Systems klein sind, kann man sie separatieren. Das ist ein enormes Problem, wenn jemand einen enormen Multi-Megabyte-Version hat. Wenn man einen separatierten Branche hat, muss man etwas arbeiten, um die Pads zu verabschieden. Wenn man Assumtions- und Versionen-Systems hat, die erfüllt werden müssen, muss man das in einem Bildschirm checken. Und wenn man nicht nur starten muss, muss man es nach zwei Stunden aufbauen. Dann kann man es fast aufbauen. In den Firmen gibt es oft die Idee, dass jede andere Departement ihre eigene Repository und die separate Versionen-Systeme hat. Das kann funktionieren, aber es funktioniert sehr rarer. Das funktioniert nur, wenn man stabilere APIs hat. Natürlich glauben alle, dass ihre APIs stabil sind, aber es ist nicht. Das nächste Problem ist, dass wir immer die Bugs verlieren. Die Lösung ist ein Box-Tracker. Die Implementation ist, dass Sieltim6 schnell etwas hackt. Das Effekt, das man bekommt, ist Bugs. Bugs everywhere. Das ist das Problem. Wir haben viel Bugs. Was machen wir jetzt? Ein Ding, das ich jetzt sehe, ist die Priorität. Das ist etwas wie ein Severity-Blocker oder eine Security-Tag. Das Effekt ist, dass alles andere veröffentlicht wird. Man sieht das wieder und wieder. Was ich sehe, ist, dass die höchste Menge Bugs werden, wenn man ein Feature erhält. Wenn man so ein Feature erhält, kann man diese Bugs erheben. Das ist ein schönes Wort. Danke, dass Sie mich veröffentlichen. Er nennt es Bagwelle, das ist der Bau-Wafe. Wenn ein Schiff einen Bau-Wafe fährt, ist es ein Pond in Deutschland. Wir haben so viele Bugs. Die Idee ist, dass wir Bugs-freie Code geworfen. Das klingt gut. The idea is an a bonus in Money. You get a reward. And then, you know, that leads to US-hole open bugs. I got a mail once, where I recorded bugs and I got a mail from someone saying US. Now I can't pay my mortgage. And I didn't know how to respond. He closed all the bugs and called it not a bug. It was his solution. Er hat mir das zu verabschieden. Er hat mir das vorgeschlagen, dass er alles fixiert hätte, aber du kannst dir vorstellen, wie gut das funktioniert. Ansonsten ist es nicht ein Rennvermeldung, sondern dass man mit Geld ohne was nicht macht. Aber es gibt auch einen Anti-Anti-Pattern zu diesem. Das war alles mit den Kölkern fixiert. Und nicht mit den Buck-Trackeren zu schützen. Und der Grund für das Erste war, dass ich sie verknüpft habe, dass sie mich nicht mehr brauchen. Und er sah alle seine Kollegen, die die Arbeit in Indien ausgesehen haben, also er hat die Hälfte geöffnet und das hat mir meine Brüche weggenommen. Und ich habe sie ein paar Tage schlecht geschlafen, Was hat er von sich selbst, wenn der Bugtracker so viel effektiert? Es passiert mehr oft, als du denkst, dass die Leute die Box öffnen. Denn wenn sie sie öffnen, dann kommt der Boss mit dem Nächsten zu tun. Und wenn sie die Box öffnen, dann haben sie eine Woche einen Ruhm. Das ist ein commoner Pattern. Hier ist ein weiteres klassisches Problem. Wir haben einen tollen Projekt. Unsere Code arbeitet nur auf dem Computer des Entwicklers. Die Lösung ist, eine Build-Server zu machen. Jetzt haben wir eine Build-Server. Es wird cool. Team 6 ist auf dem Job. Es sieht cool aus. Sie hat ein Dron-assisted Building hier. Das Problem ist, dass die Build-Server by ein Team gebaut wird. Sie kann nur die Code von diesem Team bauen. Die restliche Code wird in olden Artifaktien gebracht. Die Libräe ist ein Blog von einem Netzwerksstor. Das ist das. Das passiert. Die Builds sind manuell gedrückt. Man hat eine Build-Server. Man hat es manuell gedrückt. Wenn ich eine Build ausprobiere, kann ich die Builds automatisch ausprobieren. Wenn die Builds failen, verabschiedet sich die Dev-Slogs und fixiert die File. In der Entwicklung der DevOps wird das alles mehr und mehr verabschiedet. Es verabschiedet die Auswirkungen der Build-Server. Wir haben das same Effekt, nur die Maschine von einem Entwickler und der Build-Server. Ich hoffe, dass Debian das Navi-Konvention nimmt. Debian Rams ist das erste mit GCC. Du siehst etwas wie das. Das komplikte Set-up. Das betrifft das Projekt, weil manche Software-Versionen, die normal sind, die nicht normal sind, wie TLS 1.2 oder eine normalen C++-Version und man kann die neuen Features nicht benutzen. Das klingt so. Die Illustration ist großartig. Die Idee des Build-Servers ist, dass man daily Builds machen kann, ohne es zu gehen und zu klicken. Und ohne es zu gehen und zu fixieren. Das sind deterministische und reproduzierte Builds. Das sind mehr agile. Man kann die Version von gestern an 5 fragen. Man kann sagen, wenn Code gepackt ist, das Build breit. Das sind die Kronen von anderen Teilen, die aus dem Parallelbild erzeugen. Wenn man Glück hat, kommt die richtige. Und man will keine crazyen Szenarien. Das wäre mir sehr lieb, dass so Open Source-Inventer alle dafür sorgen, dass ihre Projekte mit beliebiger Parallelität baubasen. Du willst diese Build-Servers auch parallel arbeiten, ohne die Rastkonditionen, die wronge Version haben. Aber das war ein anderer Teil des Builds. Wenn das Build breit, dann kann ich sagen, ich kann einen Klick machen und rollen zurück zu der vorigen Version, die noch funktioniert. Wenn du das nicht tun kannst, dann ist die Build-Servers auch nicht verwendbar. Und das ist, dass du ultimit schnell findest, was und was die Builds checkt. Aber natürlich die Idee ist, nicht das zu verletzen, weil ich gesehen habe eine Firma, in der sie Britney Spears T-Shirt hatte und jeder, der die Build hatte, das hat sie gut gemacht, bis sie jemanden, der eine Britney Spears-Fan hat. Das Problem ist, dass die Builds nur auf die Entwickler-Maschine arbeiten. Und natürlich, heute solch das mit natürlich, das ist nicht im Prinzip eine gute Idee, aber natürlich hat Team Six etwas zusammengehackt und es holt some images from somewhere on the Internet und die Klassik ist natürlich Debian Ramses II and MySQL, something from 19 whatever. Docker ist nicht made for this. It's made for being able to change this in an agile fashion and if you don't do that with having a Frankenstein garbage project I see that a lot in the industry where people take all the disadvantages but leave the advantages behind and common effect is that you have components in sort of static versions that have been manually chosen when the build was set up but they weren't updated ever and I've seen people with build servers who build everything automatically and you can see when things were built and everything happens automatically but they use versions from 2004 and that happens a lot and if you notice in your company that components are being used in old versions tell your build people otherwise you end up with these walking aid for old people you have containers for automated deployment in a deterministic state and not everyone understands it but it's also important to have a trivial rollback if something breaks then you just build the old version and that's not a side effect that's one of the features that's one of the core elements why you would use this container-based system and I can just regenerate a new build and that's why I also told you to check the dependencies in the build so you can do it quickly and you notice when you do something when something breaks and containers also to update components quickly and agilely and it's not black magic it's important and I'm always surprised by how few people actually do that and the last and quite important aspect is that you can isolate components separate isolate components from each other and these components are separate so if one of these gets hacked is hacked then not all of them are compromised but in Traxxas you can see there is the monster container which contains all of them all of the components at once and so it's really good in combination where Git has all the versions the build server has access to the state the most current state and then a container image falls out without any dependencies the next problem is our code doesn't work and so you probably heard of that before too if the problem is what do we do unit test, that's our solution in practice what do we do when we fix a bug then we'll make a unit test from it so to check if it's fixed we make a unit test and that's not good and that way you get 2.3% test coverage and I don't know if you know this video before this was a machine for a soap dispenser it was made by white people and so if someone with a different skin color went up to it it was a classic case of unit tests unit tests are there to check if the code is correct unit oh, there's not there to check if the code is correct there to check if the code is still correct that is if so when you make a change you can tell if stuff still works so you're not afraid to touch old code that's what unit took take off your shoulders because you don't understand that old code so the more coverage you have the more confidence you can have when you are editing old code and so applause from the audience only positive tests you have to run through this because I have so many slides so I hope you'll forgive me the next problem is that people only have positive tests so how does that work it basically is good as having no text tests because the most bugs are in error handling which you need unit tests for so for everything that can have an error you need a test for it that test what happens if this fails and so that's the kind of that's the kind of stuff that causes another error somewhere and so you have some memory corruption error or something like that and then I have a remote memory leave and the process classes and this kind of stuff is totally can totally cover by unit tests they're not a universal magic bullet and even if you have 100% coverage you could have missed some cases and so there are tools for testing your coverage use them even if it's not perfect the next cases our developer has missed some cases missed testing certain cases so do your tests first and then write the code test driven development and I have no idea I've never seen that in practice so I literally have no idea I only know people the audience applause applause at this I only know people who are sure that this is the greatest thing ever and if you've actually seen this work in private please send me an email the next problem is we have some code but nobody has any idea how that works and the solutions of course documentation it's a good idea I'm not gonna say whatever but you know sill time 6 sets up a wiki that's our solution here they're on the job and so then the effect is wiki is down right now it's throwing exceptions that's also to make it as expired isn't violating anymore or something that happens all the time I think I put that in the wiki somewhere you need to bookmark this we don't have a navigation yet and then oh my god all the time that part up there isn't true anymore so wiki is not a solution the smaller the smaller of an effort you have to do to make a change the less the less people actually stop contributing to this project or whatever so the next idea that you see in big companies a lot of times is communication people talk to each other and so open office is a solution maybe with cubicles and this is what it looks like it's an image of a crowded platform at a train station I have never seen this work either doesn't work so you have to be able to concentrate all at once in one piece people need to be able to focus for a certain span of time and in an open plan office that doesn't work and right now the trend is going to installing slack and interrupting each other intentionally and I don't get that at all because after every interruption you need like a 15 minute to get back into it and all of these chat programs and mail programs need to they're designed to not give you that time meetings I don't think I need to say a lot about that but the effect is always the same I can't focus and that's a serious problem and you have to actively work against that and I thought about advising to keeping it short but I've never seen that work so just keep it rare and keep it one on one if there's something and you have to deal with it if you have the whole team together it's a higher barrier for somebody to say well I fucked up so keep it one on one nobody wants to admit shameful things in front of their colleagues but in one on one you can deal with it okay so we've got a problem we've got code but we don't trust what it does first idea we've removed the compiler warnings good idea but the effect and I was shocked there is already a term for it is onion code and that means I have this huge chunk of legacy code and then somebody fixes that and but it still has all of these warnings and I can't check in the bug because I would need to fix all of the warnings but I don't understand the code so I can't do that so I add a little layer that just intercepts this bug and fixes this bug without touching the actual code and when multiple people do that you get an onion and if you see that burn it with fire it's horrible alright so next idea we release only without open box and I had a customer who tried to do that and that leads to males like just close all of your bugs and then my response was well I'm here to open box not close them and then they said yeah we'll reopen them afterwards at which the audience laughs I don't really have to elaborate whether they were opened or not alright so this hurts my soul cause that's what I'm kind of do external audits because what happens is that you get this sort of black box pen test and that means the tester has no full access to the system he doesn't know how it works he should figure it out in the test and then that's what you get he shows a meme saying 4 days submits qualisreport and that image existed before because what happens is that you don't test the code you test the pen tester and I as pen tester could say oh well fuck it I get paid but I really have a higher moral standard I would really like to help the customer if you do this kind of messing around and not doing it then don't do it everyone part of that is that often these tests only happen due to compliance and it's already terrible that we screwed up security so much that we need compliance for people to still do security so the idea is fuzzing this is just giving random inputs until it explodes and I've experienced that people said well you don't have to test this code we've been running fuzzers for months against this you don't have to check it unfortunately they tested 2 billion times the same case great so of course fuzzing is often a fig leaf that prevents other things from happening because we've done fuzzing what else do we need to do I've got nothing against fuzzing but it's not you mustn't neglect other measures because you've done fuzzing or use it as an excuse and this is a general problem I've seen which measures should we take should I take the measure that probably works but doesn't give me metrics to quantify what I've done or the thing that doesn't do a lot but that I can quantify very well and being able to quantify things and that leads to well, that was really shocking for me I'm I have a good price value ratio but I'm not cheap and I get to this customer and he tells me to go home I was like why? it's too warm today you'll get paid anyway well the AC is only enough for one thing the fuzzing lab or the consultants and well, okay and the last problem is sort of tricky but it's very important to me and it's kind of coming and getting bigger our coders are in over their heads and we need a solid Ansatz here which is threat modeling and every team has to do threat models for the code and that's good and that is good but ultimately leads to the project manager or the feature owner to just filling out some forms and the developers aren't affected at all and that's a big mistake because threat modeling isn't about the paper that comes out at the end it's not about the certificate it's about the roads to that paper it's about the developers it's about the attacker and making and thinking in that mode of thought and if somebody else does the threat model you can forget about it you could have saved that threat model is good but the developers have to do it we're almost done here I've got some more general tips because I can't let you go home in such a depressed state from the point of the manager in some areas where nobody is punished for bugs but people who find bugs are rewarded you have to reward people audience claps you have to reward people when they find and fix a bug not with money but with glory and I propose Fridays just before you stop all hands meeting is not something important to do you don't need to come forcing no one but just a meeting where the old hands get to talk about their most awesome bugs to promote this idea that bugs are a good thing that it's interesting that fixing bugs are good and to get rid of this sort of rockstar status because that also doesn't really do and another thing is to have the people mit the bug fix the bugs in big companies it's often that you have a security team that fixes the security bugs and then the dev who is responsible for writing all this bad code never realizes that he writes bad code and he moves around and he leaves bombs behind everywhere and that's not to punish them but it's for them to be able to grow and get better and again in the meeting it's not about saying in front of the whole team you fucked up it's about it's also a cultural thing different cultures can handle this better but a lot of people have a big problem with being told that they screwed up in Japan it's terribly important to help the company and not be seen to build this culture but it's very important mistakes aren't bad you can learn from mistakes mistakes are good and the company has to communicate values like it's more important to have good code than to have more features um it's important that when we wrote something we get back to that and we improve it and to do that stresslessly we need lots of unit tests there's a circle closing here and then the other thing is that an anecdote a friend had a job and there was a user face and we both had no idea and then he let's do it in qt and I was like we don't have no idea and he said well I want to learn about it and it's been a few years but if people aren't given time to learn things by the company then they will learn these things in projects which will then be screwed up okay and what you do see sometimes too is that management thinks they want to prescribe the architecture of the software what database should be used because either the architecture is obvious in which case it doesn't help or if it's not obvious in which case it doesn't help because they misunderstood the problem so that's the kind of thing that you should sort of stand up to management on and so a little more self help for developers here it's the last slide make the pressure come from yourself management talks a lot but don't don't let that make you do overtime don't take any realistic unrealistic expectations you want to get home at 5 if they're making unrealistic expectations you have to be very honest this is probably not going to happen I'll take the money, I'll work on it but I'm going to tell you now it's not going to work and leave a nice little paper trail and you can work on it because you need the money a lot of you will, but be honest about expectations be open about expectations it's a big problem in this industry you have to think of management as you and management training each other because as soon as you do this overtime that's the new normal that can always happen so the last sentence I have you have to take time for yourself raus mit dir get out of here he is over drawing that's why everybody is laughing the irony here so I was just recommending that the management give you time but if you wait for that that's never going to happen so I worry Q&A is over now yes it is said the stage manager so the impressive thing they all stayed here and nobody fell off the chair yeah thanks a lot both of the exits are open that's it that's it from Feifei and that's it from us here in the translation booth thank you