 Hello everyone. My name is Lukasz Konkol and I will talk about code review and how does it differ when it comes to variet of experience. But let me introduce myself first. I'm software engineer for about six years. I was a technical team leader for over a year. W tej chwili, jak inżynier i team leaderu pracowałem na wiele projektów, z wielu różnych ludzi, z różnych doświadczeń, z różnych bądźmi. Wreszcie, ja znalazłem wielki rząd z różnych ludzi. i poddaję się z tymi doświadczeniami na kodrowiu, jakaś z punktu widzenia ludzi, co jest zawodnikiem w kodrowiu i jako obserwator. Ja też wręczam na kodrowiu edyomatyczne performancje Pythonu. To będzie prezentować Python syntax, suger w comparowaniu z bojlorą, w kontekstach performancji. Słyszałem, że ten projekt jest jeszcze w progresie. Zobaczmy się, że zaczniemy postawić ten projekt na początku 2020 roku, ale to nie jest konfirmowane. Chciałem również zrozumieć moją wiedzę w Europie w ostatnim roku, dwóch edycji z Pajkonu UK, Pajkon Stan Sebastian dwa lata temu i mnóstwo razy w lokalnych metach. Możesz znaleźć kilka z moich pasów z tych linków. Znaczyćam się w sklepie w końcu, więc masz szans na to, żeby sprawdzić to później. Pierwsza jedna jest rodzina trajlerów dla książki. To jest o piekawie pytańskim pytańskim. I druga jest interaktywna sesja o migracji z pytańskim 2 do pytańskim 3. Ok, teraz sprawdzamy się agenda. Najpierw zrobię jakieś zrozumień na rewizucie. Teraz pokażę Wam jakieś generalne zrozumień na rewizucie. I potem próbuję analizować differencesy na poziomie doświadczenia. I w końcu będziemy mogli mieć czas na pytania lub rozmów. Ok, zacznijmy. Dobra pytanie. Który znał ktoś inny? Ok, dziękuję. I z drugiej strony. Proszę zwrócić rękę, jeśli ten rewizucie został znowu. Ok, dziękuję. Jesteście zadowolone z koncepcją rewizucy, ale zacznijmy zrozumień na rewizucie. Pierwsze wszystko to jedna z sztucznej kwalitetu systemu. I rewizucie rewizucie to przeczytać i analizować zrozumień na rewizucie. I ten rewizucie może być obie, ale rewizucie rewizucie powinien być zrobione przez człowiek. I teraz可能 wyobrażasz to. Ale to, co naprawdę znaczy, to jest to. A więc zapytajmy na rewizucie. Trochę ludzi nazywa to niepickie. Chciałabym to nazywać kaptein Pepete. To jest to. Ten rewizucie jest jedna z charakterów za długi. A ten rewizucie powinien być sprzeciwne w pewien sposób. Czarny format jest w porządku tutaj. Więc ten punkt tutaj jest, że nie ma punktu, na tym, co może być zrobione przez tool, zamiast człowieka. Ale będziemy do tego załatwić. I teraz wracamy do rewizucie. Więc nie powinien to być zrobione przez człowiek. Jak to jest rewizucja, to jest dobrze, nie powinien to być zrobione przez człowiek. I jak wszyscy wiemy, zawsze chcesz, żebyś poddawał swojej rewizucie. Ale to jest wyjaśnienie, kiedy człowiek powinien rewizować jego własny kod, ale wracamy do tego później. I także rewizucie powinien być zrobione przez swoich przyjaciół i nie przez swoim rewizucie. I to jest bardzo obawne. Nikt nie chce swoich przyjaciół patrzeć na twój kod. I jeszcze jedna ważna rzecz o rewizucie. Wszyscy, kodówki czy eksperty, powinien mieć rewizucę, i powinien mieć rewizucę, w najlepszych razach. To jest w zasadzie podobne, jeśli tylko masz rewizucę, a nie masz rewizucę, a nie masz rewizucę, to chyba nie jest dobre. Dobra, teraz mówimy, dlaczego robimy rewizucę kodówki. Przede wszystkim, chcielibyśmy znaleźć tak wiele efekty, jak możemy, przed swoimi użyciami, znaleźć. Chcielibyśmy też sprawdzić, czy może to być najlepsza solucja do problemu. Możemy tutaj oznaczać performance, skalabilność, maintanabilność, bezpieczeństwo i wiele innych aspektów na software. Wszystkie te sprawdzenia są zrobione na bardzo szybko. Tak więc, sprawdzimy ten nowy kod, dopóki jest wrześny, aby nie zapłacić badkodówki do mastera i poszukiwania do następnych stracenia software-developmentu. W ten sposób, usłyszymy odpowiedni kod kwalitny, a drugi odgłos do kodówki jest kodownicą. Więc, kiedy sprawdzamy kod wrześny przez kolegę, czujesz się bardziej i bardziej odpowiedzialnym o to, ponieważ czujesz swój stamtąd oprowadzenia na to. Inny aspekt kodówki jest znaleźć. Kiedy sprawdzamy ktoś inny kod, nauczymy się o nowych funkcji, które wytrzymały do projektu jak to jest wytrzymałe w naszym kodzie. Ale możemy też nauczyć nowych algorytm lub język specyfików, które nie znalazłyśmy wcześniej. Znaleźć kodówki powołówie, kto już słyszał kodówki. Ok, formalnie kodówki jest nr. ludziom, które powinni być zbierane przez kodówki, aby znalazły projekt. Myślę, że ta imagina sprawa dużo, więc, jeśli Bob znalazł kodówkę i jest tylko rozwójstwa, kto zna kodówki, to będzie lepsze dla wszystkich, żeby znalazły jego projekt, ponieważ nikt inny zna, co się dzieje. Ok, teraz mówimy o wytrzymałej kodówki. Jak już mówiłem, kodówki nie powinny trwać czasu na coś, co kodówka może zrobić dla ciebie. Basyjny kodówki to coś, co nie myślimy o tym. Jest frektyczny, więc github, bitbucket, githlub i wiele innych. Wytrzymałeś kodówki, które pomagają nas, aby pokazać kodówkę w niebezpieczny sposób. Dajemy, żeby znać komentarz, znalazły kodówki, uderzył kodówki, które powinniśmy uderzyć kodówkę. Powinniśmy, że kodówka nie powinna być zrobiona przez kodówkę, nie przez człowiek. Pamiętaj, że kodówka jest naprawdę niebezpieczna. Są jakieś kodówki, ale pamiętaj, że kodówka nie jest limitowana. Wytrzymałej kodówki jest też coś, co możemy automatować. Jest to kodówka, który uderzył kodówkę. Czy ktoś uderzył kodówkę? Ok, to jest bardzo popularne. Tak, że kodówka nie ma kodówka, ponieważ uderzył kodówkę, który zwykle uderzył niebezpieczny sposób dla niebezpiecznego argumentu o kodówkę w drużynie. Tak, jak Henry Ford mówił, każdy kodówka może mieć kodówkę, który chce tak długo, jak jest kodówka. Więc to jest to, co chcemy zrobić tutaj. Trzeba skończyć skutki o kodówkę, kodówkę. Ok, teraz automatować wszystkie rzeczy. Inny step, żeby mieć kodówkę efektywna, jest ustawić kontynuacyjną wytrzymać kodówkę, który uderzył kodówkę, który uderzył kodówkę, który uderzył kodówkę. Inna idea jest przekomitować kodówkę. To jest kontynuacja wytrzymać kodówkę w rozwójach i wytrzymać kodówkę, ale jest trochę bardziej rozszerzany. To z komitowania kodówki, jeśli nie nie przeżywa się wszystkie czeky w pierwszym miejscu. Zobaczmy o podróżu do kodówki. Więc najpierw to to, że nie powinienś podróżuć kodówki. Przed podróżuć kodówkę, to jest dobrze sprawdzić kodówkę, jak ktoś inny kodówka. Jeśli wypracisz coś na własnym miejscu, to możesz sprowadzić dużo czasu od kodówki i podróżu szybko. Inna kodówka. Sprowadź kodówkę, jak najpierw możliwe. Studia pokazuje, że 500 kodówka jest już za dużo dla jednej podróżu. Zobaczmy to, jeśli możliwe. To też pokazuje, że podróżu kodówki sprowadzi więcej i więcej i to wszystko. To nie pomaga podróżu. Jeśli kodówka sprowadzi dużo czasu, pomyśl o podróżu. To powinien podróżu kilka części od podróżu. I inny kodówka jest podróżu w porządku. Nie bądź pokazać podróżu. Jeśli podróżu jest za duży. To jest dla ciebie podróżu. Podróżu może się z tym podróżu. Przed podróżu się zbyt i zbyt podróżu. I podróżu podróżu. I podróżu podróżu. I podróżu podróżu tak jest vielä jest undergo stzieje嚮 Towards the reviewer that some part of code needs special attention. For example, because it might be error prone or there's so much cases. If code is too complicated, it's good to discuss the code together. It can be initiated either by the author who's aware of code complexity or lub przez rewielerze, który jest zląbiony w kodzie. W takim razie, przeszkodzisz kodzie z rewielerem lub even w porządku metodzie z całym teamem, jeśli ten projekt jest większy na twoim projekcie. Explaining made parts of this feature, digging deep into the code, explaining it. This makes it easier to review by your teammates, and it also supports knowledge sharing among the team. And now maybe a bit less pleasant aspect, so if you don't agree with the comment that reviewer has left, discuss it outside of the code review tool. It's easy if you're sitting next to each other, just poke them and discuss. If you remotely just take the discussion to some chat you're using, like Slack or Skype or even set up a call. You don't want everyone watching a fight between the two of you. And also the point is to keep the code review tool clean. And it's also about speed. Discussing in the code review tool will make you longer to wait for the response and usually make the whole review process longer. At the end don't forget to leave a comment on the outcome of the discussion when you come to the conclusion, actually, because if you still don't agree, well, it's really complicated. I have come across a few methods, whether vote on your options with the whole team or call an authority from outside the team to be the kind of judge. I know that both of these options are not perfect. It's all about compromises and conflict management in your team. Let's now talk about some advices for reviewer. So, first of all, read what the feature is about. It should be all there in the ticket in your issue tracker. Because it's basically impossible to give a proper code review without even being aware what this code is supposed to do. Then take your time on code review. Take the time to properly focus and analyze each fragment of the code. So, in general, you should review no more than 400 lines of code per hour. And also limit the time you spend on reviewing the code. Don't spend more than an hour on the code review without a break, because you're simply not able to focus good enough after a while. Also don't spend the whole day on reviewing. You can easily burn out. Find the good ratio between the code review and your other responsibilities. And depending on your skills, check for the wide range of mistakes. Starting from the logical ones, through the architectural and design decisions, also including various aspects, for example, securities, scalability, maintainability and lots more. And as the reviewer, test the code. Don't take it as a given that it works. Check based usage of the code, verify so much cases, just to make sure it works. And the last but not least, always be professional and give constructive feedback. It can really get messy if comments are targeted personally, but we'll get back to it later. Let's now talk about the situation when it gets really complicated, different perspective, human factor. I will focus mostly on the experience differences, as this seems to be a main touch point most frequently. Ok, let's first talk about the perspective of the newcomer and an expert as an author of the pull request. I will use some images to describe it more expressively. So let's now think like a beginner or the newcomer to the team. They get some task, they submit pull request with the changes. They are often overwhelmed. The situation is new to them. They can feel like a defendant in the courtroom. So prosecutor, the reviewer is accusing them of bad code quality. The team is watching, listening, taking notes or just remembering things to point it out later. And of course there is a judge, the manager who looks at the progress of the newly employed developer. They can even feel more like being beaten up in the schoolyard. Reviewer is bullying them and the rest of the team is just watching and laughing. I think we all get the point that the newcomer is feeling uncomfortable, unsafe, uncertain. Expert on the other hand, this situation isn't new for an expert. It's like a rodeo. Just get some rough ride, maybe sweat a bit and get some adrenaline and just go home, forget about it. But there is a catch. So at this picture who is the author and who is the reviewer? So at the first site the reviewer is the bull that tries hard to find something that will throw out our expert author Cowboy on the ground. But it doesn't have to be this way. An expert author can actually be the bull that is furious about the reviewer Cowboy trying to mess up with him. Of course I'm talking about most frequent cases. All of this is just generalization. Even a regular author can be intimidated in some situations like it's their first code review in their lives. On the other hand newbie can be so confident or even cheeky, like it's nothing new to them. My point here is to respect each other and access limits properly. So let's talk about reviewing Beginner's code. What should know when you start reviewing the code of the newcomer? I will leave these images here so we'll keep in mind the attitude of the newcomer. As I mentioned earlier be professional. But in this case you should also be super polite. Especially when it's the first code review of that person. Remember that everyone has their own limits and their own specific background. What might sound completely reasonable to you might sound like a personal attack for someone else. Especially when they are stressed because of the new situation and feel like being judged. When you find a mistake explain it clearly and extensively. What might be obvious for you and everyone in the team it might be completely mysterious for someone who is new to the industry. Beking up your comments with some code examples or input-output examples is usually a good idea to explain your point. Same applies to the situation if you find something that could be improved. I will leave you with some reasonable solutions with the author explaining trade-offs again back it up with some code samples proofs of concepts, benchmarks etc. And probably the most important thing show the newcomer your appreciation tell them that they did a good job praise them. We all want to hear it. We're all doing our jobs after all. But think like the newcomer again. Go back to these pictures. Any appreciation they receive increase their self-esteem and help them reduce the fear for the next code review. Let's now think about reviewing expert's code. So I will start with the Latin sentence here quid quid latina diktum sit album videtur. Does anyone know what that means? Yeah, that's correct. Everything written in Latin looks very profound. Yeah, that also applies here. So when we see the poor request from the person who has lots of experience and is in the team for a long time we often think that their code just must be perfect. We take it just as a given. But there is nothing more deceptive. Everyone makes mistakes. It's just a matter of finding them. Of course experts will not make some newbie mistakes very frequently. But there is always something that can go wrong. We all know that. We're all human after all. Another aspect of reviewing expert's code is knowledge sharing. Expert is a pure vault of information. Use it fully. It's great opportunity for you to learn about the code base or about some language gems. It also helps reducing buzz factor I mentioned before. So when you would need to apply some changes in the same area in the future you will feel much more comfortable if you already know what's going on there. Don't be afraid to ask if you're not sure what's going on in the code. If you're newcomer it's probably better to speak to the author offline for basically two reasons. First of all you might just feel much more comfortable speaking just to one person who's actually here to help you in the public space. And the second reason to take it offline is just to don't spam the code review tool. Ok, that's all. Thank you for your attention. You can find slides on the left. And I would also ask you for some piece of feedback that will help me improve myself for the future talks. You can find a simple form on the right. Now if we have some time I'm happy to take some questions. So first of all thank you. We should have time for one or two questions for sure. So any first questions to go? Ok, maybe then I'm asking a question. If you're not using black how do you avoid sounding nitpicky about especially stier things because it seems quite a balancing act often, right? The simplest way is to just introduce the tool I was talking about. Just by code style or black and then all discussions are cut. But if that's not the case then like I said maybe take a vote in the team on the options we have and then decide on what we need to come back up in the whole team. The woman in the white t-shirt first? No, but there should be time for you too. Go. Great talk, thanks. Do you do code review on all commits and if no how do you decide? Do you use pull requests and if no how do you decide when to use it? Thank you. So what I used to do is just reviewing the pull requests for a specific feature bug or some task. We use the pull requests so everything is there in GitHub and GitHub has nice code review tools that helps you doing the code review. Does that answer your question? I have a question. How is it possible to make the team more involved in the code review process? Because I feel that sometimes when people are not familiarized with some specific code and they don't feel comfortable to review because the person that is doing the code is the expert of that code in particular and also if it's a beginning they don't review at all, they don't want to review. So I don't know if you have some tips. That's actually the tough thing because when the expert is just hostile then there is not much you can do. But in my opinion every experienced developer should be open to share his knowledge and just to help some beginners or people with less experience. So if there are no further questions we shall end here. Thanks again for giving the talk.