Better Software Design
Better Software Design podcast. Rozmowy o projektowaniu oprogramowania, architekturze i wyzwaniach z tym związanych.
Technologia
70. O Testcontainers, piramidzie testów i jakości życia z Piotrem Przybyłem
2023-09-26 01:00:00
Każdy kod zostanie przetestowany, wcześniej bądź później. Pozostają jedynie pytania na jakim etapie i przez kogo zostanie to wykonane i jaki będzie tego ostateczny koszt. Gdy aplikacja staje się złożona i tworzy ją wiele różnych komponentów, proces testowania może zacząć przysparzać pewnych trudności, choćby z odwzorowaniem odpowiedniego środowiska uruchomienia testów. I tu przychodzi z pomocą biblioteka Testcontainers.
Testcontainers to framework pozwalający testować aplikację w oparciu o kontenery Dockera z prawdziwymi zależnościami systemu. I choć pozornie brzmi to banalnie, narzędzie to oferuje szereg bardzo praktycznych i przydatnych rozwiązań, znacznie upraszczających cały proces testowania integracyjnego.
Moim gościem jest dziś Piotr Przybył, Software Gardener z wieloletnim doświadczeniem programistycznym, który o praktycznym wykorzystaniu Testcontainers w projektach wie naprawdę sporo.
W tym odcinku rozmawiamy z Piotrem między innymi o:
- częstych problemach z testowaniem kodu i jego jednostkach,
- możliwych podejściach do organizacji testów w piramidy, odwrócone piramidy, plastry miodu...
- zasadzie działania biblioteki Testcontainers i jej kluczowych konceptach,
- różnicach pomiędzy Testcontainers a innymi sposobami uruchamiania usług podczas testów,
- synchronizacji kodu testów opartych o Testcontainers z infrastrukturą produkcyjną.
Zapraszam!
Materiały dodatkowe:
- Testcontainers Getting Started, dokumentacja omawianej w odcinku biblioteki
- Katalog modułów, dostępne gotowe kontenery z prekonfigurowanymi usługami
- Testcontainers Workshop, repozytorium na Githubie z przykładowym kodem krok-po-kroku
- Integration tests are needed and simple, prezentacja Piotra o testach integracyjnych z użyciem TC z konferencji Devoxx UK 2023
- Testcontainers: needed, simple, powerful, dłuższa, niemal 3 godzinna prezentacja z Devoxx z Belgii
- Wpisy o Testcontainers, blog Piotra o oprogramowaniu, nie tylko o testowaniu
69. O wydajności systemu, optymalizacjach i trade-offach z Tomaszem Lelkiem
2023-09-12 01:00:00
Czy nieczytelny, trudno nierozszerzalny i na dodatek zduplikowany kod może być dobry? Co więcej, nawet pożądany? Tak, jeśli w projekcie istotne są zupełnie inne drivery, np. w postaci oczekiwanej dużej wydajności systemu. Wówczas poświęcenie pewnych cech kodu na cześć innych wydaje się mieć dużo sensu.
Dziś zapraszam na rozmowę z Tomaszem Lelkiem, współautorem wydanej w ubiegłym roku w wydawnictwiem Manning książki "Software Mistakes and Tradeoffs: How to make good programming decisions". A rozmawiać będziemy właśnie o świadomym podejmowaniu decyzji, zwłaszcza w kontekście wydajności i optymalizacji systemu. Nie od dziś przecież wiadomo, że zbyt wczesna optymalizacja jest źródłem całego zła. Niestety wykonana zbyt późno też źródłem wszystkich kosztów...
Dzięki uprzejmości wydawnictwa Manning mam 2 kody uprawniające do darmowego pobrania książki Tomka "Software Mistakes and Tradeoffs: How to make good programming decisions" w formie ebooka. Zapraszam więc do podzielenia się historiami o optymalizacjach waszych systemów. Kody te trafią do dwóch osób, których zgłoszenia zostały wybrane przeze mnie jako najciekawsze i najbardziej pouczające dla Ciebie i/lub zespołu.
Termin przesyłania zgłoszeń mija z końcem 30 września 2023 roku, nadsyłać je można z użyciem formularza dostępnego na stronie https://forms.gle/o2rVAQHmwZuyP7y66
68. O rozwoju domeny generycznej w modelu open-source z Łukaszem Chruścielem
2023-08-29 01:00:00
Temat tworzenia oprogramowania pod konkretne potrzeby biznesowe, we współpracy z ekspertami domenowymi pojawiał się wielokrotnie w podkaście. Ale jak tworzyć oprogramowanie w modelu open-source, które będzie wykorzystywane przez innych developerów i gdzie pojedynczy ekspert domenowy nie istnieje, bo trzeba dbać o wielu różnych klientów?
Jak tworzyć oprogramowanie rozszerzane następnie przez innych developerów, jakie techniki stosować, dlaczego to co w innym projekcie byłoby bad-practice tu może być dobrym rozwiązaniem - m.in. o tym będziemy rozmawiać dziś z Łukaszem Chruścielem. Łukasz od wielu lat pracuje w core-teamie open-source'owego frameworka e-commerce Sylius, a dodatkowo miliony pobrań poszczególnych pakietów tego kodu i wiele dużych wdrożeń w projektach będzie tu ciekawą perspektywą.
Zapraszam!
Materiały dodatkowe:
- Sylius Github, repozytorium projektu
- Profil Łukasza na Twitterze
- Rozterki i decyzje. Czego się nauczyliśmy projektując API Syliusa, prezentacja Łukasza z konferencji Boiling Frogs 2023, przy okazji której mogliśmy się spotkać i porozmawiać
67. O danych prywatnych w architekturach zdarzeniowych z Oskarem Dudyczem
2023-08-15 01:00:00
Eventy świetnie pozwalają rozdzielać duże systemy na mniejsze części i i przenosić między nimi dane. Każda usługa może wówczas je przetwarzać w oparciu o własną logikę biznesową. Problem w tym, że propagacja danych w systemie jest dość prosta, ale ich usunięcie już niekoniecznie...
O tym, w jaki sposób możemy rozwiązywać problem przetwarzania danych prywatnych rozmawiam dziś z Oskarem Dudyczem. I choć skupiamy się przede wszystkim na architekturach zdarzeniowych, to w zasadzie wszystkie omawiane techniki można bez problemu zastosować również w innych systemach.
W tym odcinku razem z Oskarem rozmawiamy m.in. o:
- prywatności niektórych danych,
- usuwaniu danych vs utracie możliwości ich dalszego przetwarzania,
- strategiach "zapominania" o danych prywatnych w architekturach eventowych,
- czym jest i jak działa crypto-shredding, tombstoning czy scavenging,
- GDPR i o tym, o czym zwykle mało pamięta się w projekcie...
Materiały dodatkowe:
- How to deal with privacy and GDPR in Event-Sourced systems, prezentacja Oskara na omawiany w odcinku temat z konferencji Devoxx Greece
- Scalable User Privacy: Crypto Shredding at Spotify, prezentacja Brama Leendersa na temat przetwarzania danych prywatnych w Spotify
- GDPR - General Data Protection Regulation, zestaw regulacji na temat prywatności i ochrony danych prywatnych
- Tombstoning i scavening w EventStoreDB, fragment dokumentacji na temat sposobów usuwania zdarzeń
66. O Fitness Functions w architekturze ewolucyjnej z Sebastianem Buczyńskim
2023-08-01 01:00:00
"Architekci muszę bez przerwy oceniać cechy architektury, aby upewnić się, że ciągle zapewniają one jakość i nie stają się antywzorcami..." Ten cytat z książki "Building Evolutionary Architectures: Support Constant Change" autorstwa Neala Forda, Rebeki Parsons i Patricka Kua dotyczy jednego z fundamentów architektury ewolucyjnej, czyli tzw. funkcji dopasowania - Fitness Functions.
Funkcje te pozwalają konkretnie ocenić dopasowanie architektury oprogramowania względem postawionych wymagań i podejmować świadome decyzje odnośnie wprowadzania zmian. Czym są wspominane tu funkcje, jak można je definiować i weryfikować, a także czym jest architektura ewolucyjna, o tym rozmawiamy z moim dzisiejszym gościem, Sebastianem Buczyńskim.
Zapraszam!
Materiały dodatkowe:
- Building Evolutionary Architectures: Support Constant Change, Neal Ford, Rebecca Parsons, Patrick Kua, 2017
- Building Evolutionary Architectures, prezentacja Rebeki Parsons, Neala Forda i Jamesa Lewisa z konferencji GOTO 2023
- Evolutionary Software Architectures, prezentacja Neala Forda z Voxxed Days
- Evolutionary Architecture from an Organizational Perspective, artykuł jednego z gości Better Software Design, Radka Maziarki na temat dopasowania architektury do przedsiębiorstwa
65. LIVE PHPers Summit 2023
2023-07-18 01:00:00
Konferencja PHPers Summit 2023 była świetną okazją do tego, aby zrobić coś zupełnie inaczej w podkaście. Mikrofony i reszta sprzętu wylądowała w jednej z hal Międzynarodowych Targów Poznańskich, na scenie zasiedli obok mnie Michał Giergielewicz i Grzegorz Korba z trójmiejskiego GetResponse, a na sali pojawiło się kilkaset zainteresowanych rozmową osób.
Summit i 10-lecie community były świetną okazją do tego, aby to właśnie słuchacze napisali scenariusz tej rozmowy. Pojawiały się pytania z sali i na chacie, a zaplanowane na sam koniec konferencji 45 minut nagrania przeciągnęło się do 1.5 godziny, za co wszystkim tam zebranym jeszcze raz dziękuję!
Zapraszam!
64. O architekturze hexagonalnej, portach i adapterach z Kubą Nabrdalikiem
2023-07-04 01:00:00
Idea zaproponowanej przez Alistaira Cockburna architektury heksagonalnej ma już prawie 20 lat. Ale jak krótko i rzeczowo opisać założenia Hexagonal Architecture, czy też Ports & Adapters? I jak to przekłada się na kod systemu?
Każdy koncept można bardzo mocno i niepotrzebnie skomplikować. Nawet tak prosty w swojej istocie jak Porty i Adaptery. Dziś z moim gościem, Kubą Nabrdalikiem, wracamy do korzeni z 2005 roku i staramy się wyłuskać esencję tego wzorca architektonicznego. A jeśli przy drugim mikrofonie gości Kuba, to wiadomo, że będzie do bólu pragmatycznie i prosto w z mostu...
W dzisiejszym odcinku:
- czym jest architektura heksagonalna,
- czym są porty i adaptery,
- skąd w ogóle wywodzi się ten koncept i jak ma się do dzisiejszych czasów,
- jakie typowe błędy można popełnić stosując ten wzorzec w kodzie,
- nie zabrakło oczywiście przykładów z życia i produkcji...
Materiały dodatkowe:
- hexagonalarchitecture.org, homepage na temat Ports & Adapters
- Hexagonal architecture, nowsza wersja oryginalnego wpisu Alistaira Cockburna na temat architektury heksagonalnej z 2005 roku
- Hexagonal architecture @ wiki c2, wpis na blogu Warda Cunninghama
- SmallerWebHexagon, wspominane w odcinku repo pokazujące bazową ideę
- Hentai, repozytorium Kuby Nabrdalika pokazujące użycie hexagona z modularyzacją i innymi technikami
63. O modułach w DDD i organizacji kodu aplikacji biznesowej z Marcinem Markowskim
2023-06-20 01:00:00
Subdomena czy bounded-context może być odkryta lub zamodelowana z użyciem heurystyk, które pojawiły się już kilkukrotnie we wcześniejszych rozmowach. Ale jak te koncepty mapują się na kod naszego systemu? Gdzie i jak zobaczymy w IDE ich istnienie i zakres? Odpowiedzią na te pytania mogą być opisane przez Erica Evansa moduły, zwane także pakietami.
Dziś ponownie moim gościem jest Marcin Markowski, a nasza rozmowa będzie dotyczyć wspomnianych już modułów. Będzie i teoretycznie i praktycznie, z obowiązkowym przykładem.
W dzisiejszym odcinku rozmawiamy z Marcinem m.in. o:
- decyzjach wpływających na kształt subdomen biznesowych i bounded contextów,
- modułach i ich roli w projekcie,
- organizacji kodu i struktury aplikacji w pakiety.
Materiały dodatkowe:
- Tacking Complexity in the Heart of Software, Eric Evans, rozdział poświęcony modułom,
- Modules in DDD, artykuł podsumowujący wspomniany powyżej rozdział,
- DDD Starter DotNet, przykład organizacji kodu w repozytorium Marcina,
- Modular Monolith with DDD, przykład organizacji kodu w repozytorium Kamila Grzybka,
- Modularization of domain models, darmowy rozdział książki Functional and Reactive Domain Modeling,
62. O siedmiu dev-grzechach głównych kariery w IT z Wojtkiem Ptakiem
2023-06-06 01:00:00
Kod często można zmienić relatywnie łatwo. Jednak zupełnie inaczej jest z własnymi nawykami czy podejściem. Dziś na czynniki pierwsze rozkładamy kilka typowych "dev-grzeszków", które z perspektywy osób odpowiedzialnych za całe piony IT mogą przeszkadzać w karierze. Ponieważ technologia to niestety nie wszystko...
Moim gościem jest dziś ponownie Wojtek Ptak, Executive Engineering Director oraz Head of Development w Revolut Business. A jakich tematów dotkniemy podczas rozmowy? Choćby tego, że błędem jest nieposiadanie planu. Nasza kariera nie musi się "wydarzać" i podążać od przypadku do przypadku. Ten proces może być znacznie bardziej świadomy, wsparty różnymi ćwiczeniami i działaniami. Jakimi dokładnie? Polecam posłuchać mojego gościa.
Materiały dodatkowe:
- Developer Community Keynote: The thing about burnout,
- Principles, Ray Dalio, 2017
- To Sell is Human: The Surprising Truth About Moving Others, Daniel H. Pink, 2012
- The Secrets of Consulting: A Guide to Giving and Getting Advice Successfully, Gerald M. Weinberg, Virginia Satir, 1985 - klasyka gatunku, wielokrotnie wspominana w poprzednich odcinkach
Odcinek ukazuje się przy okazji 3 edycji szkolenia Legacy Fighter. Jeśli chcesz nauczyć się tworzyć nowy kod ściśle dopasowany do wymagań biznesowych, odporny na erozję, a także skutecznie naprawiać już istniejące legacy tymi samymi technikami, zapraszam!
Cały kod jest dostępny w kilku technologiach jest dostępny na GitHubie.
61. O dostarczaniu kodu na produkcję z użyciem Feature Toggles z Mateuszem Kwaśniewskim
2023-05-30 01:00:00
Do dziś pamiętam pierwsze wydanie pewnego projektu... 30 sekund po zakończeniu procedury rozdzwoniły się telefony i jasne już było, że choć wdrożenie może i się udało, to wydanie już niekoniecznie. Jakiś czas później sterowaliśmy zmianami w zachowaniu kodu na produkcji bez konieczności jego aktualizacji, już całkowicie bezstresowo.
Jedną z zastosowanych tam technik były Feature Toggles i właśnie na ten temat rozmawiamy z moim dzisiejszym gościem, Mateuszem Kwaśniewskim. Ponieważ jeśli na ten temat z kimś rozmawiać, to najlepiej z osobą, która pracuje przy jednym z najbardziej znanych systemów do zarządzania flagami w kodzie.
W tym odcinku rozmawiamy z Mateuszem m.in. o:
- rozdzielaniu wdrożeń od wydań projektu,
- różnego rodzajach Feature Toggle'ach i ich przeznaczeniu,
- sposobach i miejscach osadzania toggli w kodzie,
- dobrych i złych praktykach stosowania tej techniki w projekcie,
- testowaniu kodu wyposażonego we flagi.
Zapraszam!
Materiały dodatkowe:
- Feature Toggles a.k.a Feature Flags, świetny artykuł Pete Hodgsona na temat różnego rodzaju toggli, ich przeznaczenia i cykli życia
- The most expensive bug in history..., poruszona już w podkaście historia firmy Knights Capital, zakończona m.in. błędnym wykorzystaniem feature flagi
- Feature Toggles - Why and How to Add to Your Software, 2-godzinny tutorial na temat stosowania toggli z użyciem Unleasha
- Unleash Quickstart, skrócona wersja tutoriala
- FeatureFlags.pl, małe kompendium wiedzy na temat Feature Flags i podejścia Trunk Based Development