SlideShare a Scribd company logo
1 of 176
Download to read offline
Krótka historia
wszystkich ludzi
którzy kiedykolwiek żyli
(w Twoim kodzie)
kwasniew.com
*Manager
*Service
*ManagerService
ActivityManagerService.java
rasa vs rasizm
600 lat temu
3400 lat temu
W TWOIM KODZIE
W TWOIM KODZIE
GITACH
W TWOIM KODZIE
GITACH
MATEUSZ KWAŚNIEWSKI
“koledzy”
standup meeting
“architekt”
// komentarze
https://stackoverflow.com/questions/184618/what-is-the-best-comment-in-source-code-you-have-ever-encountered
codescene.io
Akt I: Był sobie kod
Akt I, Scena I:
Hotspot'y
czyli
gdzie żyją smoki?
Masz potrzebę, by ludzie cię lubili i
podziwiali, jednak jesteś osobą
krytyczną wobec siebie
Efekt horoskopowy
(efekt Forera)
McCabe’s Cyclomatic Complexity?
Source
Lines
Of
Code
Trendy złożoności w hotspotach
Trendy złożoności w hotspotach
https://codescene.io/docs/guides/technical/complexity-trends.html
Trendy złożoności w hotspotach
S
"Simple isn't something you start a
project with and reminisce about,
it's where you’re are trying to get to”
Daniel Worthington-Bodart
Akt I, Scena II:
Niezamierzone
powiązania w czasie
Funkcje/Moduły/Serwisy
https://speakerdeck.com/adamtornhill/guide-refactorings-with-behavioral-code-analysis
Strukturalne i czasowe
actionType.js
action.js
reducer.js
Component.js
czas
zmiana 1 zmiana 2 zmiana 3
Common Closure Principle
zamierzony
czy
niezamierzony?
Ginger Cake
https://leanpub.com/softwarefaster
https://leanpub.com/softwarefaster
Same as chocolate cake, but with ginger
Ginger Cake
DRYDecoupling
https://leanpub.com/softwarefaster
Same as chocolate cake, but with ginger
Ginger Cake
Zmiana w systemie rozproszonym
https://scs-architecture.org
Akt I, Scena III:
Wiek kodu jako
driver architektoniczny
https://en.wikipedia.org/wiki/Forgetting_curve
“Ignorant surgery”
ostatnia zmiana (w miesiącach)
Mało plików się zmieniło
przez ostatnie 7 miesięcy?
Czy ten projekt umarł?
Ale rzadko commitują!
Czy ten projekt umarł?
Rozwiązuje
ruchomy problem
Poszukuje
właściwej abstrakcji
Poszukuje
właściwej abstrakcji
Robi za dużo
Robi za dużo
Filozofia Unix’owa
cmd1 | cmd2 | cmd3
ls
ls | wc -l
9
tape
skończony != martwy
Stary
stabilny kod
Nowy
kod
utils
utils → dumpsterdumpster
pakiet workers
jest stabilny
Te pakiety się
nie ustabilizowały
Akt II: Byli sobie ludzie
Akt II, Scena I:
Gdzie kucharek sześć
"The extent to which you can
implement new features without calling
a grand staff meeting is the ultimate
test of an architecture’s success.”
AdamTornhill
Podział na moduły
to za mało
http://hintjens.com/blog:100
% czasu
bez spotkań
dla zespołów
liczba mózgów http://hintjens.com/blog:100
liczba mózgów
% czasu
bez spotkań
dla zespołów
Im więcej konsensusu potrzeba,
tym mniej pracy możesz wykonać
http://hintjens.com/blog:100
% czasu
bez spotkań
liczba mózgów
→ ∞
% czasu
bez spotkań
liczba mózgów
→ ∞
Ile h
spotkań
bez
spotkań
max.
rozmiar
4h 0,5 2
1
1 - 0.5
% czasu
bez spotkań
liczba mózgów
→ ∞
Ile h
spotkań
bez
spotkań
max.
rozmiar
4h 0,5 2
1h 0,875 8
1
1 - 0.875
% czasu
bez spotkań
liczba mózgów
→ ∞
Ile h
spotkań
bez
spotkań
max.
rozmiar
4h 0,5 2
1h 0,875 8
~1.5h 0,8 5
1
1 - 0.8
"Jeśli mamy wystarczająco oczu,
wszystkie bugi są powierzchowne”
Prawo Linusa
https://www.si.usi.ch/assets/publications/conf/vissoft/vissoft2005/DAmbrosLG05.pdf
Akt II, Scena II:
Pożegnanie dewelopera
Deweloper
przechodzi do innego
zespołu
Deweloper zostaje
menedżerem
Box Ticker
Taskmaker
Deweloper
opuszcza firmę
https://hackerlife.co/blog/san-francisco-large-corporation-employee-tenure
Częściowa strata w
testach do ReactDOM
eslint-plugin-react-hooks
Parowanie oraz
mob programming
“Pytający na
@channel”
Francisco de Goya
Ca. 1778-80
Make
things
happen
Watch
things
happen
Wonder
what
happened
Podsumowanie
• Był sobie kod
• Hotspoty, czyli gdzie żyją smoki?
• Niezamierzone powiązania w czasie
• Wiek kodu jako driver architektoniczny
• Byli sobie ludzie
• Gdzie kucharek sześć
• Pożegnanie dewelopera
Deweloper przechodzi
na emeryturę albo
umiera
Kod opowiada Ci historię
Czy jesteś gotowy/gotowa
posłuchać?
kwasniew.com

More Related Content

Similar to Krótka historia wszystkich ludzi, którzy kiedykolwiek żyli (w twoim kodzie JS)

KrakSpot #13 Jaromir Działo - Działaj globalnie, czyli Topicmarks w dolinie k...
KrakSpot #13 Jaromir Działo - Działaj globalnie, czyli Topicmarks w dolinie k...KrakSpot #13 Jaromir Działo - Działaj globalnie, czyli Topicmarks w dolinie k...
KrakSpot #13 Jaromir Działo - Działaj globalnie, czyli Topicmarks w dolinie k...Filip Dębowski
 
Technologia blockchain, prof. Krzysztof Piech
Technologia blockchain, prof. Krzysztof PiechTechnologia blockchain, prof. Krzysztof Piech
Technologia blockchain, prof. Krzysztof PiechCIONET Polska
 
Four Slupsk Lectures. II. Semantic Web
Four Slupsk Lectures. II. Semantic WebFour Slupsk Lectures. II. Semantic Web
Four Slupsk Lectures. II. Semantic Websopekmir
 
[Quality Meetup #9] TestOps, QAOps - czy ktoś taki istnieje? - Aleksandra Kor...
[Quality Meetup #9] TestOps, QAOps - czy ktoś taki istnieje? - Aleksandra Kor...[Quality Meetup #9] TestOps, QAOps - czy ktoś taki istnieje? - Aleksandra Kor...
[Quality Meetup #9] TestOps, QAOps - czy ktoś taki istnieje? - Aleksandra Kor...Future Processing
 
Patterns for organic architecture
Patterns for organic architecturePatterns for organic architecture
Patterns for organic architectureJaroslaw Palka
 
Space Wars Hack - Class #1
Space Wars Hack - Class #1Space Wars Hack - Class #1
Space Wars Hack - Class #1Piotr Pawlak
 
[PL] Hyperledger 101 - Tomasz Szymański
[PL] Hyperledger 101 - Tomasz Szymański[PL] Hyperledger 101 - Tomasz Szymański
[PL] Hyperledger 101 - Tomasz SzymańskiTomasz Szymanski
 
[Confitura 2013] Nie ma jednej słusznej drogi - różne podejścia do architektu...
[Confitura 2013] Nie ma jednej słusznej drogi - różne podejścia do architektu...[Confitura 2013] Nie ma jednej słusznej drogi - różne podejścia do architektu...
[Confitura 2013] Nie ma jednej słusznej drogi - różne podejścia do architektu...Michał Bartyzel
 

Similar to Krótka historia wszystkich ludzi, którzy kiedykolwiek żyli (w twoim kodzie JS) (9)

KrakSpot #13 Jaromir Działo - Działaj globalnie, czyli Topicmarks w dolinie k...
KrakSpot #13 Jaromir Działo - Działaj globalnie, czyli Topicmarks w dolinie k...KrakSpot #13 Jaromir Działo - Działaj globalnie, czyli Topicmarks w dolinie k...
KrakSpot #13 Jaromir Działo - Działaj globalnie, czyli Topicmarks w dolinie k...
 
Technologia blockchain, prof. Krzysztof Piech
Technologia blockchain, prof. Krzysztof PiechTechnologia blockchain, prof. Krzysztof Piech
Technologia blockchain, prof. Krzysztof Piech
 
Four Slupsk Lectures. II. Semantic Web
Four Slupsk Lectures. II. Semantic WebFour Slupsk Lectures. II. Semantic Web
Four Slupsk Lectures. II. Semantic Web
 
[Quality Meetup #9] TestOps, QAOps - czy ktoś taki istnieje? - Aleksandra Kor...
[Quality Meetup #9] TestOps, QAOps - czy ktoś taki istnieje? - Aleksandra Kor...[Quality Meetup #9] TestOps, QAOps - czy ktoś taki istnieje? - Aleksandra Kor...
[Quality Meetup #9] TestOps, QAOps - czy ktoś taki istnieje? - Aleksandra Kor...
 
Patterns for organic architecture
Patterns for organic architecturePatterns for organic architecture
Patterns for organic architecture
 
Space Wars Hack - Class #1
Space Wars Hack - Class #1Space Wars Hack - Class #1
Space Wars Hack - Class #1
 
[PL] Hyperledger 101 - Tomasz Szymański
[PL] Hyperledger 101 - Tomasz Szymański[PL] Hyperledger 101 - Tomasz Szymański
[PL] Hyperledger 101 - Tomasz Szymański
 
Wyscig o czynnik ludzki
Wyscig o czynnik ludzkiWyscig o czynnik ludzki
Wyscig o czynnik ludzki
 
[Confitura 2013] Nie ma jednej słusznej drogi - różne podejścia do architektu...
[Confitura 2013] Nie ma jednej słusznej drogi - różne podejścia do architektu...[Confitura 2013] Nie ma jednej słusznej drogi - różne podejścia do architektu...
[Confitura 2013] Nie ma jednej słusznej drogi - różne podejścia do architektu...
 

More from The Software House

Jak kraść miliony, czyli o błędach bezpieczeństwa, które mogą spotkać również...
Jak kraść miliony, czyli o błędach bezpieczeństwa, które mogą spotkać również...Jak kraść miliony, czyli o błędach bezpieczeństwa, które mogą spotkać również...
Jak kraść miliony, czyli o błędach bezpieczeństwa, które mogą spotkać również...The Software House
 
Jak efektywnie podejść do certyfikacji w AWS?
Jak efektywnie podejść do certyfikacji w AWS?Jak efektywnie podejść do certyfikacji w AWS?
Jak efektywnie podejść do certyfikacji w AWS?The Software House
 
O co chodzi z tą dostępnością cyfrową?
O co chodzi z tą dostępnością cyfrową?O co chodzi z tą dostępnością cyfrową?
O co chodzi z tą dostępnością cyfrową?The Software House
 
Chat tekstowy z użyciem Amazon Chime
Chat tekstowy z użyciem Amazon ChimeChat tekstowy z użyciem Amazon Chime
Chat tekstowy z użyciem Amazon ChimeThe Software House
 
Jak nie zwariować z architekturą Serverless?
Jak nie zwariować z architekturą Serverless?Jak nie zwariować z architekturą Serverless?
Jak nie zwariować z architekturą Serverless?The Software House
 
Analiza semantyczna artykułów prasowych w 5 sprintów z użyciem AWS
Analiza semantyczna artykułów prasowych w 5 sprintów z użyciem AWSAnaliza semantyczna artykułów prasowych w 5 sprintów z użyciem AWS
Analiza semantyczna artykułów prasowych w 5 sprintów z użyciem AWSThe Software House
 
Feature flags na ratunek projektu w JavaScript
Feature flags na ratunek projektu w JavaScriptFeature flags na ratunek projektu w JavaScript
Feature flags na ratunek projektu w JavaScriptThe Software House
 
Typowanie nominalne w TypeScript
Typowanie nominalne w TypeScriptTypowanie nominalne w TypeScript
Typowanie nominalne w TypeScriptThe Software House
 
Automatyzacja tworzenia frontendu z wykorzystaniem GraphQL
Automatyzacja tworzenia frontendu z wykorzystaniem GraphQLAutomatyzacja tworzenia frontendu z wykorzystaniem GraphQL
Automatyzacja tworzenia frontendu z wykorzystaniem GraphQLThe Software House
 
Serverless Compose vs hurtownia danych
Serverless Compose vs hurtownia danychServerless Compose vs hurtownia danych
Serverless Compose vs hurtownia danychThe Software House
 
Testy API: połączenie z bazą danych czy implementacja w pamięci
Testy API: połączenie z bazą danych czy implementacja w pamięciTesty API: połączenie z bazą danych czy implementacja w pamięci
Testy API: połączenie z bazą danych czy implementacja w pamięciThe Software House
 
Jak skutecznie read model. Case study
Jak skutecznie read model. Case studyJak skutecznie read model. Case study
Jak skutecznie read model. Case studyThe Software House
 
Firestore czyli ognista baza od giganta z Doliny Krzemowej
Firestore czyli ognista baza od giganta z Doliny KrzemowejFirestore czyli ognista baza od giganta z Doliny Krzemowej
Firestore czyli ognista baza od giganta z Doliny KrzemowejThe Software House
 
Jak utrzymać stado Lambd w ryzach
Jak utrzymać stado Lambd w ryzachJak utrzymać stado Lambd w ryzach
Jak utrzymać stado Lambd w ryzachThe Software House
 
O łączeniu Storyblok i Next.js
O łączeniu Storyblok i Next.jsO łączeniu Storyblok i Next.js
O łączeniu Storyblok i Next.jsThe Software House
 
Amazon Step Functions. Sposób na implementację procesów w chmurze
Amazon Step Functions. Sposób na implementację procesów w chmurzeAmazon Step Functions. Sposób na implementację procesów w chmurze
Amazon Step Functions. Sposób na implementację procesów w chmurzeThe Software House
 
Od Figmy do gotowej aplikacji bez linijki kodu
Od Figmy do gotowej aplikacji bez linijki koduOd Figmy do gotowej aplikacji bez linijki kodu
Od Figmy do gotowej aplikacji bez linijki koduThe Software House
 

More from The Software House (20)

Jak kraść miliony, czyli o błędach bezpieczeństwa, które mogą spotkać również...
Jak kraść miliony, czyli o błędach bezpieczeństwa, które mogą spotkać również...Jak kraść miliony, czyli o błędach bezpieczeństwa, które mogą spotkać również...
Jak kraść miliony, czyli o błędach bezpieczeństwa, które mogą spotkać również...
 
Uszanowanko Podsumowanko
Uszanowanko PodsumowankoUszanowanko Podsumowanko
Uszanowanko Podsumowanko
 
Jak efektywnie podejść do certyfikacji w AWS?
Jak efektywnie podejść do certyfikacji w AWS?Jak efektywnie podejść do certyfikacji w AWS?
Jak efektywnie podejść do certyfikacji w AWS?
 
O co chodzi z tą dostępnością cyfrową?
O co chodzi z tą dostępnością cyfrową?O co chodzi z tą dostępnością cyfrową?
O co chodzi z tą dostępnością cyfrową?
 
Chat tekstowy z użyciem Amazon Chime
Chat tekstowy z użyciem Amazon ChimeChat tekstowy z użyciem Amazon Chime
Chat tekstowy z użyciem Amazon Chime
 
Migracje danych serverless
Migracje danych serverlessMigracje danych serverless
Migracje danych serverless
 
Jak nie zwariować z architekturą Serverless?
Jak nie zwariować z architekturą Serverless?Jak nie zwariować z architekturą Serverless?
Jak nie zwariować z architekturą Serverless?
 
Analiza semantyczna artykułów prasowych w 5 sprintów z użyciem AWS
Analiza semantyczna artykułów prasowych w 5 sprintów z użyciem AWSAnaliza semantyczna artykułów prasowych w 5 sprintów z użyciem AWS
Analiza semantyczna artykułów prasowych w 5 sprintów z użyciem AWS
 
Feature flags na ratunek projektu w JavaScript
Feature flags na ratunek projektu w JavaScriptFeature flags na ratunek projektu w JavaScript
Feature flags na ratunek projektu w JavaScript
 
Typowanie nominalne w TypeScript
Typowanie nominalne w TypeScriptTypowanie nominalne w TypeScript
Typowanie nominalne w TypeScript
 
Automatyzacja tworzenia frontendu z wykorzystaniem GraphQL
Automatyzacja tworzenia frontendu z wykorzystaniem GraphQLAutomatyzacja tworzenia frontendu z wykorzystaniem GraphQL
Automatyzacja tworzenia frontendu z wykorzystaniem GraphQL
 
Serverless Compose vs hurtownia danych
Serverless Compose vs hurtownia danychServerless Compose vs hurtownia danych
Serverless Compose vs hurtownia danych
 
Testy API: połączenie z bazą danych czy implementacja w pamięci
Testy API: połączenie z bazą danych czy implementacja w pamięciTesty API: połączenie z bazą danych czy implementacja w pamięci
Testy API: połączenie z bazą danych czy implementacja w pamięci
 
Jak skutecznie read model. Case study
Jak skutecznie read model. Case studyJak skutecznie read model. Case study
Jak skutecznie read model. Case study
 
Firestore czyli ognista baza od giganta z Doliny Krzemowej
Firestore czyli ognista baza od giganta z Doliny KrzemowejFirestore czyli ognista baza od giganta z Doliny Krzemowej
Firestore czyli ognista baza od giganta z Doliny Krzemowej
 
Jak utrzymać stado Lambd w ryzach
Jak utrzymać stado Lambd w ryzachJak utrzymać stado Lambd w ryzach
Jak utrzymać stado Lambd w ryzach
 
Jak poskromić AWS?
Jak poskromić AWS?Jak poskromić AWS?
Jak poskromić AWS?
 
O łączeniu Storyblok i Next.js
O łączeniu Storyblok i Next.jsO łączeniu Storyblok i Next.js
O łączeniu Storyblok i Next.js
 
Amazon Step Functions. Sposób na implementację procesów w chmurze
Amazon Step Functions. Sposób na implementację procesów w chmurzeAmazon Step Functions. Sposób na implementację procesów w chmurze
Amazon Step Functions. Sposób na implementację procesów w chmurze
 
Od Figmy do gotowej aplikacji bez linijki kodu
Od Figmy do gotowej aplikacji bez linijki koduOd Figmy do gotowej aplikacji bez linijki kodu
Od Figmy do gotowej aplikacji bez linijki kodu
 

Krótka historia wszystkich ludzi, którzy kiedykolwiek żyli (w twoim kodzie JS)