Rozwój osobisty

SonarQube, Sonar, Statyczna analiza kodu

SonarQube to narzędzie do automatycznej analizy jakości kodu, które wykrywa błędy, luki bezpieczeństwa i naruszenia standardów programowania. Umożliwia ciągłe monitorowanie projektu i szybkie reagowanie na potencjalne problemy. Dzięki integracji z narzędziami CI/CD i intuicyjnemu interfejsowi, wspiera zespoły programistyczne w utrzymaniu wysokiej jakości kodu.

Analiza statyczna kodu – co to jest i dlaczego warto?

Analiza statyczna kodu to proces sprawdzania kodu źródłowego bez uruchamiania programu. Innymi słowy, narzędzie analizuje tekst naszego kodu, aby wychwycić błędy, potencjalne bugi czy naruszenia dobrych praktyk. W przeciwieństwie do analizy dynamicznej (która odbywa się podczas działania aplikacji, np. poprzez testy), analiza statyczna skupia się na strukturze i składni kodu. Dzięki temu możemy wykryć problemy już na etapie pisania kodu, zanim jeszcze uruchomimy program czy przekażemy go do testów.

Koszt błędu

Koszt błędu
(źródło: researchgate.net)

Dlaczego to ważne? Każdemu programiście – zwłaszcza początkującemu – zdarza się popełnić błędy w kodzie. Część z nich wychwycimy dopiero podczas działania programu (np. gdy aplikacja nagle się wyłoży), ale wiele pomyłek można znaleźć znacznie wcześniej. Tutaj z pomocą przychodzi statyczna analiza kodu. To trochę jak automatyczny korektor lub „spell-check” dla programisty: ostrzeże Cię, że coś może być nie tak, zanim jeszcze problem się zmaterializuje. W efekcie oszczędzasz czas (bug znaleziony przed testami to mniej poprawek na ostatnią chwilę) i poprawiasz jakość swojego kodu.

Zalety analizy statycznej kodu

Jakie konkretnie korzyści daje nam statyczna analiza kodu?

Oto najważniejsze z punktu widzenia początkującego programisty:

  • Wczesne wykrywanie błędów: Narzędzia do analizy statycznej znajdują wiele pomyłek na bardzo wczesnym etapie. Zamiast głowić się, czemu program dziwnie się zachowuje, dostajesz od razu podpowiedź: „Uwaga, tu może wystąpić błąd!” Dzięki temu naprawisz go zanim kod trafi do dalszych testów czy na produkcję.
  • Poprawa jakości i czytelności kodu: Analiza statyczna zwraca uwagę nie tylko na błędy, ale też na tzw. code smell – czyli fragmenty kodu, które co prawda działają, ale sugerują złą praktykę lub mogą sprawiać kłopoty w przyszłości. Eliminując takie miejsca, twój kod staje się czystszy, bardziej czytelny i łatwiejszy w utrzymaniu.
  • Standaryzacja i dobre praktyki: Większość narzędzi posiada zestaw reguł opartych o sprawdzone standardy kodowania. Przykładowo, mogą wymuszać odpowiednie nazewnictwo zmiennych, konwencje formatowania czy struktury. To pomaga wyrobić dobre nawyki – szczególnie ważne, gdy dopiero uczysz się profesjonalnego podejścia do pisania kodu.
  • Oszczędność czasu w code review: Jeśli w projekcie praktykujecie code review (wzajemne przeglądy kodu), analiza statyczna automatycznie wyłapie część oczywistych uchybień (np. brakujące final przy zmiennych, nieużywane importy itp.). Dzięki temu podczas manualnego code review współpracownicy mogą skupić się na istotniejszych aspektach logiki i architektury, zamiast wytykać drobnostki.
  • Poprawa bezpieczeństwa: Zaawansowane narzędzia (takie jak SonarQube) potrafią wykrywać także podatności bezpieczeństwa. Ostrzegą Cię np. przed użyciem niebezpiecznej funkcji, ryzykiem SQL Injection czy przechowywaniem hasła na sztywno w kodzie. To szczególnie ważne, bo początkujący często nie są świadomi wszystkich zagrożeń – narzędzie podpowie, gdzie kod może być narażony.

Podsumowując, statyczna analiza działa trochę jak doświadczony mentor spoglądający przez ramię na Twój kod. Od razu sugeruje poprawki i uczy lepszych praktyk. To świetny sposób, by uczyć się na własnym kodzie, mając dodatkowe zabezpieczenie przed wprowadzeniem oczywistych błędów.

Przykłady problemów wykrywanych przez statyczną analizę kodu

SonarQube statyczna analiza kodu

Skoro wiemy już, że analiza statyczna szuka błędów i „zapachów” w kodzie, przyjrzyjmy się kilku konkretnym przykładom, co takie narzędzie może wychwycić.

Oto typowe problemy, które początkujący (i nie tylko) programiści często popełniają, a które automatyczna analiza kodu potrafi zidentyfikować:

  • Nieużywane zmienne lub funkcje: Jeśli zadeklarowałeś zmienną, ale nigdy jej nie wykorzystujesz, narzędzie Cię o tym poinformuje. Taki martwy kod tylko zaśmieca program – spokojnie można go usunąć.
  • Nigdy niewykonywany kod: Podobnie, analiza wykryje fragmenty, do których nigdy nie prowadzi żadna ścieżka (np. instrukcja w if, który zawsze jest false). To sygnał, że mamy zbędny lub źle napisany kod.
  • Potencjalne wyjątki w czasie działania: Klasyczny przykład to możliwość wystąpienia NullPointerException w Javie. Jeśli wywołujesz metodę na obiekcie, który może być null i nie sprawdziłeś tego – narzędzie podkreśli, że może dojść do błędu. Inny przykład to dzielenie przez zmienną, której wartość może okazać się zerem – statyczna analiza ostrzeże o takim scenariuszu.
  • Wycieki zasobów: Zapomniałeś zamknąć otwarty plik, strumień lub połączenie z bazą danych? Analiza kodu zauważy, że np. w każdej ścieżce wykonania funkcji nie zamykasz pliku po otwarciu. To ważne, bo takie błędy mogą nie od razu być widoczne, a prowadzą do poważnych problemów (np. zbyt wielu otwartych połączeń).
  • Naruszenie zasad bezpieczeństwa: Przykładowo, umieszczenie hasła lub klucza API na sztywno w kodzie źródłowym zostanie oznaczone jako błąd bezpieczeństwa. Podobnie użycie przestarzałych algorytmów kryptograficznych, brak walidacji danych wejściowych czy ryzykowne operacje (np. wywołanie zewnętrznego polecenia systemowego) mogą być wykryte automatycznie.
  • „Code smells” – problemy z czytelnością i utrzymaniem: Narzędzie poinformuje Cię, jeśli np. funkcja jest zbyt długa, klasa ma zbyt wiele odpowiedzialności, duplikuje się kod w kilku miejscach, albo nazwy zmiennych są mało zrozumiałe. To nie są błędy, które od razu spowodują awarię programu, ale sygnały, że warto zrefaktoryzować kod, by był lepszej jakości.

Jak widać, zakres wykrywanych problemów jest szeroki – od drobnych niedociągnięć, przez poważne bugi, aż po kwestie stylu i dobrych praktyk. Dobre narzędzie do analizy statycznej pełni rolę wszechstronnego strażnika jakości, pilnując zarówno poprawności działania, jak i czytelności czy bezpieczeństwa naszego kodu.

SonarQube – narzędzie do analizy statycznej kodu

Skoro mówimy o statycznej analizie, nie sposób nie wspomnieć o SonarQube – jednym z najpopularniejszych narzędzi w tej dziedzinie. SonarQube to rozbudowana platforma od firmy SonarSource, która automatycznie analizuje kod źródłowy i generuje szczegółowe raporty na temat jego jakości. Co ważne, obsługuje wiele języków programowania (Java, Python, JavaScript, C# i dziesiątki innych), więc jest przydatna w różnych projektach.

Co robi SonarQube? Po przeanalizowaniu projektu SonarQube przedstawi Ci listę wykrytych błędów (bugs), podatności bezpieczeństwa (vulnerabilities) oraz „code smells”. Każde takie znalezisko jest opisane – dostajesz informację, dlaczego dana konstrukcja jest problematyczna oraz często propozycję, jak to naprawić.

Przykładowo, SonarQube może zgłosić:

  • „Ta metoda ma zbyt wysoką złożoność – rozważ podzielenie jej na mniejsze części”
  • albo „Potencjalny błąd: zmienna x może być null w tym miejscu”.

Dzięki temu nie tylko wiesz co poprawić, ale też dlaczego – co ma wartość edukacyjną dla mniej doświadczonych programistów.

SonarQube działa najczęściej jako serwer z graficznym interfejsem dostępnym przez przeglądarkę. Integruje się z procesem wytwarzania oprogramowania – np. można go podłączyć do systemu CI/CD.

Typowy scenariusz w projekcie wygląda tak, że gdy programista wypycha kod (np. robi git push na repozytorium), uruchamia się analiza SonarQube na serwerze. Jeśli kod nie przejdzie pewnych ustalonych kryteriów jakości (np. zbyt dużo nowych błędów), to build zostanie oznaczony jako niezaliczony. Taki mechanizm nazywa się Quality Gate – zespół ustala, jakie warunki musi spełniać kod (np. brak błędów krytycznych, mniej niż X code smellów o wysokim priorytecie, odpowiednie pokrycie testami), a SonarQube pilnuje tych ustaleń automatycznie.

Dla Ciebie, jako początkującego programisty, ważne jest, że SonarQube pozwala śledzić jakość kodu w czasie. Możesz na bieżąco obserwować na dashboardzie, jak Wasz projekt się zmienia: ile macie otwartych błędów, ile długiego kodu (tzw. technical debt), jaki jest trend – czy nowe zmiany poprawiają jakość, czy może wprowadzają nowe problemy. SonarQube staje się takim centrum dowodzenia do spraw kodu: zaglądasz tam i od razu widzisz, gdzie są słabe punkty, które pliki wymagają uwagi, a które są w porządku.

Warto dodać, że SonarQube ma różne edycje – Community (darmową) i komercyjne – jednak w kontekście nauki i własnych projektów w zupełności wystarcza ta darmowa, która i tak oferuje ogrom możliwości. W kolejnej sekcji zobaczymy, jak łatwo uruchomić SonarQube na własnym komputerze, żeby móc go samodzielnie wypróbować.

SonarLint – statyczna analiza kodu w Twoim IDE

SonarLint – statyczna analiza kodu

SonarLint – statyczna analiza kodu

SonarQube to potężny serwer do analizy kodu w projekcie, ale co z bieżącym pisaniem kodu? Tutaj do akcji wkracza SonarLint – narzędzie, które działa jak Twój prywatny asystent ds. jakości kodu bezpośrednio w IDE (środowisku programistycznym). SonarLint to wtyczka (plugin) dostępna m.in. dla IntelliJ IDEA, Visual Studio, Eclipse czy VS Code, która na bieżąco sprawdza kod, który piszesz, wykorzystując reguły Sonara.

Intellij IDEA statyczna analiza kodu

Intellij IDEA statyczna analiza kodu

➡ ZOBACZ 👉: IDE Zintegrowane środowisko programistyczne

Możesz wyobrazić sobie SonarLint jako takiego anioła stróża nad Twoim edytorem kodu. Gdy tylko napiszesz linijkę, SonarLint ją analizuje i w razie wykrycia problemu od razu podkreśla go lub zaznacza na marginesie. Przykład: wpisujesz fragment, który może doprowadzić do podzielenia przez zero, albo używasz nieużywanej zmiennej – SonarLint natychmiast Cię o tym poinformuje, zanim nawet uruchomisz aplikację. To trochę jak autokorekta, tyle że dla kodu: nie czekasz na kompilację czy testy, od razu dostajesz feedback.

SonarLint analiza kodu

SonarLint analiza kodu

Dla początkujących to szczególnie cenne, bo uczy na żywym organizmie. Każde podkreślenie to okazja, by zadać sobie pytanie: „Dlaczego SonarLint uważa, że to błąd lub zła praktyka?”. Wtyczka zazwyczaj daje krótkie wyjaśnienie. Na przykład może ostrzec: „Ta pętla jest zbyt złożona – rozważ uproszczenie” albo „Używasz == do porównywania napisów w Javie – to błąd, użyj equals() zamiast tego”. Mając taką podpowiedź, możesz od razu poprawić kod i nauczyć się czegoś nowego.

SonarLint potrafi działać samodzielnie, ale najlepsze efekty daje połączenie go z SonarQube. Jeśli Wasz zespół ma SonarQube z ustalonym zestawem reguł jakości, możesz skonfigurować SonarLint, by łączył się z tym serwerem. Wtedy SonarLint będzie korzystał dokładnie z tych samych reguł i konfiguracji co SonarQube, zapewniając spójność. Innymi słowy, to co SonarQube wykryłby na serwerze po wypchnięciu kodu, SonarLint pokaże Ci już podczas pisania – dzięki temu unikniesz wysyłania kodu, który i tak by nie przeszedł kontroli jakości.

SonarLint reguły analizy kodu

SonarLint reguły analizy kodu

Podsumowując, SonarLint to świetne narzędzie do codziennej pracy. Szczególnie, jeśli dopiero się uczysz, warto je zainstalować w swoim IDE. Będziesz popełniać mniej błędów, a przy okazji wyrobisz sobie wrażliwość na jakość kodu. Z czasem wiele rzeczy, na które SonarLint zwraca uwagę, stanie się dla Ciebie oczywistością i przestaniesz je nawet popełniać.

Jak uruchomić SonarQube lokalnie (Docker)

Skoro w teorii wiemy już sporo, czas na praktykę. Pokażemy teraz, jak krok po kroku uruchomić lokalnie serwer SonarQube przy użyciu Dockera. Dzięki temu będziesz mógł/mogła samodzielnie przeanalizować swój projekt i zobaczyć, jak SonarQube ocenia Twój kod. Załóżmy, że masz już zainstalowanego Dockera na swoim komputerze:

  1. Pobierz obraz SonarQube: Otwórz terminal i wykonaj polecenie:
    docker pull sonarqube:latest
    

    Spowoduje to pobranie najnowszej wersji obrazu SonarQube (Community Edition) z Docker Hub. To może chwilę potrwać, bo obraz ma kilkaset megabajtów.

  2. Uruchom kontener SonarQube: Gdy obraz jest pobrany, uruchom SonarQube w kontenerze za pomocą polecenia:
    docker run -d --name sonarqube -p 9000:9000 sonarqube:latest
    

    To polecenie tworzy i uruchamia kontener w tle (-d od detached) o nazwie sonarqube, mapując port 9000 kontenera na port 9000 Twojego komputera. Po kilku sekundach SonarQube powinien wystartować wewnątrz Dockera.

    Uwaga: SonarQube potrzebuje trochę czasu (zazwyczaj kilkadziesiąt sekund do minuty) na pełne uruchomienie, więc nie panikuj, jeśli od razu nie będzie dostępny.

  3. Sprawdź, czy działa: Możesz skorzystać z docker ps -a, aby upewnić się, że kontener SonarQube jest uruchomiony (status Up). Jeśli wszystko przebiegło pomyślnie, czas przejść do kolejnego kroku.
  4. Wejdź na interfejs SonarQube: Otwórz przeglądarkę i przejdź pod adres http://localhost:9000. Powinien ukazać się ekran logowania SonarQube. Domyślne dane logowania to: login: admin, hasło: admin. Po zalogowaniu zobaczysz główny dashboard SonarQube.

    Porada: Jeśli strona nie chce się załadować albo kontener się wyłącza, przyczyną może być zbyt mała pamięć przydzielona dla Dockera. SonarQube jest dość zasobożerny (uruchamia wewnętrznie silnik Elasticsearch). Możesz spróbować ponownie uruchomić kontener z dodatkowym parametrem zwiększającym limity, np. -e SONAR_ES_BOOTSTRAP_CHECKS_DISABLE=true (wyłącza sprawdzanie minimalnej pamięci przez Elasticsearch). Jednak najprostszym sposobem jest upewnienie się, że Docker ma przydzielone co najmniej ok. 2GB RAM.

  5. Analiza własnego projektu: SonarQube sam z siebie niczego nie analizuje, dopóki mu tego nie zlecimy. Jak to zrobić? Najczęściej wykorzystuje się do tego tzw. Sonar Scanner albo wtyczki do narzędzi buildujących (np. Maven, Gradle). Opis pełnej procedury mógłby zająć osobny artykuł 😉, ale w skrócie: musisz dostarczyć SonarQube kod do analizy. Przykładowo, w projekcie Java mavenowym dodaje się plugin Sonara i wykonuje komendę mavenową mvn sonar:sonar, która przeskanuje projekt i wyśle wyniki do naszego działającego serwera SonarQube. Alternatywnie, możesz zainstalować SonarScanner CLI i uruchomić go z parametrami wskazującymi lokalny kod oraz adres serwera. Gdy wykonasz analizę, odśwież stronę SonarQube – powinien pojawić się Twój projekt z wynikami (błędami, metrykami, itp.).

Na potrzeby startu nie musisz od razu analizować dużych projektów. Możesz utworzyć malutki projekt z kilkoma klasami, celowo dodać jakieś błędy (np. zostawić nieużywaną zmienną, może wstrzyknąć gdzieś potencjalnego NPE) i sprawdzić, czy SonarQube je znajdzie. Eksperymentuj śmiało – to lokalna instancja, niczego nie zepsujesz, a nauczysz się, jak narzędzie reaguje na różne konstrukcje w kodzie.

Gdy skończysz zabawę, kontener SonarQube możesz zatrzymać komendą docker stop sonarqube. Jeśli już go nie potrzebujesz, usuń kontener (docker rm sonarqube) oraz obraz (docker rmi sonarqube:latest), żeby zwolnić miejsce – w końcu zawsze możesz go ponownie pobrać później.

Analiza statyczna kodu a code review

SonarQube statyczna analiza kodu, przegląd kodu

Na koniec porozmawiajmy o ważnej kwestii: czy automatyczna analiza statyczna kodu zastępuje code review, czyli manualny przegląd kodu przez innego programistę? Krótka odpowiedź brzmi: nie, ale… doskonale uzupełnia pracę człowieka.

Analiza statyczna jest niezastąpiona w wyłapywaniu wielu oczywistych błędów i niezgodności ze standardami. Działa szybko i systematycznie – przeskanuje każdy plik, każdą linijkę, według zadanych reguł. Jednak automat ma swoje ograniczenia. Narzędzie nie zrozumie kontekstu biznesowego Twojej aplikacji, nie oceni, czy dany algorytm jest optymalny dla rozwiązania problemu, albo czy nazwy funkcji rzeczywiście oddają ich intencje. Tu wkracza ludzki czynnik, czyli code review.

Code review to praktyka, gdzie inny programista (często ktoś bardziej doświadczony, ale niekoniecznie – ważne, że świeżym okiem) przegląda Twój kod. Dzięki temu może wychwycić rzeczy, których maszyna nie złapie: np. czy dany fragment jest czytelny dla człowieka, czy rozwiązanie nie duplikuje funkcjonalności, czy spełnia wymagania zadania. Reviewer może też zobaczyć szerszy obraz: „Hej, a czy przypadkiem ten moduł nie powinien być częścią innej klasy?” – to są uwagi architektoniczne, designowe, których żaden automat nie podpowie.

➡ ZOBACZ 👉: Code Review – Nie wiesz jak pisać lepszy kod? Skup się na code review (przegląd kodu)!

➡ ZOBACZ 👉: Git pull request, GitHub pull request

W idealnym procesie tworzenia oprogramowania łączymy obie metody. Najpierw kod przechodzi automatyczną analizę statyczną (np. właśnie przez SonarQube czy SonarLint u każdego na etapie pisania). Dzięki temu wiele potencjalnych baboli jest już usuniętych. Następnie kod trafia na code review do osoby z zespołu, która nie musi tracić czasu na wytykanie brakującego przecinka czy formatowania, tylko skupia się na meritum. Takie dwustopniowe sito daje najlepsze efekty – kod jest zarówno poprawny pod kątem technicznym, jak i przemyślany pod kątem jakości rozwiązania.

W praktyce zespoły ustalają sobie, co automat ma sprawdzać, a co jest pozostawione dla code review. Przykładowo, można przyjąć zasadę: „Build przejdzie dalej tylko, jeśli SonarQube nie znajdzie błędów krytycznych i bezpieczeństwa oraz nie przekroczymy określonej liczby code smell” – to są twarde kryteria automatyczne. Natomiast podczas code review bardziej patrzymy na logikę, styl, nazewnictwo, zgodność z wymaganiami, itp. Obie formy feedbacku są ważne.

Warto tu wspomnieć, że w ramach mentoringu „Sprawny Programista Java” uczestnicy pracują nad jakością kodu wykorzystując SonarQube oraz regularne code review. Uczą się tym samym, jak efektywnie posługiwać się narzędziami do automatycznej analizy, a jednocześnie doskonalą umiejętność czytania i oceny kodu innych osób. Taka kombinacja rozwija wyczucie czystego kodu i buduje dobre nawyki od początku kariery.

>> Odbierz szkolenie: 
„Od Junior Java Developera do Mida w rekordowym czasie”

Podsumowanie

Statyczna analiza kodu to niezwykle przydatna technika, która pomaga pisać lepszy kod od pierwszych linijek. Narzędzia takie jak SonarQube i SonarLint działają jak dodatkowa para oczu – wychwytują błędy, podpowiadają ulepszenia i uczą dobrych praktyk. Szczególnie dla początkujących programistów stanowią ogromne wsparcie, bo pozwalają unikać typowych potknięć i szybko się na nich uczyć.

Pamiętaj jednak, że automatyczna analiza to nie wszystko. Najlepsze rezultaty osiągniesz, łącząc ją z manualnym code review i ciągłym doskonaleniem swoich umiejętności. Dzięki temu Twój kod będzie nie tylko wolny od oczywistych błędów, ale też dobrze przemyślany i zrozumiały dla innych.

Na koniec zachęcam: wypróbuj samodzielnie SonarQube i SonarLint w swoim projekcie. Zobacz, jakie sugestie da Ci narzędzie i zastanów się nad nimi. Każda poprawka to krok w stronę czystego, profesjonalnego kodu. Powodzenia w analizowaniu i doskonaleniu swojego kodu!

No comments
Share:
Kanban

Kanban

Kanban to prosty, a zarazem skuteczny sposób zarządzania pracą zespołu w metodykach zwinnych. Termin kanban pochodzi z języka japońskiego i oznacza „sygnał wizualny” – nazwa wywodzi się od karteczek używanych pierwotnie w fabryce Toyoty do sygnalizowania zapotrzebowania materiałów.

Dziś Kanban jest szeroko stosowany nie tylko w produkcji, ale także w branży IT, gdzie pomaga zespołom wizualizować pracę, ograniczać liczbę zadań w toku i usprawniać przepływ pracy. Jeśli korzystałeś kiedyś z narzędzia takiego jak Trello do organizacji zadań, to już zetknąłeś się z Kanbanem – z tablicą podzieloną na kolumny typu „Do zrobienia”, „W trakcie”, „Zrobione”.

W tym wpisie wyjaśnię, na czym polega system Kanban, czym są tablice Kanban i jak wygląda przepływ pracy (flow) z uwzględnieniem ograniczania WIP (Work In Progress, praca w toku). Dla lepszego zrozumienia porównamy też Kanban do Scrum, a na koniec zobaczysz przykłady Kanbana w praktyce – opowiem, jak wykorzystujemy tablicę Kanban na co dzień w naszym mentoringu „Sprawny Programista Java”.

System Kanban

Kanban jako system to metodyka zarządzania pracą oparta na ciągłym przepływie zadań. Oznacza to, że praca jest wykonywana w sposób ciągły, bez sztywnych ram czasowych czy iteracji. Zespół stara się, aby zadania płynnie przechodziły przez kolejne etapy procesu – od pomysłu, przez realizację, aż po ukończenie – bez zbędnych przestojów czy kolejek.

Kanban kładzie duży nacisk na transparentność i płynność procesu: wszystkie zadania są widoczne dla całego zespołu, a praca jest „ciągnięta” (pull) przez zespół w miarę dostępności sił przerobowych, zamiast „pchana” odgórnie. Co ważne, Kanban nie narzuca tylu formalnych ról i rytuałów co inne metody (np. brak obowiązkowych Scrum Masterów czy sprintów) – jest elastyczny i łatwo go dostosować do istniejącego sposobu pracy zespołu. Istotne jest jednak przestrzeganie pewnych zasad Kanbana, które służą usprawnianiu procesu, jak np. zasada ograniczania zadań w toku.

WIP (Work In Progress)

WIP (Work In Progress), czyli praca w toku, to liczba zadań, nad którymi zespół pracuje w danym momencie. Jednym z kluczowych elementów systemu Kanban jest ograniczanie WIP – czyli limitowanie liczby zadań, które mogą być jednocześnie rozgrzebane.

Dlaczego to takie ważne? Wyobraź sobie, że każdy członek zespołu łapie naraz kilka tematów – wiele rzeczy jest zaczętych, ale niewiele doprowadzonych do końca. Kanban rozwiązuje ten problem przez wprowadzenie limitów WIP na etapy procesu. Na przykład, możemy ustalić, że w kolumnie „W trakcie” (czyli w fazie realizacji) maksymalnie mogą znajdować się 3 zadania jednocześnie. Gdy kolumna jest zapchana tym limitem, zespół musi najpierw ukończyć istniejące zadania, zanim weźmie nowe. Taka praktyka zapobiega rozpraszaniu uwagi na zbyt wiele rzeczy na raz i pomaga zespołowi skupić się na dowożeniu funkcjonalności do końca.

Ograniczenie WIP uwidacznia też wąskie gardła procesu i maksymalizuje płynność pracy – jeśli w jakiejś kolumnie zaczyna zalegać nadmiar zadań, to sygnał, że mamy potencjalny problem (np. brak zasobów, blokery) i trzeba zareagować. W efekcie praca przepływa szybciej przez system Kanban, a ukończone zadania dostarczane są regularnie, kiedy tylko są gotowe (zamiast czekać na koniec cyklu).

Tablice Kanban

Tablica Kanban (ang. Kanban board) to podstawowe narzędzie tej metody – wizualna reprezentacja pracy zespołu.

Tablica jest podzielona na kolumny, z których każda odzwierciedla określony etap procesu (workflow). Na przykład prosta tablica może mieć trzy kolumny: „Do zrobienia” (Backlog/To Do), „W trakcie” (In Progress) oraz „Zrobione” (Done).

Zadania są reprezentowane przez karty (np. karteczki samoprzylepne lub cyfrowe bilety) przypinane do tablicy – każda karta to jedno zadanie lub element pracy. W miarę postępów karty są przesuwane z kolumny do kolumny, od lewej do prawej, co obrazuje stan realizacji każdego zadania. Taki układ daje natychmiastowy podgląd na to, nad czym zespół teraz pracuje, co jest w kolejce, a co zostało ukończone. Dzięki temu nic nam nie umyka – wszystkie zadania (nawet te drobne) są widoczne czarno na białym na tablicy.

Warto wiedzieć, że Kanban wywodzi się z fizycznych tablic i karteczek – w fabrykach Toyoty używano fizycznych kart kanban do oznaczania zapotrzebowania na komponenty. W środowisku biurowym wiele zespołów przez lata korzystało z tablic korkowych i kolorowych sticky notes przyczepianych w kolumnach Do, Doing, Done.

Obecnie jednak najczęściej używamy cyfrowych tablic Kanban: istnieje wiele narzędzi online (np. Trello, Jira, Asana, ClickUp i inne), które pozwalają zespołom zdalnym i lokalnym współdzielić tablice. Cyfrowa tablica Kanban działa na tej samej zasadzie co fizyczna – przeciągamy wirtualne karteczki między kolumnami. Takie narzędzia często oferują dodatkowe usprawnienia: możliwość przypisania osób do zadań, dodawania opisów, komentarzy, załączników, terminów czy tagów priorytetu.

Tablica Kanban usprawnia pracę zespołu, bo każdy ma bieżący wgląd w status projektu i może łatwo znaleźć to, co powinien robić dalej. Co więcej, tablice Kanban zachęcają do ciągłego doskonalenia procesu – zespół widząc np. że jakaś kolumna często się zapełnia, może zdecydować o zmianie procesu (to nawiązanie do idei kaizen, czyli ciągłego usprawniania).

Podsumowując, tablica Kanban to nie tylko obraz stanu projektu, ale też narzędzie dyscyplinujące: pomaga zespołowi realistycznie dobrać ilość pracy na dany moment i dowozić zadania do końca.

Kanban a Scrum

Skoro mowa o metodykach zwinnych, pewnie zastanawiasz się, czym Kanban różni się od Scrum – w końcu obie nazwy często pojawiają się razem. Scrum i Kanban to dwa popularne podejścia Agile, które mają wspólny cel (usprawnić pracę zespołu i dostarczanie wartości), ale realizują go nieco inaczej.

Scrum opiera się na pracy w iteracjach czasowych (sprintach), z góry ustalonych rolach (Scrum Master, Product Owner, zespół deweloperski) i rytuałach (planowanie sprintu, daily stand-up, retrospektywy itp.).

Kanban natomiast stawia na ciągły przepływ zadań i brak sztywnych struktur – nie definiuje narzuconych ról ani ceremonii, zmiany w zadaniach mogą następować na bieżąco, a zespół sam decyduje, jak organizować swoją pracę.

Poniżej kilka konkretnych różnic między Scrum a Kanban:

  • Cykle pracy: Scrum działa w sprintach (np. tygodniowych lub dwutygodniowych), podczas gdy Kanban nie ma sprintów – zadania są dostarczane na bieżąco, ciągle, gdy tylko zostaną ukończone.
  • Zarządzanie zmianą: W Scrumie zespół stara się nie zmieniać zakresu zadań w trakcie trwania sprintu, natomiast w Kanbanie priorytety mogą być aktualizowane w dowolnym momencie – nowe zadania trafiają na tablicę, gdy jest na nie miejsce (np. gdy inne zadanie zostanie ukończone).
  • Role i zasady: Scrum narzuca formalne role (m.in. Scrum Master, Product Owner) i z góry określony proces, a Kanban nie wymaga żadnych konkretnych ról ani ceremonii – można go wprowadzić w zespole bez reorganizacji ról, zaczynając od wizualizacji obecnej pracy i stopniowego wprowadzania usprawnień.

➡ ZOBACZ 👉: Agile vs Waterfall – Metodyki zwinne w praktyce dla początkujących

➡ ZOBACZ 👉: Scrum – co to jest i jak działa? Kompletny przewodnik dla początkujących

Scrumban

W praktyce nie trzeba wybierać „Scrum czy Kanban” – oba podejścia można łączyć i czerpać z nich to, co najlepsze. Istnieje nawet termin Scrumban na hybrydowe wykorzystanie Scruma i Kanban.

Kanban dobrze uzupełnia Scrum, dodając mu elastyczności i przejrzystości, natomiast Scrum dodaje Kanbanowi ram czasowych i akcent na regularne planowanie oraz retrospekcje. Oba podejścia służą zespołom Agile i tak naprawdę mają zbliżone wartości (jak współpraca, transparentność, nastawienie na dostarczanie wartości i usprawnianie procesu). To, które elementy zastosujesz, zależy od potrzeb projektu i zespołu.

A teraz zobaczmy, jak wygląda Kanban w praktyce na konkretnym przykładzie.

Kanban – przykłady

Najlepiej zrozumieć Kanban obserwując go w działaniu. Posłużmy się przykładem z naszego programu mentoringowego „Sprawny Programista Java”.

Pracujemy z kursantami w tygodniowych sprintach (Scrum) – co tydzień planujemy zadania do realizacji i ustalamy cele – ale na co dzień do zarządzania zadaniami używamy tablicy Kanban w Asanie. Dlaczego? Bo tablica Kanban daje nam świetną wizualizację postępów i elastyczność działania na bieżąco, co doskonale wspiera tygodniowy rytm pracy.

Kanban tablica

Jak widzisz na powyższej tablicy, wszystkie zaplanowane zadania na dany tydzień znajdują się w kolumnie Backlog/To do, skąd następnie są podejmowane przez kursanta i mentorów do realizacji. Gdy nad czymś zaczynamy pracować, karta zadania trafia do kolumny In design lub od razu In progress – w zależności od tego, czy wymaga najpierw przygotowania (np. zaplanowania rozwiązania, napisania szkicu dokumentacji) czy od razu przechodzi do implementacji. W kolumnie In progress widać zadania będące aktualnie na warsztacie. Po ukończeniu kodowania/pracy nad zadaniem, karta przechodzi do Testing, gdzie czeka na sprawdzenie – mentor może np. przejrzeć kod, przetestować funkcjonalność lub omówić rozwiązanie z kursantem. Jeśli wszystko jest OK, zadanie trafia do Done.

Taki przepływ zadań jest bardzo przejrzysty – na pierwszy rzut oka widać, ile rzeczy jest do zrobienia, co się robi, a co już zrobione. Używamy też tego podejścia, by uczyć dobrych nawyków: zachęcamy kursantów, by nie rozpraszać się na zbyt wiele zadań jednocześnie. Jeśli widzimy, że ktoś ma już kilka zadań w toku, najpierw skupiamy się na domknięciu któregoś z nich (to dokładnie idea ograniczania WIP w praktyce!). Dzięki temu praca posuwa się naprzód sprawnie, a na koniec tygodnia – sprintu – możemy świętować ukończenie konkretnych zadań, zamiast mieć kilka rozgrzebanych tematów.

>> Odbierz szkolenie: 
„Od Junior Java Developera do Mida w rekordowym czasie”

Kanban sprawdza się w tym realnym scenariuszu doskonale. Łączymy tutaj zalety Scruma i Kanbana – z jednej strony mamy krótki cykl sprintów (co tydzień plan, przegląd postępów, retro), z drugiej strony na bieżąco zarządzamy zadaniami Kanbanowo na tablicy, co daje nam dużą elastyczność. Gdyby pojawiło się nowe zadanie lub zmienił się priorytet w trakcie tygodnia, łatwo je dorzucić do Backlogu i zacząć nad nim pracę (o ile mamy moce przerobowe), nie czekając do następnego sprintu. Tablica Kanban w Asanie pełni więc rolę naszego kompasu w codziennej pracy – każdy widzi, co jest do zrobienia i co już zostało zrobione, a postępy są transparentne. To bardzo motywujące i wygodne, zarówno dla mentorów, jak i dla uczestników programu.

Mam nadzieję, że ten przykład pokazał Ci, jak Kanban można wykorzystać w praktyce nawet w małych, edukacyjnych projektach. Oczywiście Kanban znajduje zastosowanie w przeróżnych branżach – od zespołów software’owych, przez działy marketingu, po organizowanie własnej nauki czy projektów hobbystycznych. To uniwersalne narzędzie do ogarniania pracy tam, gdzie chcemy zachować przejrzystość i kontrolę nad zadaniami.

A jakie są Twoje doświadczenia z Kanbanem? Masz pytania albo chcesz dowiedzieć się więcej? Daj znać w komentarzu pod wpisem – chętnie podyskutuję i pomogę. Jeśli dopiero zaczynasz, nie krępuj się pytać – nie ma głupich pytań. Powodzenia w usprawnianiu swojej pracy i do zobaczenia przy kolejnych wpisach! 😊

No comments
Share:
Scrum, metodyki zwinne

Scrum – co to jest i jak działa? Kompletny przewodnik dla początkujących

Scrum – co to jest i jak działa?

Wyobraź sobie: pracujesz nad pierwszym projektem IT. Wymagania ciągle się zmieniają, zespół tonie w chaotycznych zadaniach, a terminy gonią. Brzmi znajomo? 🕒 Scrum może być rozwiązaniem tego problemu.

W tym wpisie w prosty sposób wyjaśnimy:

  • Scrum – co to jest i jak działa.
  • Dowiesz się, skąd się wziął Scrum, czym różni się Scrum i Agile,
  • poznasz metodyki zwinne w kontekście Scruma
  • oraz wszystkie jego elementy: role, artefakty i ceremonie.

Wszystko to zilustrujemy praktycznymi przykładami (bez żargonu!), abyś jako początkujący developer zrozumiał, jak Scrum wygląda w prawdziwych projektach. Zaczynajmy!

Czym jest Scrum? Definicja w kontekście metodyk zwinnych

Scrum to lekka metodyka (framework) zarządzania projektami należąca do tzw. metodyk zwinnych (Agile). Mówiąc prościej – jest to zbiór zasad organizacji pracy zespołu, który pomaga efektywnie tworzyć produkty w szybko zmieniającym się otoczeniu. Według oficjalnego Scrum Guide (przewodnika po Scrumie, dostępnego także po polsku) Scrum definiuje ramy postępowania: określa role w zespole, wydarzenia (spotkania) i artefakty (dokumenty/elementy pracy), które razem tworzą spójny proces. Wszystkie te elementy opierają się na zasadach Agile – czyli zwinnego podejścia do tworzenia produktów.

Agile vs Scrum – czy to to samo?

Agile vs Scrum – czy to to samo? Nie do końca.

Agile to pewna filozofia, zestaw wartości i zasad (opisanych w Manifeście Agile z 2001 roku), które kładą nacisk na elastyczność, współpracę z klientem, częste dostarczanie działającego produktu i gotowość na zmiany. Scrum natomiast jest jednym z konkretnych sposobów (frameworków) realizacji tych wartości w praktyce. Można powiedzieć, że Agile to podejście (mindset), a Scrum to metodyka Scrum – praktyczny framework z jasno zdefiniowanymi regułami opartymi o idee Agile. Oprócz Scruma istnieją też inne metodyki zwinne (np. Kanban, Extreme Programming), ale to Scrum jest zdecydowanie najpopularniejszy w projektach IT.

Skąd nazwa „Scrum”? Termin pochodzi z rugby – tam „scrum” to formacja młyna, gdy cała drużyna skupia się i współpracuje, żeby przejąć piłkę. Podobnie w projektach Scrum cały zespół jednoczy siły, by osiągnąć wspólny cel. Twórcami Scruma są Jeff Sutherland i Ken Schwaber, którzy w latach 90. opracowali te zasady, aby usprawnić wytwarzanie oprogramowania. Dziś Scrum jest stosowany nie tylko w software, ale i w wielu innych branżach wszędzie tam, gdzie praca wymaga współpracy zespołowej i szybkiego reagowania na zmiany.

Na czym polega Scrum? W Scrumie projekt dzielimy na krótkie, stałe cykle pracy zwane sprintami (o nich za chwilę). Zespół w trakcie każdego sprintu dostarcza działający fragment produktu (tzw. Przyrost). Kluczowe jest częste sprawdzanie postępów i dostosowywanie planu – dzięki temu mamy stałą kontrolę nad projektem i możemy szybko reagować na nieprzewidziane komplikacje. Brzmi abstrakcyjnie? Zaraz przejdziemy do konkretów – omówimy role w Scrumie, artefakty i ceremonie scrumowe, a potem zobaczysz przykład działania Scruma w praktyce.

➡ ZOBACZ 👉: Agile vs Waterfall – Metodyki zwinne w praktyce dla początkujących

➡ ZOBACZ 👉: Kanban

 

Role w Scrumie: kto jest kim w zespole

W klasycznym Scrumie wyróżniamy trzy główne role w zespole scrumowym: Product Owner, Scrum Master oraz Zespół Deweloperski (czyli deweloperzy tworzący produkt). Każda z tych ról ma inne zadania, ale dopiero współpraca wszystkich trzech daje pełnię efektywności Scruma.

Product Owner (Właściciel Produktu)

Product Owner to osoba odpowiedzialna za wizję produktu i maksymalizację jego wartości. Mówi się, że Product Owner odpowiada za “co?” – czyli co zespół ma stworzyć.

Do jej głównych zadań należy m.in.:

  • Zarządzanie backlogiem produktu – tworzenie i aktualizowanie listy funkcji/zadań (backlogu), które muszą zostać wykonane. PO ustala priorytety: decyduje, które funkcjonalności są najważniejsze i w jakiej kolejności będą realizowane.
  • Reprezentowanie interesu klienta/biznesu – Product Owner ściśle współpracuje z interesariuszami (klientami, użytkownikami, biznesem) i zbiera od nich wymagania oraz feedback. Dba, by zespół rozumiał potrzeby biznesowe i by produkt rozwijał się we właściwym kierunku.
  • Określanie celu produktu – wyznacza wizję i długofalowy cel (co osiągniemy w produkcie), dzięki czemu zespół wie, do czego dąży.
  • Akceptacja wyników pracy – sprawdza ukończone elementy produktu. Jeśli coś nie spełnia wymagań, Product Owner może nie uznać zadania za skończone i wróci ono do poprawy.

Przykład: Jeśli tworzymy aplikację do zamawiania jedzenia, Product Ownerem może być osoba z działu biznesowego firmy dostawczej. Decyduje ona, że na początku najważniejsze są funkcje rejestracji użytkownika i przeglądania menu restauracji, a płatności online mogą poczekać na później. Na bieżąco zbiera opinie od testujących użytkowników i aktualizuje Product Backlog (listę rzeczy do zrobienia), aby jak najlepiej dopasować produkt do potrzeb rynku.

Scrum Master

Scrum Master to opiekun procesu i zespołu – można go nazwać facylitatorem (osobą ułatwiającą pracę). Wbrew nazwie Scrum Master (co to za rola?) nie jest „mistrzem” rządzącym zespołem, ani typowym kierownikiem projektu. To raczej mentor i coach, który dba o to, by Scrum był rozumiany i stosowany właściwie. Jego motto to służebne przywództwo – działa w tle, pomagając zespołowi świecić.

Główne obowiązki Scrum Mastera to:

  • Pilnowanie procesu – Scrum Master zna Scrum jak własną kieszeń. Pilnuje, by zespół trzymał się ustalonych zasad frameworku (np. odbywał ceremonie scrumowe, przestrzegał ustalonego timeboxu spotkań). Jeśli zespół zbacza z kursu Scruma, SM delikatnie koryguje.
  • Usuwanie przeszkód – gdy zespół napotka przeszkodę (tzw. impediment), Scrum Master interweniuje, by ją usunąć. Np. jeśli programiści blokują się, bo brakuje im dostępu do serwera, SM załatwia potrzebne dostępy. Dzięki temu deweloperzy mogą skupić się na pracy.
  • Wspieranie komunikacji i współpracy – SM dba o dobrą atmosferę i komunikację w zespole. Upewnia się, że wszyscy się rozumieją, organizuje warsztaty, rozmowy, mediacje jeśli trzeba. Pomaga Product Ownerowi i deweloperom współpracować efektywnie (np. uczy PO, jak dobrze formułować wymagania, a zespół – jak estymować zadania).
  • Coaching i edukacja – uczy zespół i organizację zasad Scruma i postaw Agile. Często początkujący zespołowi developerzy potrzebują wsparcia, by zrozumieć filozofię zwinności – tu wkracza Scrum Master. Wskazuje obszary do usprawnienia (np. „Może spróbujemy innego sposobu prowadzenia Daily Scruma, bo teraz za długo schodzi?”).
  • Chronienie zespołu – przed zakłóceniami z zewnątrz. Np. jeśli szef chce dorzucić nowe zadanie w środku sprintu, SM przypomina, że nie wolno zmieniać zakresu sprintu i przekonuje go do zaczekania do następnego planowania.

Scrum Master to rola często poszukiwana na rynku – wiele osób robi specjalny kurs Scrum Master lub certyfikat (PSM, CSM), aby się przygotować. Jednak w praktyce najlepszym nauczycielem jest doświadczenie pracy z zespołem.

Scrum Master – co to daje zespołowi? Dobrze pełniona rola SM sprawia, że zespół pracuje płynnie, uczy się na bieżąco i stale poprawia swoje działania. Scrum Master to taki cichy bohater projektu – jeśli wszystko idzie świetnie, często jego zasługa pozostaje niewidoczna, ale gdyby go zabrakło, szybko zrobiłby się bałagan.

Zespół Deweloperski (Development Team)

Zespół deweloperski to grupa specjalistów, którzy wykonują właściwą pracę nad produktem – programują, projektują, testują, itp. Mówiąc krótko, to deweloperzy (nie tylko programiści, ale też np. testerzy, UX designerzy, analitycy – wszyscy, którzy są potrzebni do dostarczenia działającego produktu).

W Scrum Guide od 2020 roku po prostu nazywa się ich Deweloperami, a cały Scrum Team tworzą: Deweloperzy + Product Owner + Scrum Master. Jednak często nadal używa się określenia „zespół developerski” dla grupy wykonawczej.

Cechy zespołu deweloperskiego w Scrumie:

  • Samoorganizacja – zespół sam decyduje jak wykona pracę. Nie ma kierownika rozdającego zadania każdego dnia. To deweloperzy wspólnie planują, dzielą się zadaniami zgodnie z kompetencjami i pomagają sobie nawzajem. Mają sporą autonomię w wyborze metod realizacji celu sprintu.
  • Multidyscyplinarność – zespół ma wszystkie kompetencje potrzebne, by dostarczyć ukończony Przyrost produktu. Oznacza to, że w zespole są osoby o różnych umiejętnościach (np. frontend, backend, tester, grafik). Dzięki temu nie muszą czekać na pracę kogoś spoza zespołu – mogą zrealizować cały wycinek produktu samodzielnie.
  • Wspólna odpowiedzialność – w Scrumie mówimy „cały zespół jest odpowiedzialny za dostarczenie wartości w sprincie”. Nie ma podziału na „moja część jest zrobiona, reszta mnie nie obchodzi”. Jeśli np. tester widzi, że programista nie wyrabia, może pomóc mu w mniej krytycznych zadaniach, i odwrotnie. Sukcesy i porażki należą do wszystkich razem.
  • Mały, zwinny zespół – zazwyczaj od 3 do 9 osób. Tyle wystarczy, by wykonać sporo pracy w ciągu sprintu, a jednocześnie grupa pozostaje na tyle mała, by łatwo się komunikować i współpracować. Gdy zespół jest większy, Scrum sugeruje podzielenie go na kilka mniejszych, pracujących równolegle (koordynowanych ewentualnie metodyką Scaled Scrum, ale to temat na inny artykuł).

Przykład: Wróćmy do projektu aplikacji do zamawiania jedzenia. Zespół deweloperski może składać się z 5 osób: dwóch programistów backend, jednego programisty frontend, jednego testera i jednego projektanta UI. Wszyscy razem planują prace na sprint i razem odpowiadają za dowiezienie nowych funkcjonalności (np. w tym sprincie logowanie i rejestracja użytkownika). Każdy robi swoją część, ale jeśli frontendowiec skończy wcześniej, może pomóc w testach lub dorzucić coś do backendu pod okiem kolegi – byle wspólny cel sprintu został osiągnięty.

Artefakty Scruma: co produkujemy i czym zarządzamy

W Scrumie mamy trzy główne artefakty – to oficjalne elementy procesu, które służą do zarządzania pracą i produktem. Należą do nich: Product Backlog (Backlog Produktu), Sprint Backlog (Backlog Sprintu) oraz Increment (Przyrost).

Brzmi tajemniczo? Zaraz się rozjaśni, bo każdy z tych artefaktów to po prostu nazwana lista lub produkt pracy.

Product Backlog (Backlog Produktu)

Product Backlog to nic innego jak lista wszystkiego, co trzeba zrobić w produkcie. Można go porównać do obszernej listy zadań i funkcjonalności, które muszą zostać zaimplementowane, aby zrealizować wizję Product Ownera.

Backlog Produktu jest uporządkowany – oznacza to, że elementy (zwane elementami backlogu lub PBI od Product Backlog Item) są ułożone według priorytetu. Na górze listy znajdują się te najważniejsze dla biznesu rzeczy do zrobienia, a na dole mniej istotne lub dalsze pomysły.

Cechy Product Backlogu:

  • Jest dynamiczny – backlog ciągle żyje. Product Owner regularnie go aktualizuje: dodaje nowe pomysły, usuwa nieaktualne, zmienia priorytety w odpowiedzi na feedback czy zmiany rynkowe. Nie ma czegoś takiego jak „zamrożony” zakres – backlog ewoluuje wraz z rozwojem produktu.
  • Zawiera wszystko, co dodaje wartość – każdy element backlogu powinien przekładać się na jakąś wartość dla użytkownika lub rozwój produktu. Najczęściej zapisuje się je w formie tzw. historyjek użytkownika (user stories) opisujących funkcje z perspektywy użytkownika, np.: „Jako zalogowany użytkownik chcę mieć możliwość dodania produktu do ulubionych, aby szybko znaleźć go później.” Ale backlog może też zawierać zadania techniczne, poprawki błędów, wymagania niefunkcjonalne (np. zwiększenie bezpieczeństwa, wydajności).
  • Jest jedynym źródłem prawdy o tym, co do zrobienia – w Scrumie ustalamy, że zespół bierze prace tylko z Product Backlogu. Jeśli pojawia się nowy pomysł czy wymaganie – musi trafić na backlog, inaczej oficjalnie nie istnieje dla zespołu. To zapobiega wprowadzaniu „zadań tylnymi drzwiami”.

Przykład Backlogu:
Dla aplikacji do jedzenia backlog produktu może wyglądać tak (uproszczony):

  1. Funkcja rejestracji i logowania użytkownika (wysoki priorytet)
  2. Przegląd menu restauracji (wysoki priorytet)
  3. Koszyk zamówień (średni priorytet)
  4. Płatność online (średni)
  5. Powiadomienia o statusie dostawy (niższy priorytet)
  6. System ocen i recenzji restauracji (pomysł na przyszłość, niski priorytet)
    … i tak dalej.

Product Owner dba, by ta lista była zawsze aktualna. Zanim rozpocznie się sprint, PO może doprecyzować topowe elementy (np. opisać dokładniej kryteria akceptacji dla funkcji logowania) i ułożyć priorytety zgodnie z tym, co w danym momencie jest najbardziej wartościowe.

Sprint Backlog (Backlog Sprintu)

Gdy rozpoczynamy Sprint (o sprintach za chwilę więcej), zespół wybiera z górnej części Product Backlogu tyle zadań, ile jest w stanie zrealizować w trakcie trwania sprintu. Wybrane elementy tworzą Sprint Backlog – czyli listę zadań na bieżący sprint. Sprint Backlog to wycinek Product Backlogu, na którym zespół skupia się w danym, krótkim cyklu czasu.

Co zawiera Sprint Backlog?

  • Elementy Product Backlogu wybrane do realizacji w sprincie – np. jeśli sprint ma trwać 1 tydzień, zespół może wziąć 3 najważniejsze elementy backlogu produktowego: “Logowanie”, “Rejestracja”, “Reset hasła” (to przykładowe funkcje do zrobienia). Te elementy stają się zobowiązaniem zespołu na sprint.
  • Plan realizacji – same duże elementy to nie wszystko. Zespół dzieli je na konkretne zadania techniczne potrzebne do ukończenia tych funkcji. Np. dla funkcji „Logowanie” zadaniami mogą być: Stworzyć ekran logowania (frontend), Endpoint API do autoryzacji (backend), Połączenie z bazą danych użytkowników, Testy jednostkowe logowania, itp. Sprint Backlog zawiera więc zarówno co robimy, jak i zarys jak to zrobimy w sprincie.
  • Cel Sprintu – bardzo ważny element Sprint Backlogu. Podczas planowania zespół formułuje Sprint Goal, czyli zdanie podsumowujące po co robimy ten sprint, jaką wartość osiągniemy. Np. „Celem sprintu jest umożliwienie nowemu użytkownikowi założenia konta i zalogowania się do systemu”. Cel Sprintu jednoczy zespół i pomaga podejmować decyzje (jeśli coś nie służy osiągnięciu celu – może poczekać). Sprint Goal jest zapisany i widoczny dla wszystkich.

Kto zarządza Sprint Backlogiem?

W trakcie sprintu Sprint Backlog należy już do zespołu developerskiego. To deweloperzy decydują, jak rozdzielić zadania, w jakiej kolejności je realizować podczas sprintu i czy zakres jest realny do dowiezienia.

W trakcie trwania sprintu nie dodajemy nowych elementów do Sprint Backlogu – jest on „zamknięty” na zmiany z zewnątrz, chyba że zespół sam oceni, że da radę wziąć coś jeszcze lub w wyjątkowej sytuacji porzuci jakiś element (ale to rzadkie i wymaga rozmowy z Product Ownerem). Ta stabilność Sprint Backlogu gwarantuje, że zespół ma spokojne warunki do pracy nad uzgodnionym zakresem.

Przykład Sprint Backlogu:
Załóżmy, że zaczynamy sprint 1-tygodniowy dla naszej aplikacji. Na Planowaniu Sprintu zespół i PO uzgodnili Sprint Goal: „Użytkownik może założyć konto i zalogować się”. Wybrali z backlogu produktowego dwa elementy: Rejestracja konta i Logowanie. Podzielili to na konkretne zadania:

  • Frontend: formularz rejestracji (HTML/CSS), walidacja danych na froncie
  • Backend: endpoint rejestracji (przyjmowanie danych, zapis do bazy), endpoint logowania (sprawdzenie hasła, token sesji)
  • Baza danych: tabela użytkowników, szyfrowanie hasła
  • Testy: scenariusz rejestracji z poprawnymi danymi, z błędnymi danymi, test logowania z poprawnym/niepoprawnym hasłem
    Wszystkie te zadania trafiają na tablicę sprintu (np. w Jirze lub na fizycznej tablicy w kolumnach “Do zrobienia / W trakcie / Zrobione”). Teraz zespół ma jasny plan na najbliższy tydzień pracy.

Increment (Przyrost Produktu)

Przyrost (Increment) to działający produkt (lub jego część) powstały w wyniku ukończenia zadań w sprincie, spełniający ustalone kryteria jakości. Innymi słowy: na koniec każdego sprintu powinniśmy uzyskać przyrost produktu, czyli nową wersję aplikacji zawierającą wszystkie ukończone w danym sprincie elementy backlogu + wszystkie poprzednie już istniejące funkcjonalności. Każdy przyrost musi być ukończony (ang. Done) – gotowy do potencjalnego wydania lub demonstracji użytkownikom.

W Scrumie przyrost ma kilka ważnych cech:

  • Potencjalnie wydawalny – nawet jeśli nie wypuszczamy co sprint nowej wersji na produkcję, to przyrost mógłby zostać udostępniony użytkownikom i powinien przynosić im jakąś wartość. Oznacza to, że wszystkie ukończone funkcje są w pełni przetestowane, zintegrowane ze sobą i działają bez błędów. Nie zostawiamy „rozgrzebanych” funkcjonalności na pół gwizdka.
  • Kumuluje się – każdy kolejny przyrost zawiera w sobie poprzednie. To jak kolejne warstwy nakładane na produkt. Np. po pierwszym sprincie mamy działające logowanie. Po drugim sprincie dodajemy do tego działający koszyk zamówień plus nadal działa logowanie z poprzedniego. Produkt rośnie z iteracji na iterację.
  • Spełnia Definition of Done – zespół ustala sobie Definicję Ukończenia (Definition of Done), czyli listę kryteriów, jakie musi spełniać każda ukończona funkcjonalność/przyrost (np. „Kod przeglądnięty przez innego developera, przeszły wszystkie testy, jest uzupełniona dokumentacja, wdrożone na środowisko testowe” itp.). Przyrost musi spełniać te warunki – to gwarantuje, że „done” znaczy naprawdę done. Dzięki temu mamy zaufanie, że przyrost jest jakościowy.

Przykład przyrostu:
Po tygodniowym sprincie nasz zespół dostarczył przyrost aplikacji do zamawiania jedzenia w postaci modułu rejestracji i logowania. Mamy więc działającą apkę (może to jeszcze prosty prototyp) gdzie nowy użytkownik może się zarejestrować, a potem zalogować i zobaczy np. pusty ekran główny (bo reszty funkcji jeszcze nie zaimplementowano). Ten przyrost został przetestowany – rejestracja i logowanie działają z poprawnym i błędnym hasłem, dane zapisują się w bazie, hasło jest szyfrowane, interfejs wyświetla komunikaty o błędach. To działający kawałek produktu. Zespół może go zademonstrować interesariuszom podczas Sprint Review i ewentualnie nawet przekazać do wewnętrznych testów użytkownikom. W następnym sprincie ten przyrost zostanie rozbudowany o kolejne funkcje (np. przegląd menu restauracji) – i tak produkt rośnie aż do finału.

Ceremonie scrumowe: wydarzenia w każdym sprincie

Scrum jest iteracyjny i inkrementalny, co oznacza, że praca toczy się w powtarzających się cyklach (sprintach), a każdy cykl kończy się przyrostem produktu. Aby utrzymać rytm i zapewnić przejrzystość, Scrum definiuje zestaw regularnych wydarzeń (ceremonii) w każdym sprincie. Te ceremonie służą inspekcji i adaptacji – czyli regularnemu przyglądaniu się pracy i dostosowywaniu planu.

Poznajmy je w kolejności, w jakiej odbywają się w trakcie sprintu.

Sprint

Sprint to podstawowy cykl pracy w Scrumie. Sprint to ustalony, stały przedział czasu, w którym zespół realizuje określone zadania, dążąc do wyznaczonego celu sprintu i wytwarza przyrost produktu. Każdy sprint ma z góry ustaloną długość (tzw. timebox) – najczęściej 1 lub 2 tygodnie, choć dopuszczalne są sprinty do 4 tygodni. Ważne, by długość sprintu była stała przez cały projekt (np. zawsze 2 tygodnie), co nadaje rytm pracy.

Sprint można porównać do małego projektu w projekcie: ma etap planowania, wykonania i zakończenia z podsumowaniem. Kończy się konkretnym wynikiem (przyrostem). Gdy jeden sprint się kończy, zaczyna się kolejny – i tak aż do ukończenia całego przedsięwzięcia. Ta cykliczność pozwala zespołowi często się synchronizować i korygować kurs.

W Sprincie obowiązują pewne zasady:

  • Nie zmieniamy celu ani zakresu w trakcie sprintu – po to sprint jest krótki, by wytrzymać bez zmian. Jeśli pojawią się nowe priorytety, trafią do backlogu i poczekają na następny sprint. Dzięki temu zespół może skupić się na ustalonej pracy.
  • Każdy sprint ma Sprint Goal – czyli jasno określony cel biznesowy/produktowy do osiągnięcia w ramach tego sprintu (o którym wspomnieliśmy przy Sprint Backlogu). Wszystkie prace w sprincie mają służyć realizacji tego celu.
  • Timebox jest święty – sprint ma trwać np. 1 tydzień i koniec, nie przedłużamy go jeśli nie zdążymy ze wszystkim. Niezrealizowane elementy wracają do backlogu produktu. Stały rytm buduje dyscyplinę i przewidywalność.
  • Sprint to też wydarzenie – formalnie Scrum Guide traktuje sam Sprint jako jedno z wydarzeń (obok Planowania, Daily, itp.), które trwa od rozpoczęcia do zakończenia. W tym czasie odbywają się pozostałe ceremonie.

Planowanie Sprintu (Sprint Planning)

Kiedy: Na początku każdego sprintu (dzień 1, sprintu).
Kto uczestniczy: Cały zespół Scrum: Product Owner, Scrum Master i zespół developerski.
Cel spotkania: Zaplanować, co zespół zrealizuje w bieżącym sprincie i jak podejdzie do wykonania tej pracy.

Mówiąc prościej – Sprint Planning rozpoczyna nowy sprint ustaleniem zakresu i celu.

Przebieg Sprint Planning:

  1. PO przedstawia priorytety – Product Owner przygotowuje przed spotkaniem spis najważniejszych elementów z backlogu, gotowych do omówienia. Na planowaniu Scrum Master dba, by spotkanie przebiegło sprawnie. PO omawia krótko każdy priorytetowy element: na czym polega dana funkcjonalność, czemu jest ważna, jakie są wymagania.
  2. Zespół zadaje pytania i ocenia – Deweloperzy dopytują o szczegóły, szacują mniej więcej złożoność prac (często używając estymacji w Story Pointach lub “koszulkach” S/M/L – choć same estymacje to osobny temat). Na tej podstawie zespół ocenia, ile pracy jest w stanie wziąć do sprintu biorąc pod uwagę swój velocity (prędkość – ile zwykle robili w poprzednich sprintach) i dostępność (np. ktoś ma urlop w tym sprincie).
  3. Wybór zakresu i Cel Sprintu – Z listy omawianych elementów backlogu zespół wybiera te, które weźmie do Sprint Backlogu. Decyzja należy do zespołu developerskiego – to oni mówią „tyle damy radę zrobić”. Jeśli PO chciałby więcej, a zespół mówi, że to nierealne – trzeba negocjować i ustalić realny zakres. Gdy już lista elementów na sprint jest znana, wspólnie formułowany jest Sprint Goal (cel sprintu), który łączy te elementy w jeden wspólny mianownik. Np. „Dostarczymy podstawową funkcjonalność koszyka, aby użytkownik mógł złożyć zamówienie”.
  4. Tworzenie planu – zadania – Zespół następnie zastanawia się jak zrealizować wybrane elementy. Rozbija je na mniejsze zadania techniczne, które potem będą wykonywane w sprincie. To też dzieje się wspólnie – deweloperzy dzielą się wiedzą, identyfikują potrzebne prace (programowanie, testy, konfiguracja itd.). Wszystkie te zadania zapisujemy (np. w narzędziu do trackingu zadań). W efekcie powstaje Sprint Backlog (lista prac na sprint), o którym mówiliśmy wcześniej.

Timebox:
Planowanie sprintu jest ograniczone czasowo. Dla sprintu miesięcznego maksymalnie 8 godzin, dla krótszych proporcjonalnie mniej (np. ~4h dla 2-tygodniowego, ~2h dla tygodniowego sprintu). To nie znaczy, że zawsze tyle trwa – doświadczone zespoły potrafią zaplanować sprint w krótszym czasie. Chodzi o to, by nie przekraczać tego limitu i nie planować w nieskończoność.

Przykład:
Rozpoczynamy nowy sprint 2-tygodniowy w projekcie e-commerce. Na Sprint Planningu Product Owner proponuje, by zająć się funkcją koszyka i składania zamówienia, bo to kolejny priorytet po logowaniu. Zespół omawia: funkcja koszyka (dodawanie produktów do koszyka, edycja, usuwanie) i funkcja złożenia zamówienia (formularz adresu dostawy, wybór płatności). Wspólnie uznają, że zakres jest dość duży – może za duży na jeden sprint. Ustalają więc, że wezmą tylko koszyk, a składanie zamówienia zostawią na następny sprint, żeby zdążyć. Formułują Cel Sprintu: “Użytkownik może dodawać, usuwać i edytować produkty w koszyku”. Dzielą pracę na zadania: backend API do zarządzania koszykiem, interfejs koszyka na frontendzie, aktualizacja stanu koszyka, testy, itp. Po ~1-3 godzinach wszystko jest jasne i startuje sprint.

Daily Scrum (Codzienny Scrum)

Kiedy: Codziennie, o stałej porze, w trakcie trwania sprintu (np. każdego dnia rano).
Kto uczestniczy: Zespół developerski. (Product Owner i Scrum Master mogą uczestniczyć, ale nie muszą – często Scrum Master bywa, zwłaszcza z początku, aby nauczyć zespół dobrych nawyków. PO bywa, jeśli zespół tego chce, ale nie powinien dominować spotkania).
Cel spotkania: Zsynchronizować zespół i zaplanować pracę na najbliższy dzień, by przybliżyć się do celu sprintu. Daily Scrum służy szybkiemu monitorowaniu postępów i wczesnemu wykrywaniu problemów.

Przebieg Daily Scrum:
Jest to bardzo krótkie spotkanie (maks 15 minut), często prowadzone na stojąco (stąd inna nazwa „daily stand-up”), aby zachować zwięzłość.

Klasyczna formuła Daily to odpowiedź każdego członka zespołu na trzy pytania:

  • Co zrobiłem wczoraj, aby przybliżyć zespół do celu sprintu?
  • Co planuję zrobić dzisiaj, aby przybliżyć zespół do celu sprintu?
  • Czy napotkałem jakieś przeszkody (impedimenty), które utrudniają mi pracę?

Ta struktura pomaga uporządkować wypowiedzi. Dzięki temu wszyscy wiedzą, kto nad czym pracuje, czy jesteśmy zgodnie z planem, i czy ktoś potrzebuje pomocy (jeśli pojawia się przeszkoda, Scrum Master po Daily podejmuje działania, by ją usunąć, a zespół może pomóc koledze w problemie).

Warto podkreślić, że Daily Scrum nie jest statusem dla kierownika – to spotkanie dla zespołu, prowadzone przez zespół. Chodzi o to, by zespół sam siebie skoordynował. Jeśli pojawi się dyskusja techniczna między dwoma devami, odkładają ją „po daily”, żeby nie blokować czasu całej grupy – 15 minut to mało, ma być konkretnie i na temat.

Zwyczajowo Daily odbywa się przed tablicą zadań (fizyczną lub na ekranie, jeśli zespół jest zdalnie), aby na bieżąco zaktualizować statusy zadań w Sprint Backlogu (np. przenieść ticket z „Doing” do „Done” jeśli wczoraj został ukończony). W nowoczesnych narzędziach typu Jira, Azure DevOps itp., zespół podczas Daily może odklikać wykonane zadania i zobaczyć, ile zostało.

Scrum daily

Przykład:
Jest wtorek, drugi dzień sprintu. Zespół spotyka się o 9:00 na Daily Scrum. Każdy po kolei relacjonuje:

  • Dev 1: „Wczoraj zaimplementowałem endpoint dodawania do koszyka. Dziś chcę zrobić usuwanie z koszyka. Nie napotkałem przeszkód, wszystko ok.”
  • Dev 2: „Ja wczoraj utknąłem przy walidacji danych w formularzu koszyka – jest pewien bug z formatem ceny. Dzisiaj to dokończę i zacznę pracę nad podsumowaniem koszyka. Mam problem, bo potrzebuję przykładowych danych produktów – czy możesz mi, Dev3, przygotować kilka rekordów testowych?”
  • Dev 3: „Jasne, pomogę. Wczoraj przygotowałem strukturę bazy danych dla koszyka i zacząłem testy do dodawania produktu. Dziś dokończę testy i przygotuję te dane dla Dev2.” Tester dodaje: „Ja czekam, aż pierwsze funkcje będą na środowisku testowym, więc na razie przeglądałam wymagania – dziś mogę pomóc Dev2 w tej walidacji, bo mam trochę doświadczenia z JavaScriptem.”

W 10 minut wszyscy już wiedzą, na czym stoją. Scrum Master zauważył, że Dev2 napotkał problem – po Daily porozmawiał z nim i ustalił, że jeśli walidacja będzie sprawiać kłopot, to może skonsultują to z UX designerem. Daily kończy się, każdy wraca do pracy z jasnym planem na dziś.

Sprint Review (Przegląd Sprintu)

Kiedy: Pod koniec sprintu, zazwyczaj w ostatni dzień lub przedostatni dzień sprintu.
Kto uczestniczy: Cały zespół Scrum (PO, SM, deweloperzy) oraz interesariusze – czyli zaproszeni przedstawiciele biznesu, klienci, użytkownicy, sponsorzy projektu, menedżerowie – anyone zainteresowany rezultatem prac.
Cel spotkania: Zaprezentować to, co zostało zrealizowane w sprincie (ukończony Przyrost), zebrać feedback i omówić wspólnie co dalej z produktem.

Przebieg Sprint Review:
Sprint Review ma charakter raczej swobodnego spotkania przy produkcie niż oficjalnej odprawy. Nie jest to egzamin dla zespołu, raczej okazja do dyskusji i oceny produktu.

Typowo zawiera:

  • Demonstracja produktu – Zespół developerski prezentuje ukończone funkcje działające w produkcie. Często to forma demo: np. developer podłącza swój komputer do rzutnika i pokazuje, jak w aplikacji działa koszyk, który zrobili w sprincie. Ważne, by pokazywać działający software, nie slajdy. Uczestnicy mogą sami poklikać, zobaczyć, jak to działa.
  • Omówienie backlogu – Product Owner omawia, które elementy backlogu zostały zrealizowane w tym sprincie, a których ewentualnie nie udało się ukończyć. Jeśli coś jest „nie zrobione”, wraca do backlogu produktu. Następnie PO opowiada o stanie backlogu na ten moment: co prawdopodobnie będzie priorytetem w kolejnym sprincie, jakie nowe pomysły się pojawiły. To jest moment, gdzie interesariusze mogą zgłaszać swoje uwagi, pomysły, zmieniać priorytety. Np. klient widząc działający koszyk mówi: „Super, ale zależy nam, by w następnym sprincie dodać płatność jednym kliknięciem, bo konkurencja to ma”. PO dopisuje to do backlogu lub przesuwa wyżej istniejący element dot. płatności.
  • Dyskusja i feedback – uczestnicy oceniają efekty sprintu. Czy to, co zespół dostarczył, spełnia oczekiwania? Czy produkt zmierza we właściwym kierunku? Tutaj cenne są uwagi użytkowników: np. tester z ramienia klienta może powiedzieć „Proces dodawania do koszyka działa, ale interfejs mógłby być bardziej intuicyjny, może ikonka koszyka powinna być bardziej widoczna”. Takie uwagi są skarbem – Scrum opiera się na tym, by często pokazywać realny produkt i szybko reagować na opinie.
  • Decyzje odnośnie dalszych kroków – na podstawie feedbacku PO może zmodyfikować backlog. Bywa, że po kilku sprintach produktu, interesariusze zdecydują o pewnym pivotcie (zmianie kierunku) – lepiej zrobić to wcześnie niż za późno. Sprint Review kończy się więc wstępnym zarysem planu na kolejny sprint/iteracje, choć szczegóły kolejnego sprintu będą dopiero ustalane na następnym Sprint Planningu.

Timebox:
Dla sprintu miesięcznego maksymalnie 4 godziny. Dla krótszych odpowiednio mniej (np. ~2 godziny dla 2-tygodniowego sprintu). Spotkanie ma być rzeczowe – jeżeli jest sporo do pokazania i dużo interesariuszy, czasem faktycznie 2 godziny schodzą. W mniejszych projektach review może się zmieścić w godzinie.

Projekt grupowy

Przykład:
Po 2 tygodniach nasz zespół z aplikacji e-commerce kończy sprint z działającym koszykiem. Na Sprint Review zaproszony jest dyrektor produktu i dwóch przyszłych użytkowników (np. sprzedawców z działu obsługi). Zespół pokazuje na żywo: użytkownik wybiera produkt, dodaje do koszyka, zmienia ilość, usuwa – wszystko działa płynnie. Goście biją brawo 😉. Pojawia się feedback: sprzedawca mówi, że przydałaby się opcja „Zapisz na później” w koszyku. Product Owner zapisuje to. Dyrektor pyta, czy w następnym sprincie będzie można już składać zamówienia – PO potwierdza, że taki jest plan, bo to kolejny priorytet w backlogu. Ktoś sugeruje integrację z systemem magazynowym – to duża rzecz, więc trafi na backlog jako pomysł do oceny. Ogólnie wszyscy są zadowoleni z postępów. Zespół czuje dumę, a jednocześnie dostał nowe informacje, które pomogą lepiej ustawić kolejność prac. Spotkanie trwało ok. 1,5 godziny.

Sprint Retrospective (Retrospektywa Sprintu)

Kiedy: Bezpośrednio po Sprint Review, na sam koniec sprintu (albo nazajutrz, przed kolejnym Sprint Planningiem – ważne by retrospekcja odbyła się po review, a przed rozpoczęciem kolejnego sprintu).
Kto uczestniczy: Tylko zespół Scrum – Scrum Master, Product Owner, deweloperzy. Interesariusze z zewnątrz nie biorą udziału – retrospektywa to wewnętrzne spotkanie zespołu.
Cel spotkania: Przeanalizować przebieg minionego sprintu pod kątem procesu i współpracy – zastanowić się, co poszło dobrze, co poszło źle, co można ulepszyć. To kluczowy element ciągłego doskonalenia (kaizen) w Scrumie. W efekcie zespół ma wybrać konkretne usprawnienia do wdrożenia w następnym sprincie.

Przebieg Sprint Retrospective:
Retrospektywa zwykle ma mniej formalny charakter – Scrum Master często stosuje różne techniki i gry zespołowe, aby pobudzić szczerość i kreatywność. Ważne, by stworzyć atmosferę zaufania; to nie jest spotkanie do obwiniania kogoś, tylko wyciągania wniosków.

Przykładowy przebieg:

  • Sprawdzenie nastrojów – np. każdy mówi jednym słowem, jak się czuje po sprincie. Albo daje ocenę sprintu w skali 1-5. To rozgrzewka, by zacząć rozmowę.
  • Wypisanie spostrzeżeń – zespół może wspólnie wypisać na tablicy lub karteczkach odpowiedzi na trzy pytania: Co poszło dobrze w tym sprincie? Co poszło nie tak? Jakie pomysły na usprawnienia mamy? (Popularny format to Start/Stop/Continue – rzeczy, które zacząć robić, przestać robić, kontynuować bo działają). Wszyscy członkowie dodają swoje punkty, nawet PO i SM.
  • Omówienie i analiza – omawiacie punkt po punkcie. Np. „Poszło dobrze: komunikacja z klientem – super, że był dostępny do wyjaśnień na bieżąco.” „Poszło źle: testy zaczęliśmy za późno i na koniec sprintu brakło czasu na porządną stabilizację.” Zespół dyskutuje, dlaczego tak było, jak uniknąć problemów następnym razem. Scrum Master moderuje rozmowę, pilnuje, by skupić się na rzeczach, na które zespół ma wpływ (nie ma sensu narzekać np. „pogoda była zła” – chodzi o proces).
  • Wybór usprawnień – z wielu pomysłów wybieracie te najważniejsze, realne do wdrożenia od razu w kolejnym sprincie. Np. zespół stwierdza: „Aby poprawić testowanie, w następnym sprincie wprowadzimy zasadę, że tester angażuje się od początku, a nie czeka na koniec. Zrobimy też checklistę „Definition of Done”, żeby pamiętać o testach automatycznych przed zakończeniem zadania.” Ważne, by nie brać na raz zbyt wiele zmian – lepiej 1-2 konkretne rzeczy i sprawdzić, czy pomogą.
  • Zakończenie pozytywnym akcentem – wiele zespołów kończy retrospekcję w pozytywny sposób, np. każdy mówi, za co chciałby podziękować innej osobie („Dzięki Tomek, że pomogłeś mi z tym skryptem!”). To buduje wzajemny szacunek i zaufanie – jedne z wartości Scrum to właśnie szacunek, otwartość, odwaga, skupienie, zaangażowanie.

Timebox:
do 3 godzin dla miesięcznego sprintu (proporcjonalnie mniej dla krótszych, np. 1-1.5h dla 2-tygodniowego). Dobrze przeprowadzona retrospektywa to inwestycja czasu, która zwraca się w postaci ciągle lepszego procesu pracy. Zespół nie powinien jej pomijać – bez retrospekcji Scrum traci swój zwinny charakter, bo brak mu nauki na błędach.

Retro, scrum

Przykład:
Nasz zespół po Sprint Review (koszyk udany) zwołuje retrospekcję. Scrum Master przynosi karteczki samoprzylepne i markery. Prosi: „Napiszcie proszę rzeczy, które uważacie za sukces sprintu i takie, które były problematyczne. Potem pomysły, co możemy zmienić.” Po 10 minutach powstała tablica:

Plusy: „Skończyliśmy wszystko zgodnie z planem”, „Lepsza komunikacja z PO – szybkie doprecyzowanie wymagań”, „Pair programming przy trudnym tasku się sprawdził”.

Minusy: „Za mało testów automatycznych – dużo czasu poszło na ręczne testy”, „Daily czasem się opóźniało, bo nie wszyscy przychodzili na czas”, „Frontend czekał na backend – blokada przez pół dnia była”.

Propozycje: „Dodać pisanie testów automatycznych do Definition of Done”, „Ustalmy Daily na 10:00 zamiast 9:00, żeby wszyscy zdążyli po porannych obowiązkach”, „Może spróbujemy pracować nad kilkoma elementami równolegle, żeby frontend i backend nie czekały na siebie (np. ustalamy wcześniej kontrakt API)”.

Zespół omawia te punkty. Ustalają dwie akcje na kolejny sprint:

  1. Doprecyzują Definition of Done, że każda funkcja musi mieć napisany test automatyczny przed uznaniem jej za ukończoną.
  2. Przesuną porę Daily na 10:00 i sprawdzą, czy to poprawi punktualność.

Wszyscy się zgadzają. Scrum Master zapisuje te ustalenia. Spotkanie kończą szybką rundką „kudo” – każdy mówi komuś dziękuję za coś z tego sprintu. Z uśmiechami kończą sprint i są gotowi, by następnego dnia zacząć kolejny z ulepszonym podejściem.

Scrum w praktyce – przykłady zastosowania i narzędzia

Teoria za nami, ale jak Scrum wygląda w praktyce w projektach IT? Prześledźmy krótko przykładowy przebieg projektu prowadzonego Scrumem oraz narzędzia, jakich używają zespoły.

Przykład projektu IT prowadzonego Scrumem:
Załóżmy, że niewielka firma software’owa tworzy dla klienta platformę e-commerce. Klient ma ogólne wyobrażenie produktu, ale szczegóły mogą się zmieniać w trakcie prac (typowa sytuacja!). Decydujemy się użyć Scruma, by dostarczać kolejne części systemu i regularnie konsultować je z klientem. Projekt rusza:

  1. Tworzenie backlogu produktu: Product Owner (ze strony firmy, we współpracy z klientem) spisuje wszystkie wymagania i pomysły do Product Backlogu: od funkcji rejestracji użytkowników, przez przegląd katalogu produktów, koszyk, płatności, aż po integracje z kurierami i systemem magazynowym. Każdy element backlogu dostaje wstępny priorytet.
  2. Ustalenie długości sprintu: Zespół decyduje się na 2-tygodniowe sprinty – to częsty wybór w IT, bo daje dobry balans (tydzień czasem za krótki na większe funkcje, miesiąc to zbyt rzadkie feedbacki). Mają zatem co dwa tygodnie planowanie, daily codziennie, a na koniec sprintu review i retro.
  3. Pierwszy sprint – planowanie: Na Sprint Planning #1 z backlogu wybrane zostają podstawy: „Strona główna z listą produktów” i „Szczegóły produktu”. Celem sprintu jest umożliwić użytkownikowi przegląd produktów. Zespół rusza do pracy.
  4. Praca w sprincie: Każdego dnia programiści i tester spotykają się na Daily, synchronizują, rozwiązują na bieżąco problemy. Używają narzędzia Jira do zarządzania zadaniami: każdy element backlogu jest tam jako tzw. ticket, podzielony na subtaski. Na tablicy scrumowej w Jira widać kolumny To Do / In Progress / Done i taski przesuwane w miarę postępów. Scrum Master czuwa nad procesem, a PO jest dostępny pod telefonem, gdy trzeba coś ustalić.
  5. Koniec sprintu – Review: Po 2 tygodniach zespół prezentuje działającą stronę główną i ekran produktu. Klient ogląda demo – jest zadowolony, choć zgłasza, że chciałby dodatkowo filtrów po cenie. PO dopisuje „Filtrowanie produktów” do backlogu na wysokim priorytecie. Klient pyta też, kiedy będzie gotowy koszyk – PO wyjaśnia, że plan na kolejny sprint to właśnie implementacja koszyka.
  6. Retrospekcja: Zespół omawia swoje współdziałanie. Wyszło, że backend miał opóźnienie przez niedoszacowanie jednego zadania – nauczka na przyszłość, by lepiej estymować lub ciąć zakres. Ustalają, że w następnym sprint planning poświęcą więcej czasu na podzielenie zadań, by lepiej widzieć pracochłonność.
  7. Kolejne sprinty: W sprint #2 powstaje koszyk, w sprint #3 moduł zamówień, sprint #4 – płatności itd. Po każdych dwóch tygodniach klient widzi postępy i daje feedback. Np. po sprincie z płatnościami okazuje się, że rynek wymusza dodanie nowego lokalnego systemu płatności – klient zmienia priorytety. Nie ma problemu – rzeczy nie zaczęte można przesunąć. Zespół w międzyczasie dzięki retrospekcjom usprawnił sporo rzeczy: zautomatyzował testy (co skróciło testowanie o 30%), wprowadził wspólne programowanie dla trudnych zadań, co przyspieszyło ich realizację.
  8. Zwinność w akcji: Po kilku miesiącach (kilkanaście sprintów) produkt osiąga gotowość do wydania MVP. Klient od początku był na bieżąco i miał wpływ na kierunek prac. Gdyby robić to tradycyjnie „waterfallem”, pewnie na koniec okazałoby się, że brakuje paru kluczowych funkcji albo coś jest nie tak – tutaj dzięki Scrumowi uniknięto takich niespodzianek, bo ciągle była inspekcja i adaptacja.

Narzędzia wspierające Scrum:
Scrum jako metodyka nie wymaga konkretnych narzędzi poza tablicą, kartką i długopisem 😉. Jednak w praktyce zespoły IT korzystają z różnych aplikacji, które ułatwiają zarządzanie backlogiem i wizualizację pracy.

Kilka popularnych to:

  • Jira – chyba najczęściej używane narzędzie do Scrum/Agile w software. Pozwala tworzyć backlog produktu, planować sprinty, śledzić postęp zadań, generować wykresy (np. burndown chart – wykres spalania pracy w sprincie). Jira jest potężna, ale może być przytłaczająca dla początkujących.
  • Trello – prostsze narzędzie, oparte na tablicy Kanban z kartami. Można nim zarządzać sprintami mniej formalnie (np. kolumny ToDo/Doing/Done). Dobre dla małych zespołów lub do nauki Scruma, choć brak w nim zaawansowanych funkcji raportowania.
  • Azure DevOps (dawniej TFS) – Microsoftowa platforma ALM, zawiera moduł Azure Boards do zarządzania pracą agile. Podobnie jak Jira, umożliwia tworzenie backlogu, sprintów, wykresów, a dodatkowo integruje się z repozytorium kodu, pipeline’ami CI/CD itp.
  • Asana, Monday, ClickUp – inne narzędzia do zarządzania projektami, które wspierają metodyki zwinne. Coraz więcej aplikacji ma szablony Scrum: np. możliwość tworzenia sprintów, backlogów, przypisywania punktów story point.
  • GitHub Projects/GitLab Boards – narzędzia dla zespołów programistycznych integrujące zarządzanie zadaniami z repozytorium kodu. Pozwalają linkować taski do commitów, robić code review w kontekście user story itd. To ułatwia śledzenie, co zostało zrobione w danym przyroście.
  • Tablica fizyczna + karteczki – warto wspomnieć, że niektóre zespoły kochają analogowy sposób: korkowa tablica i kolorowe sticky notes jako zadania, przemieszczane między kolumnami „Do zrobienia / W trakcie / Gotowe”. Na Daily wszyscy stają przy tablicy i przesuwają karteczki. Taki radiator informacji w pokoju zespołu działa świetnie, bo wizualizuje postęp i angażuje ludzi. Wadą jest brak automatycznych statystyk – ale to oldschool Scrum w czystej postaci.

Scrum poza czystym developmentem:
Co ciekawe, Scrum znajduje zastosowanie również poza typowymi projektami programistycznymi. Coraz częściej używa się go w zespołach marketingowych, w organizacji eventów, a nawet w edukacji.

Sprawny Programista Java

Przykład edukacyjny:
W naszym programie mentorskim „Sprawny Programista Java” również pracujemy ze Scrumem w tygodniowych sprintach!

Jak to wygląda? Uczestnicy (zazwyczaj junior developerzy uczący się Java) działają w małych grupach projektowych. Każdy tydzień to nowy Sprint – na początku tygodnia planujemy razem zadania, codziennie na grupie discord (Daily) dzielą się postępami i problemami, a pod koniec tygodnia robią review (pokazują mentorowi i grupie, co stworzyli/działająca aplikacja) oraz retrospekcję (analizują swoją naukę: co poszło dobrze, a co poprawić w następnym tygodniu).

Dzięki temu uczą się nie tylko Javy, ale i dobrych nawyków pracy Scrumowej. Taki rytm sprintów tygodniowych trzyma ich w ryzach i motywuje – co tydzień dowożą coś konkretnego, widzą progres i od razu dostają feedback od mentora.

To dowód, że elementy Scruma można z powodzeniem zastosować nawet w procesie nauki programowania, aby zwiększyć regularność i skuteczność.

>> Odbierz szkolenie: 
„Od Junior Java Developera do Mida w rekordowym czasie”

Scrum – odsumowanie

Scrum to obecnie podstawa zarządzania projektami w świecie wytwarzania oprogramowania. W tym artykule pokazaliśmy co to jest Scrum i jak działa – od filozofii Agile, poprzez role (Product Owner, Scrum Master, Zespół Deweloperski), artefakty (Product Backlog, Sprint Backlog, Increment), aż po ceremonie (Sprint Planning, Daily Scrum, Sprint Review, Retrospektywa). Poznałeś praktyczne przykłady, dzięki którym sucha teoria ożywa: wiesz już, jak może wyglądać sprint w projekcie czy jak Scrum pomaga zespołowi adaptować się do zmian.

Dlaczego Scrum jest tak popularny? Bo rozwiązuje odwieczny problem projektów IT – zmieniające się wymagania i niepewność. Zamiast kurczowo trzymać się sztywnego planu, Scrum zakłada, że zmiana jest naturalna i potrzebna. Dając ramy częstej inspekcji i adaptacji, pozwala dostarczać produkt kawałek po kawałku, ucząc się w trakcie i reagując na opinie użytkowników. Dla Ciebie jako junior developera znajomość Scruma to ogromny atut – prawdopodobnie trafisz do zespołu, który pracuje w Scrumie lub ogólnie Agile. Rozumiejąc ten proces, łatwiej się w niego włączysz, będziesz wiedział, czemu codziennie jest krótkie spotkanie albo dlaczego nie wrzucamy „drobnej zmiany na produkcję” od ręki w środku sprintu 😉.

Na koniec warto pamiętać, że Scrum to prosty w założeniach framework, ale trudny w mistrzowskim opanowaniu. Nie zrażaj się, jeśli na początku pewne rytuały wydają się dziwne lub zbędne. Z czasem zobaczysz, że dobrze prowadzony Scrum naprawdę usprawnia pracę i produkt. Kluczem jest zrozumienie dlaczego to robimy: Daily nie jest po to, by kogoś kontrolować, tylko by sobie pomagać; retrospektywa nie jest po to, by narzekać, tylko by znaleźć rozwiązania. Gdy zespół „poczuje” te idee, Scrum staje się nie tyle zbiorem obowiązkowych spotkań, co naturalnym rytmem współpracy.

Mam nadzieję, że ten przewodnik po Scrumie okazał się dla Ciebie wartościowy. Teraz, gdy ktoś zapyta „Scrum? Co to takiego?”, będziesz umiał prosto wytłumaczyć, że to taka zwinna metoda pracy zespołowej, dzięki której nawet skomplikowany projekt dzielimy na małe etapy i krok po kroku dowozimy świetny produkt. 💪

Powodzenia w Twojej przygodzie ze Scrumem – być może już wkrótce podczas Daily Scruma opowiesz o pierwszych zadaniach, jakie ukończyłeś w nowym zespole developerskim!

No comments
Share:
Agile

Agile vs Waterfall – Metodyki zwinne w praktyce dla początkujących

Agile to zwinne i elastyczne podejście do tworzenia oprogramowania, będące alternatywą dla sztywnego podejścia kaskadowego (Waterfall). W podejściu Agile zespół pracuje w krótkich cyklach (iteracjach), dostarczając kolejne części produktu i na bieżąco reagując na zmiany. Zespoły Agile cechują się samozarządzaniem i częstym komunikowaniem postępów – regularnie prezentują klientowi działające fragmenty aplikacji, by uzyskać cenny feedback i ewentualnie dostosować dalsze prace. Dzięki takiej iteracyjności możliwe jest szybsze osiąganie założonych celów i dostarczanie realnej wartości użytkownikom.

Czym jest Agile? Metodyki zwinne w praktyce

Agile nie jest jedną konkretną metodą, lecz parasolem dla wielu “metodyk zwinnych”. Do najpopularniejszych należą m.in. Scrum, Kanban, Lean czy Extreme Programming (XP). Wszystkie one opierają się na tych samych wartościach i zasadach zdefiniowanych w Agile Manifesto (Manifeście Agile), ale proponują różne ramy postępowania, role i praktyki. Wspólnym mianownikiem jest jednak iteracyjne, przyrostowe i ewolucyjne podejście do projektu: zamiast realizować cały projekt naraz, Agile zachęca do podziału pracy na małe kroki, ciągłego doskonalenia produktu oraz dostosowywania planu w odpowiedzi na nowe informacje. Innymi słowy – Agile to bardziej sposób myślenia o projekcie niż sztywny proces. Dla początkującego programisty oznacza to, że zamiast miesiącami pisać kod bez kontaktu z klientem, będzie on pracował w krótkich sprintach, często omawiał wymagania z zespołem i klientem, a efekty swojej pracy zobaczy działające na produkcie szybciej niż w tradycyjnym modelu.

Manifesto Agile – zasady i wartości

Agile formalnie narodziło się w 2001 roku, kiedy grupa doświadczonych programistów opracowała Manifest Zwinnego Wytwarzania Oprogramowania (Agile Manifesto). Manifest ten zawiera cztery główne wartości oraz dwanaście zasad postępowania, które definiują kulturę pracy w metodykach zwinnych.

Oto cztery kluczowe wartości Manifesto Agile w oryginalnym brzmieniu:

  • Ludzie i interakcje ponad procesy i narzędzia – w Agile najważniejsza jest skuteczna współpraca między ludźmi. Nawet najlepsze narzędzia czy formalne procesy nie zastąpią bezpośredniej komunikacji w zespole. W praktyce oznacza to np. preferowanie rozmowy twarzą w twarz nad długimi wymianami maili czy dokumentacją.
  • Działające oprogramowanie ponad obszerną dokumentację – celem zespołu jest dostarczać działający kod, który przynosi wartość użytkownikom, zamiast produkować stosy papierowej dokumentacji. Oczywiście dokumentacja jest potrzebna, ale Agile kładzie nacisk, by nie powstawała kosztem postępów w implementacji. Dla programisty oznacza to, że “demo” działającej funkcji jest ważniejsze niż szczegółowy raport postępów.
  • Współpraca z klientem ponad negocjację umów – zamiast sztywno trzymać się zapisów kontraktu, zespół Agile pozostaje w stałym kontakcie z klientem (lub Product Ownerem), wspólnie doprecyzowując wymagania i priorytety. Zamiast traktować specyfikację jak zamknięty dokument, Agile zakłada, że wymagania mogą ewoluować, a bliska współpraca z biznesem zapewni, że produkt końcowy spełni faktyczne potrzeby.
  • Reagowanie na zmiany ponad realizację planu – plany projektowe są ważne, ale Agile uczy, że zmiana jest nieunikniona i często pożądana. Gdy w trakcie prac pojawią się nowe wymagania lub zmienią się warunki rynkowe, zespół zwinny dostosuje się do nich zamiast kurczowo trzymać pierwotnego planu. Dla developera oznacza to gotowość na refaktoryzację kodu czy zmianę priorytetów z sprintu na sprint.

Manifesto Agile podkreśla, że choć elementy takiej jak: procesy, narzędzia, dokumentacja, umowy, plany – też są wartościowe, to zespół Agile bardziej ceni – ludzi, działające oprogramowanie, współpracę i gotowość na zmiany. W praktyce te wartości przekładają się na 12 zasad Agile, takich jak: częste dostarczanie działającego oprogramowania (np. co parę tygodni), ścisła współpraca biznesu z deweloperami na co dzień, motywowanie i wspieranie członków zespołu, stawianie na proste rozwiązania i techniczna doskonałość, zespołowa odpowiedzialność za produkt, stałe tempo pracy czy regularne retrospekcje i usprawnienia procesu. Wszystkie te zasady mają jeden cel – umożliwić tworzenie lepszego oprogramowania w sposób szybki, adaptowalny i ukierunkowany na potrzeby klienta.

Agile vs Waterfall – podejście iteracyjne, przyrostowe i ewolucyjne

waterfall vs agile

Waterfall vs Agile (źródło: wikipedia.org)

Porównanie przebiegu projektu w modelu kaskadowym (Waterfall) i w podejściu Agile iteracyjnym. U góry: Waterfall – fazy projektu następują kolejno po sobie, od koncepcji, przez projekt, implementację, po utrzymanie. Na dole: Agile/iteracyjne – wiele małych cykli, w ramach których poszczególne etapy (planowanie, projekt, budowa, testy) nakładają się i powtarzają, dostarczając przyrosty funkcjonalności.

Tradycyjny model Waterfall (kaskadowy) to linearne podejście do tworzenia oprogramowania. Projekt dzieli się w nim na z góry zdefiniowane fazy (analiza, projektowanie, implementacja, testowanie, wdrożenie), które są realizowane kolejno, jedna po drugiej. Założeniem Waterfalla jest, że najpierw starannie zbierzemy wszystkie wymagania i zaplanujemy projekt, następnie napiszemy cały kod, potem go przetestujemy i na końcu dostarczymy gotowy produkt. Taki proces jest sztywny i jednorazowy – trudno wrócić do poprzedniej fazy, gdy coś pójdzie nie tak. W efekcie ewentualne błędy czy zmiany wymagań wykrywa się dopiero pod koniec projektu, co bywa kosztowne lub wręcz katastrofalne (np. konieczność poważnych przeróbek tuż przed wydaniem produktu). W Waterfallu klient często widzi działające oprogramowanie dopiero na samym końcu, co może prowadzić do sytuacji, że produkt nie spełnia jego oczekiwań, mimo że formalnie zrealizowano wszystkie założenia.

Dla kontrastu podejście Agile jest iteracyjne i przyrostowe. Oznacza to, że prace podzielone są na krótkie cykle (iteracje) – np. tygodniowe lub dwutygodniowe sprinty w Scrumie – podczas których zespół dostarcza przyrost produktu, czyli działającą część funkcjonalności. Po każdej iteracji następuje przegląd i ocena wyników, często z udziałem klienta, co pozwala na ewolucyjne planowanie dalszych kroków. Agile zakłada, że projekt rozwija się stopniowo: na początku mamy ogólny zarys, a szczegóły i dodatkowe funkcje wyłaniają się w trakcie kolejnych iteracji, w odpowiedzi na informacje zwrotne i zmieniające się potrzeby.

Kluczowe różnice Agile vs Waterfall to: częstotliwość dostarczania (w Agile działające fragmenty trafiają do klienta regularnie, w Waterfallu dopiero na końcu), możliwość zmiany (Agile wręcz zakłada zmiany kierunku w trakcie, Waterfall stara się ich unikać), sposób testowania (Agile testuje ciągle w każdym przyroście, Waterfall dopiero po zbudowaniu całości oraz zaangażowanie klienta (w Agile klient jest częścią procesu i ciągle współpracuje, w Waterfallu często tylko odbiera końcowy rezultat). W efekcie projekty prowadzone zwinnie mają większą szansę dostarczyć produkt spełniający faktyczne potrzeby i zrobić to szybciej – statystyki pokazują, że metodyki agile’owe osiągają wyższy odsetek sukcesów projektów niż model kaskadowy. Z drugiej strony Agile wymaga od organizacji większej elastyczności, zaufania do zespołu i gotowości na reorganizację pracy.

Dla junior developera różnica jest odczuwalna przede wszystkim w stylu pracy: w Waterfallu możesz przez długi czas programować ściśle według specyfikacji zanim ktoś to zobaczy, podczas gdy w Agile będziesz częściej prezentować swoje kawałki kodu, uczestniczyć w częstszych spotkaniach (daily, review, retro) i musieć szybko reagować na uwagi. Mimo że wymaga to większej dynamiki, daje satysfakcję z widzenia postępów na bieżąco i uczenia się szybciej na podstawie feedbacku.

Scrum i Agile – krótkie wprowadzenie do metodyki Scrum

Scrum

Scrum (źródło: wikipedia.org)

Schemat cyklu pracy w Scrumie – popularnej metodyce Agile. Scrum opiera się na powtarzalnych iteracjach zwanych sprintami, podczas których zespół realizuje elementy produktu z Backlogu Produktu. Każdy sprint zaczyna się planowaniem (wybranie elementów do Sprint Backlogu), codziennie odbywa się krótki Daily Scrum, a na koniec powstaje działający Przyrost Produktu gotowy do wydania. Po sprincie zespół dokonuje przeglądu i retrospektywy przed rozpoczęciem kolejnego cyklu.

Scrum to najpopularniejszy framework Agile, dlatego warto go pokrótce poznać. Scrum zakłada pracę w stałych odstępach czasu – sprintach, trwających zwykle 1-4 tygodnie. Na początku sprintu odbywa się Sprint Planning, podczas którego zespół wybiera z Backlogu Produktu (listy wymagań/user stories) te elementy, które jest w stanie zrealizować w danym sprincie. W trakcie sprintu programiści codziennie spotykają się na krótkich naradach (Daily Scrum, zwanych też stand-upami), aby zsynchronizować pracę – omawiają, co zrobili wczoraj, co planują na dziś i czy natrafili na przeszkody. Efektem sprintu ma być Potencjalnie Wartościowy Przyrost Produktu – czyli działająca funkcjonalność, najlepiej nadająca się od razu do przekazania użytkownikom. Sprint kończy się Sprint Review (demonstracją wyników przed Product Ownerem/klientem i zebraniem feedbacku) oraz Retrospekcją, gdzie zespół omawia co poszło dobrze, a co można ulepszyć w następnym sprincie.

W Scrumie zdefiniowane są trzy główne role: Scrum Master (facylitator procesu, dba o przestrzeganie zasad Scrum i usuwa przeszkody blokujące zespół), Product Owner (reprezentant klienta lub biznesu, zarządza backlogiem i priorytetami) oraz Zespół Deweloperski (samozarządzający się zespół programistów i testerów, który wykonuje pracę). Ważne jest, że Scrum celowo nie przewiduje tradycyjnej roli Project Managera – obowiązki “kierownicze” są podzielone między Scrum Mastera (odnośnie procesu) i Product Ownera (odnośnie zakresu produktu). Dzięki temu zespół ma dużą autonomię w realizacji zadań.

Scrum to temat rzeka i zasługuje na osobny wpis – w niniejszym artykule nie wyczerpiemy wszystkich pojęć (takich jak Definition of Done, punkty story, wykres burndown itp.). Dla Ciebie, jako programisty, ważne jest zrozumieć, że Scrum narzuca rytm pracy (sprinty) i pewną dyscyplinę spotkań, ale w zamian zapewnia jasną strukturę współpracy. Jeśli chcesz zgłębić Scrum bardziej szczegółowo – odsyłamy do naszego osobnego przewodnika po metodyce Scrum😊.

➡ ZOBACZ 👉: Scrum – co to jest i jak działa? Kompletny przewodnik dla początkujących

Agile Project Management – rola PM w zespole Agile

Skoro w Scrumie nie ma klasycznego kierownika projektu, to czy w ogóle jest miejsce dla roli Project Managera w Agile? Odpowiedź brzmi: tak, choć rola ta zmienia swój charakter. Tradycyjny Project Manager w modelu waterfall był odpowiedzialny za rozdzielanie zadań, planowanie zakresu, budżetu i harmonogramu oraz nadzorowanie postępów. W środowisku Agile wiele z tych zadań przejmują zespół i frameworki (np. samoorganizujący się zespół decyduje jak wykona zadania, Product Owner określa co jest priorytetem, a Scrum Master dba o proces).

W mniejszych projektach Scrumowych faktycznie osobny PM często nie jest potrzebny – wystarczą role SM i PO. Natomiast w dużych przedsięwzięciach, gdzie równolegle pracuje wiele zespołów, pojawia się potrzeba koordynacji na wyższym poziomie. I tu wkracza Agile Project Manager (czasem zwany po prostu Agile PM). Jego rola różni się od klasycznego PM-a. Agile PM przede wszystkim facylituje i wspiera zamiast wydawać polecenia. Może zajmować się komunikacją z interesariuszami (pilnować, by wszyscy zainteresowani otrzymywali potrzebne informacje o postępach), pomagać w identyfikacji i minimalizacji ryzyk projektowych oraz czuwać nad budżetem. Nie “rozdaje zadań” programistom – zadania wybiera i estymuje sobie sam zespół podczas planowania sprintu. Nie kontroluje szczegółowo zakresu – zakresem zarządza Product Owner poprzez priorytety w backlog.

Można powiedzieć, że Agile PM pełni rolę lidera służebnego (servant leader) na poziomie projektu lub programu. Dba o to, by zespoły miały warunki do efektywnej pracy, usuwa przeszkody wykraczające poza pojedynczy zespół, synchronizuje prace wielu teamów (np. w skalowanych metodykach jak Nexus czy SAFe) i pilnuje, by cały projekt zmierzał w dobrym kierunku biznesowym. W wielu firmach rolę taką pełnią doświadczeni Scrum Masterzy lub Agile Coachowie działający ponad jednym zespołem. Dla junior developera oznacza to, że “szef projektu” w Agile to bardziej mentor/koordynator, do którego możesz się zwrócić gdy potrzebujesz wsparcia albo gdy pojawia się problem wymagający decyzji poza zespołem (np. konflikt priorytetów między działami).

Extreme Programming (XP) – programowanie ekstremalne

Wspomnieliśmy wcześniej o Extreme Programming (XP) – jest to jedna ze zwinnych metodyk, która kładzie szczególnie duży nacisk na techniczne praktyki programistyczne i jakość kodu. XP powstało mniej więcej w tym samym czasie co Scrum i również inspirowało się Manifestem Agile, ale podchodzi do tematu od strony inżynierskiej. Jeśli Scrum mówi co robić w procesie (organizacja sprintów, spotkania itp.), to XP skupia się na tym jak kodować, by szybko reagować na zmiany i dostarczać bezbłędne oprogramowanie.

Do kluczowych praktyk XP należą m.in. Programowanie w parach (Pair Programming) – cały kod jest pisany przez dwie osoby współpracujące przy jednym komputerze. Taka praktyka może wydawać się “ekstremalna”, ale znacząco podnosi jakość: błędy są wyłapywane na bieżąco przez drugiego programistę, następuje ciągła wymiana wiedzy, a każda część systemu jest zrozumiała dla więcej niż jednej osoby.

Kolejna praktyka to Test-Driven Development (TDD), czyli pisanie testów jednostkowych przed właściwym kodem. W XP każde nowe wymaganie najpierw zostaje wyrażone jako zbiór testów, które początkowo nie przechodzą, a zadaniem programisty jest napisać kod, który sprawi że testy będą zielone. TDD zapewnia, że powstający kod jest dobrze przemyślany (bo musi być łatwy do przetestowania) i daje natychmiastową informację zwrotną o ewentualnych regresjach. Popularne narzędzia jak JUnit (dla Javy) czy pytest (dla Pythona) wspierają ten styl pracy – jako junior Java developer prawdopodobnie spotkasz się z pisaniem testów jednostkowych, co wywodzi się właśnie z praktyk XP.

XP promuje również częste, małe wydania (Small Releases) – zespół stara się jak najczęściej wypuszczać nową wersję aplikacji (nawet codziennie), by szybko zebrać feedback od użytkowników. Wymaga to ciągłej integracji (Continuous Integration), czyli łączenia kodu od wszystkich programistów nawet kilka razy dziennie i automatycznego uruchamiania wszystkich testów.

Dzisiaj narzędzia CI/CD (np. GitHub Actions, Jenkins, GitLab CI) pozwalają to łatwo praktykować. Ponadto XP zaleca proste rozwiązania (Simple Design) – unikanie nadmiernie skomplikowanej architektury, skupianie się na tym, co potrzebne tu i teraz (zasada YAGNI – “You Ain’t Gonna Need It”) – oraz ciągłe refaktoryzacje kodu, aby utrzymać jego jakość i czytelnoś.

Innym elementem XP jest wspólna własność kodu (Collective Ownership) – kod nie jest “prywatną własnością” pojedynczych deweloperów; każdy może poprawić każdy fragment, co sprzyja braniu odpowiedzialności przez cały zespół za całość projektu.

Brzmi intensywnie? XP faktycznie bywa nazywane “metodyką ekstremalną”, bo proponuje stosowanie najlepszych praktyk nie od czasu do czasu, ale cały czas – ciągłe code review (przez pair programming), ciągłe testowanie (TDD, CI), ciągłe planowanie (Planning Game – częste planowanie kolejnych iteracji), ciągłe wsparcie użytkownika (Customer on-site – klient lub jego reprezentant dostępny dla zespołu na bieżąco). W zamian daje jednak bardzo wysoką jakość i zdolność szybkiego reagowania na zmiany wymagań przy minimalnym ryzyku wprowadzania błędów. Wiele zespołów, które formalnie nie “robią XP”, i tak wykorzystuje jego elementy – np. Code Review, TDD, Refaktoryzację, programowanie peer programming – łącząc je ze Scrumem. Dla Ciebie ważne jest, by być świadomym tych praktyk. Gdy w projekcie usłyszysz np. o “parach” lub “jednostkowych testach pisanych przed kodem”, wiedz że to esencja Extreme Programming i że celem jest ułatwienie życia całemu zespołowi poprzez znalezienie błędów wcześnie i utrzymanie czystego kodu.

➡ ZOBACZ 👉: JUnit – Testy jednostkowe » tutorial dla bystrzaków

Coaching Agile i szkolenia Agile – wsparcie zwinnych zespołów

W transformacji na podejście zwinne dużą rolę odgrywa Agile Coach oraz różnego rodzaju szkolenia Agile. Agile coaching to proces, w którym doświadczony praktyk Agile (coach) pomaga zespołom i całej organizacji zrozumieć i skutecznie zaadaptować zasady Agile w codziennej pracy. Rolą Agile Coacha jest wsparcie zespołów w efektywnym wdrażaniu metodyk zwinnych oraz budowanie kultury ciągłego doskonalenia. Taki coach pełni trochę rolę mentora i konsultanta – obserwuje jak pracuje zespół, podpowiada ulepszenia (np. jak usprawnić spotkania, jak lepiej formułować user stories, jak przestrzegać DOD), uczy poprzez facylitowanie warsztatów i daje informację zwrotną. Jego praca koncentruje się na maksymalizacji wartości dostarczanej przez zespół i optymalizacji procesów, często też mediacji pomiędzy zespołem a resztą organizacji (np. tłumaczy menedżerom tradycyjnym, na czym polega zwinność i jakie korzyści przynosi.

Agile Coach różni się od Scrum Mastera zakresem – Scrum Master pracuje zazwyczaj z jednym (lub kilkoma) zespołami Scrum nad przestrzeganiem zasad Scrum, podczas gdy Agile Coach patrzy szerzej na całą organizację i wszystkie praktyki Agile, nie tylko Scrum. W praktyce jednak te role się przenikają i zależą od firmy – czasem Scrum Master bywa jednocześnie coachem dla organizacji. Dla juniora obecność Agile Coacha to świetna okazja, by uczyć się zwinnych praktyk od eksperta – nie bój się zadawać pytań, prosić o radę czy wsparcie. Coach jest po to, by ułatwić Tobie i zespołowi pracę w Agile.

Szkolenia Agile to z kolei formalne kursy, warsztaty i treningi, które mają na celu podniesienie wiedzy i umiejętności zespołu w zakresie metodyk zwinnych. Mogą to być np. szkolenia ze Scruma (przygotowujące do certyfikacji PSM lub CSM), warsztaty pisania User Stories, szkolenia z XP (np. TDD, Refactoring workshops) czy ogólne szkolenia z Agile Mindset. Takie szkolenia bywają prowadzone przez zewnętrznych trenerów lub wewnętrznych agile coachów. Ich rolą jest dostarczyć zespołom wspólnej bazy wiedzy – żeby każdy rozumiał pojęcia i wartości Agile – oraz praktyczne umiejętności (często poprzez symulacje i ćwiczenia). Przykładowo, firma może zorganizować dla deweloperów dwudniowe szkolenie z Scrum i Agile fundamentals, żeby nowy projekt wystartował ze wspólnym zrozumieniem zasad. Albo warsztat z automatyzacji testów dla programistów Java, co łączy się z praktykami XP i usprawni przyrostowe dostarczanie kodu.

Z perspektywy początkującego programisty warto brać udział w takich szkoleniach – pozwalają szybciej “wejść” w filozofię Agile i uniknąć błędów wynikających z przyzwyczajeń do pracy waterfall. Agile to nie tylko zestaw technik, to także zmiana sposobu myślenia o współpracy. Szkolenia i coaching są właśnie po to, by tę zmianę ułatwić. Jeśli Twoja firma oferuje Ci szkolenie Agile – skorzystaj! Nawet jeśli część wydaje się teoretyczna, potem w projekcie docenisz, że pewne sytuacje już przerabiałeś na warsztatach.

Agile w praktyce – przykłady zastosowania zasad

Na koniec zobaczmy, jak poszczególne zasady Agile wyglądają w codziennej pracy programistycznego zespołu. Poniżej kilka konkretnych przykładów:

  • User Story jako jednostka pracy: Zamiast pisać sformalizowane dokumenty wymagań, zespół Agile opisuje funkcjonalności w formie User Stories. Taka historyjka użytkownika to krótki opis potrzeby z punktu widzenia użytkownika, np.: „Jako zarejestrowany użytkownik, chcę móc zresetować zapomniane hasło, aby odzyskać dostęp do konta.” Taki opis od razu wskazuje kto (użytkownik), co (reset hasła) i po co (aby odzyskać dostęp). Developer w Javie, widząc taką historyjkę, może od razu myśleć o konkretnych zadaniach: stworzenie endpointu w Spring Boot do generowania linku resetującego, wysyłka e-maila z linkiem, formularz do ustawienia nowego hasła itd. User story jest krótkie i zrozumiałe dla wszystkich – ułatwia dyskusję z biznesem i testerami. Do każdej historyjki zespół uzgadnia kryteria akceptacji (co musi działać, żeby uznać ją za ukończoną), co później stanowi podstawę testów.
  • Krótkie cykle i częsty feedback: W podejściu Agile praca nad powyższą historyjką nie trwa pół roku – trafia ona do najbliższego sprintu (np. dwutygodniowego). Załóżmy, że w sprincie developerzy implementują tę funkcję resetowania hasła. Już po dwóch tygodniach mają działającą funkcjonalność na środowisku testowym. Następuje Sprint Review, na którym pokazują działanie funkcji Product Ownerowi (lub klientowi). Klient testuje: klika „Nie pamiętam hasła”, dostaje e-mail (np. wysyłany przez przygotowany moduł JavaMail), ustawia nowe hasło – wszystko działa. Daje feedback: “Funkcja działa ok, ale czy możemy dodać informację o sile nowego hasła?”. Zespół omawia to na retrospektywie i decyduje, że dodanie takiego wskaźnika to nowy Backlog Item na przyszły sprint. Dzięki takiemu króciutkiemu cyklowi projekt stale się rozwija zgodnie z oczekiwaniami użytkownika – klient czuje, że ma wpływ na kształt produktu, a programiści nie muszą zgadywać jego potrzeb. To dokładnie realizacja wartości “responding to change over following a plan” – plan może się zmienić co sprint, i to jest zaleta, nie wada.
  • Ciągła integracja i jakość kodu: W trakcie prac nad funkcją resetu hasła programiści regularnie integrują kod. Każdego dnia wszelkie zmiany są łączone na głównej gałęzi i automatycznie budowane przez serwer CI. Uruchamiają się testy jednostkowe (np. JUnit) sprawdzające, czy inne części aplikacji (np. logowanie, rejestracja) nadal działają. Jeśli coś się zepsuje, zespół od razu o tym wie (czerwony build) i może poprawić następnego dnia. Takie szybkie wykrywanie problemów to praktyczne zastosowanie zasady XP – Continuous Integration. Dodatkowo, programiści mogą praktykować Code Review: zanim kod trafi do głównej bazy, inny developer przegląda pull request. To trochę lżejsza forma par programming – również zwiększa jakość i dzielenie się wiedzą w zespole.
  • Ewolucyjne ulepszanie produktu: Po kilku sprintach aplikacja ma już podstawowe funkcje (np. logowanie, reset hasła, edycję profilu). Zespół otrzymuje jednak nowy wymóg biznesowy – integracja z zewnętrznym API (powiedzmy, logowanie przez Google). W Waterfallu taka zmiana w środku projektu byłaby trudna – wymaga renegocjacji umowy, dużo dodatkowej pracy naraz. W Agile zespół dodaje nową funkcjonalność iteracyjnie. Najpierw tworzy prostą wersję (tylko logowanie przez Google na środowisku testowym dla administratorów), pokazuje klientowi. Klient proponuje pewne zmiany (np. dodatkowe zabezpieczenia). W następnym sprincie zespół rozbudowuje to o te uwagi. Po dwóch iteracjach funkcja jest gotowa i wdrożona produkcyjnie. Taki ewolucyjny rozwój pozwala wypuszczać produkt na rynek wcześniej i dokładać kolejne elementy z czasem – użytkownicy końcowi nie muszą czekać na pełną “idealną” wersję, korzystają od razu z podstawowej, a update’y dostają często (np. co dwa tygodnie). To podejście przyrostowe znacznie zmniejsza ryzyko porażki projektu – nawet jeśli pewne ambitne plany nie zdążą być zrealizowane, i tak mają już działający system z podstawowymi funkcjami.
  • Zwinność także w zespole: Agile to nie tylko techniki, ale też pewna kultura pracy. Na co dzień możesz doświadczyć tego np. w sposobie rozwiązywania problemów. Gdy pojawi się trudny bug produkcyjny, zespół Agile zbierze się na swarm (naradę ad-hoc), wspólnie go przeanalizuje (ludzie i interakcje > procesy i narzędzia!) i szybko przypisze do naprawy, zamiast przechodzić przez wielostopniowe procedury eskalacji. Albo gdy junior developer utknie z zadaniem, w kulturze Agile zachęca się go, by poprosił o pomoc kolegę lub mentora – lepiej stracić godzinę pary programistów na wspólne debugowanie, niż dwie dni samotnej walki. Zespół scrumowy co retrospektywę szczerze rozmawia o tym, co można zrobić lepiej – np. “Za często przerywały nam pilne zgłoszenia w tym sprincie, ustalmy, że nowy hotfix może zaczynać tylko gdy PO zatwierdzi”. Takie podejście buduje atmosferę ciągłego uczenia się i usprawniania. Dla Ciebie oznacza to dynamiczne, angażujące środowisko pracy, gdzie Twoje pomysły i opinie również się liczą – nawet jako junior możesz zaproponować usprawnienie na retro czy zasugerować nowe narzędzie, jeśli widzisz ku temu okazję.

Agile podsumowanie

Na koniec warto podkreślić: Agile to nie silver bullet i nie zwalnia z myślenia. 😉 To, że pracujemy zwinnie, nie oznacza chaosu ani braku dokumentacji – oznacza po prostu, że najpierw dostarczamy wartość, a dopiero potem ewentualnie wypełniamy szablony. Dla młodego programisty praca w Agile to świetna szkoła – uczysz się współpracy, reagowania na feedback, dzielenia projektu na mniejsze części i dostarczania ich na czas. Nawet jeśli w przyszłości trafisz do organizacji pracującej tradycyjnie, zrozumienie zasad Agile pozwoli Ci wnosić świeże pomysły i usprawnienia. Powodzenia na Twojej zwinnej drodze programistycznej!

>> Odbierz szkolenie: 
„Od Junior Java Developera do Mida w rekordowym czasie”

No comments
Share:
Sprawny Programista Java - opinia Rafał

[Historia współpracy] z PL/SQL do Java

Historia współpracy.
Jak mentoring „Sprawny Programista Java” odmienił karierę Rafała.

„Tylko kursy” w dzisiejszym zwariowanym świecie to za mało…
Żeby osiągnąć sukces jako programista potrzebujesz czegoś więcej.

➤ Zobaczmy to na przykładzie.

Rafał dołączyć do mojej grupy pod koniec poprzedniego roku.

➤ Nie zaczynał od zera.

Miał już doświadczenie z programowaniem, głównie w pracy z bazami danych, ale czuł, że potrzebuje nowego bodźca.

Przyszedłem do Tomka, ponieważ oferował coś innego niż typowe kursy – prawdziwą współpracę. Nie chodziło tylko o teoretyczne materiały, ale o możliwość otrzymywania wsparcia na żywo, gdy pojawiały się wątpliwości” – opowiada Rafał.

➤ Co zrobiliśmy?

W ramach mentoringu Rafał rozpoczął pracę nad projektem, który nie tylko dawał mu solidną wiedzę techniczną, ale przede wszystkim tworzył wartość biznesową.

Razem rozwijaliśmy aplikację, która wykorzystywała Spring Boot, Spring Security, Kafkę, PostgreSQL i LLM, aby projekt mógł stać się mocnym punktem portfolio.

Dzięki współpracy z Tomkiem nie tylko wiedziałem, na czym się skupić, ale także szybko widziałem efekty – od realnych projektów w portfolio po zaproszenia na rozmowy z menadżerami” – podkreślił Rafał.

➤ Dlaczego to działa?

  • Wsparcie na żywo  – Bezpośredni kontakt z doświadczonym mentorem, który odpowiada na pytania w czasie rzeczywistym.
  • Realne projekty – Praca nad zadaniami, które możesz dumnie zaprezentować, zwiększając swoją wartość na rynku pracy.
  • Systematyczność i rozwój – Regularne spotkania i warsztaty budują nie tylko umiejętności, ale i pewność siebie oraz markę osobistą.

➤ Bądź jak Rafał!

Jeżeli czujesz, że nadszedł czas na rozwój i chcesz dowiedzieć się, jak mentoring „Sprawny programista java” może pomóc Ci przejść z poziomu juniora na mid lub w znalezieniu pracy jako programista.

Napisz do mnie, porozmawiajmy – postaram się coś podpowiedzieć.

>> Obejrzyj nagranie i zobacz jak pracujemy

No comments
Share:

Jak Moi Kursanci Zarobili Pierwsze Pieniądze na Programowaniu! 💸💰💵🤑 Case Study

Zarabianie pierwszych pieniędzy na programowaniu jest momentem przełomowym dla każdego początkującego developera. Jako mentor z ponad 15-letnim doświadczeniem w nauczaniu i prowadzeniu kursów online, miałem przyjemność prowadzić wielu młodych programistów przez ten proces.

Dzisiaj chciałbym podzielić się historią, jak pomogłem dwóm kursantów nie tylko zdobyć cenne umiejętności, ale również zarobić ich pierwsze pieniądze.

Pierwszy Kontakt

Wszystko zaczęło się, gdy zgłosił się do mnie nowy klient z potrzebą realizacji projektu programistycznego. Zdając sobie sprawę z ogromnej wartości praktycznego doświadczenia, postanowiłem, że to świetna okazja dla moich kursantów.

Case study, Bot, Start

Brzmi jak przygoda!

Ogłosiłem na grupie KierunekJava, że poszukuję chętnych do pracy nad realnym projektem.
Reakcja była natychmiastowa 🙂

Case study, Bot, Przygoda

Organizacja i Planowanie

Po zebraniu zespołu, wziąłem na siebie odpowiedzialność za komunikację z klientem i zebranie szczegółowych wymagań projektu.

Wspólnie z klientem ustaliliśmy cele projektu i omówiliśmy wizję końcowego produktu. Było to nieocenione doświadczenie dla kursantów, którzy mogli zobaczyć, jak wygląda współpraca z klientem w realnym świecie IT.

Praca nad Projektem

W trakcie realizacji projektu, prowadziłem regularne konsultacje, gdzie przegadaliśmy proof of concept i ustalaliśmy dalsze kierunki rozwoju.

Kursanci pracowali nad kodem, który ja regularnie sprawdzałem, wykonując code review. To nie tylko podniosło jakość kodu, ale również stanowiło cenną naukę dla każdego z nich.

➡ ZOBACZ 👉: Code Review – Nie wiesz jak pisać lepszy kod? Skup się na code review (przegląd kodu)!

Prezentacja i Finalizacja

Gdy projekt był gotowy, zorganizowaliśmy demo dla klienta. Prezentacja przebiegła pomyślnie, a aplikacja została zaakceptowana bez potrzeby dalszych poprawek.

Klient był tak zadowolony, że nie tylko szybko zgodził się na płatność, ale również wyraził chęć dalszej współpracy! 😍

Refleksje i Wnioski

Ten projekt był więcej niż tylko zwykłą nauką programowania. Był to kurs przechodzenia od teorii do praktyki, który zakończył się realnym sukcesem komercyjnym.

Dzięki temu doświadczeniu, moi kursanci nie tylko zarobili swoje pierwsze pieniądze jako programiści, ale również zdobyli pewność siebie i motywację do dalszego rozwoju w branży IT.

Wrażenia i opinia

Kierunek Java

Chcesz wziąć udział w podobnych projektach i rozpocząć swoją karierę w IT? Dowiedz się więcej o współpracy i możliwościach, które oferujemy na Kierunek Java.

 

 

 

No comments
Share:
Nie daj się zastąpić!

AI vs Człowiek! To będzie prawdziwa walka! Nie Daj Się Zastąpić! ⚔️🥊💥🤼

Hej 👋
Czytelniku, nie wiem, czy wiesz? – ale przyszłość jest już dziś… 🤯

Pamiętasz te stare filmy w stylu: „Powrót do przyszłości”, czy „Terminator”? 🤖⏱️📡

Te klasyki z pewnością miały wpływ na to jak dziś myślimy o rozwoju technologii i sztucznej inteligencji (AI).
Dziś po latach lubię do nich wracać – ale tym razem z całkowicie innego powodu.

Oglądając tego typu filmy z dzisiejszej perspektywy

  • możemy zobaczyć, jak ludzie kiedyś wyobrażali sobie przyszłość,
  • czego spodziewali się w kontekście rozwoju technologii,
  • ale również czego się obawiali…

Wiele z tych rzeczy rzeczywiście się spełniło. Niektóre wyglądają całkowicie inaczej, a niektóre problemy dalej czekają na ich rozwiązanie…

Co w takim razie AI może już dziś?

Z reguły przeceniamy to, co AI może zrobić już teraz,
a nie doceniamy tego, co będzie możliwe w perspektywie kolejnych 5-10 lat.

Podam Ci jednak kilka przykładów,
na to, co jest możliwe już teraz 👇

1. Autonomiczne samochody 🏎️🚚🚔

AI autonomiczne samochody

Sztuczna inteligencja (AI) już dziś zmienia świat transportu.
Algorytmy w autonomicznych samochodach
mogą analizować niezliczone ilości danych w ułamku sekundy
– znacznie szybciej i dokładniej niż ludzki kierowca…

Dzięki temu AI może przewidywać i reagować na zmieniające się warunki drogowe,
zapewniając bezpieczniejszą i bardziej efektywną jazdę.

W przeciwieństwie do człowieka
– takie algorytmy nie meczą się,
nie próbują się popisać przed dziewczyną
i nie siadają za kółko po kilku głębszych…

Nie mówimy tutaj już tylko o automatycznie sterowanej Tesli na kampusie w Kalifornii…
Mówimy o technologii, która potencjalnie może odmienić jedną z największych branży na świecie, czyli transport!

To jak jeździsz na wakacje,
to jak Twoje dziecko jedzie do szkoły,
czy to jak dostarczana jest Twoja pizza…

Czekamy jeszcze na ustawodawców i na to, aż ludzie przestaną się bać – ale technologia już jest.

2. Przetwarzanie języka naturalnego, czyli rozmowa z AI

AI rozmowa

Próbowałeś „porozmawiać” z ChatGPT?
Tak, porozmawiać!
Wielkie modele językowe w stylu GPT-4 są już na tyle zaawansowane,
że z powodzeniem radzą sobie w prowadzeniu prostej rozmowy na praktycznie dowolny temat.

A to i tak przy założeniu,
że 9 na 10 użytkowników korzysta z nich niepoprawnie…

Rozmowa z AI jest na swój sposób specyficzna.
Przypomina trochę rozmowę z kimś zamkniętym w pokoju
i możemy się z nim komunikować tylko przez dziurkę od klucza… 🔐
A co za tym idzie,
musimy mu wszystko dokładnie opowiedzieć, bo on nie ma naszego kontekstu.
Jeżeli mu go nie podasz, to będzie zmuszony zgadywać i pewnie się nie dogadacie. 🤷‍♂️

Ten nasz zamknięty w pokoju towarzysz jest jednak bardzo łepski
i ma dostęp do niewyobrażalnej wręcz ilości informacji.

Wiedziałeś np. że takie modele mogą zmieniać kontekst
i wcielać się niczym kameleon w konkretną osobę? 🐍

Możesz np. spytać Billa Gatesa,
co myśli na temat Twojego nowo napisanego wierszyka… 🙃
btw. taki wierszyk na zadany przez Ciebie temat może być też napisany
np. stylem Williama Shakespeare, czy Jana Brzechwy! 🤯

Takie modele możemy też „nakarmić” naszymi prywatnymi treściami
i np. na bazie archiwalnych listów stworzyć awatar Twojej zmarłej babci…
Wiem, że to jest przerażające – ale tak, technicznie takie rzeczy są już możliwe.

3. Awatary audio i wideo

Deepfake Duda

Jeżeli jesteśmy już przy awatarach, to nie musimy ograniczać się tylko do tekstu. Korzystając z takich narzędzi jak veed, synthesia, czy heygen możemy sklonować nasz głos i wygląd.

Możesz np. wykorzystać przed chwilą wygenerowany wierszyk, a następnie przy pomocy AI wygenerować filmik już bez Twojego udziału.

Jak możesz się spodziewać, ludzie nie poprzestają tylko i wyłącznie na klonowaniu własnego głosu. W sieci możesz znaleźć całą masę tak zwanych deepfake, czyli przerobionych zdjęć i filmów wideo np. polityków wypowiadających wojnę lub aktorek w niejednoznacznej sytuacji…

Zobacz np. na filmik z Gatesem, czy Dudą.

4. Medycyna

Całe szczęście AI można też wykorzystać w dobrych celach! 🙃

Niech za przykład posłużą nam tym razem systemy, które pozwalają analizować zdjęcia rentgenowskie. Dzięki nim możemy np. wykryć raka lub inne schorzenie w bardzo wczesnym stadium rozwoju. Czyli na tak wczesnym etapie, że człowiek samodzielnie nie jest jeszcze w stanie tego zrobić.

Tego typu asystent lekarza może okazać się przyszłością naszej medycyny.
Wyobraź sobie specjalistę, który:

  • pracuje 24h na dobę bez zmęczenia,
  • nie starzeje się, nie chodzi na urlopy, czy na emeryturę,
  • posiada wiedzę wszystkich dotychczasowych lekarzy
  • i wszystkich zdiagnozowanych przypadków na całym świecie,
  • a w dodatku możesz go stosunkowo prosto sklonować…

Przyszłość jest już dziś… 🤯

5. Programowanie

Czy w takim razie rozwój AI wpłynie też na nas programistów?

A jakżeby inaczej! 🙂

  • Łatwiejszy i szybszy dostęp do informacji,
  • generowanie powtarzalnych fragmentów kodu,
  • automatyczne code review
  • i wiele wiele innych…

Nie ma wątpliwości, że i nasza praca bardzo bardzo mocno się zmieni.

Już teraz nie wyobrażam sobie pracy jako programista bez tych wszystkich „zabawek”, które dostałem w ostatnim czasie.
Po co mam coś robić ręcznie, skoro cały dotychczasowy dzień pracy mogę skondensować do 30-45m pracy z nowymi technologiami…

Czy w takim razie czeka nas koniec ludzkości?… AI koniec ludzi

Nie da się ukryć, że świat, który znamy się zmienia. To co było już nie wróci, a z dużym prawdopodobieństwem możemy spodziewać się kolejnych, iście rewolucyjnych, zmian…

Osoby, które wykonują proste powtarzalne zadania, które łatwo da się zautomatyzować, z pewnością będą mieli problem.

  • Kasy samoobsługowe sukcesywnie zastępują kasjerów.
  • ChatGPT zrewolucjonizował to, jak piszemy różnego rodzaju teksty, co odbiło się na copywriterach.
  • Pracownicy obsługi klienta – często są zastępowani przez automatyczne chatboty.

Z pewnością wiele zawodów przestanie być potrzebnych…
Wiele osób będzie musiało się przebranżowić i dostosować do nowych realiów.

Czy to jednak będzie oznaczało, że czeka nas koniec ludzkości?…
No nie… A przynajmniej jeszcze nie teraz 🙂

Ale z pewnością będzie to prawdziwa walka!

To będzie prawdziwa walka!

Wszystkie zmiany wymagają czasu.
To, że mamy technologię nie znaczy, że wiemy jak z niej skorzystać.
Albo, że mamy jak ją wdrożyć na szeroką skalę w społeczeństwie.

AI nie jest (i raczej nieprędko będzie na poziomie naszych strachów choćby ze wspomnianego Terminatora).
Ale…

Najbliższe lata to z pewnością będzie ostra walka.
Walka NIE między ludzkością, a AI
– a między ludźmi, którzy korzystają z najnowszych narzędzi i tych, którzy nie wiedzą jak…

Czasy nadludzi i super freelancerów

AI współpraca

Wyobraź sobie programistę, który korzystając z armii swoich wirtualnych robotów i automatyzacji może realizować projekty, które obecnie realizują 20-30 osobowe zespoły w korporacji…

To dzieje się już teraz.
Takie osoby np. prowadzą jednocześnie kilka firm i jeszcze mają dużo czasu wolnego dla siebie i dla rodziny.

Także najbliższe lata, to nie będzie walka pokroju tej z Terminatora, ale powolne zastępowanie. Powolne podgryzanie… tych firm i ludzi, którzy robią coś starymi sposobami i metodami.

Nie daj się zastąpić…

Nie pierwszy raz w historii musimy mierzyć się z podobnymi wyzwaniami.

  • Wprowadzenie pługu, czy później wielkoobszarowych maszyn rolniczych.
  • Kalkulator dla matematyków.
  • Maszyna parowa…

Za każdym razem część zawodów ginęła, ale pojawiały się też całkowicie nowe.

Dalej możesz być programistą…
– ale jednak na całkiem innych zasadach!!

Dołącz ze mną do tej fascynującej przygody!

Przed nami wspólna przygoda i jestem przekonany, że będzie to również wspaniała zabawa!

Zapraszam Cię do nowego projektu: „Kierunek AI”,
gdzie pokażę Ci jak wykorzystać sztuczną inteligencję do swoich celów
i jak nie dać się zastąpić! 💪

https://kierunek.dev/ai

Wszystkiego dobrego!

Zaczynamy! 🚀

Tomek

No comments
Share:

Jesteś pesymistą, czy realistą – i dlaczego nie masz racji?…

Jestem optymistą ALE…

1. ALE – wszystko, co przed ALE nie ma znaczenia…

To jesteś tym optymistą, czy nie jesteś?
True or False?

Dużo osób mówi, że czuje się REALISTĄ.
A ja to widzę jako typowy objaw pesymizmu…

2. Warto być bezwarunkowym optymistą!

Niby nie mamy pewności,
czy optymizm wpływa pozytywnie na nasze życie
(chociaż ja śmiem twierdzić, że tak jest!).

Mamy jednak pewność, że negatywne myślenie na 100% jest ZŁE!

3. Nie, wcale nie chodzi o to, że nie widzisz tego całego gówna…

Idziesz chodnikiem.
Patrzysz, a tam na środku wielkie psie 💩

Jak ja widzę zachowanie pesymistów?
A wejdę w to 💩,
żebym później mógł narzekać
i wszystkim opowiadać jak ja to mam ciężko i jaki ten świat jest zły…

4. Optymizm (mimo iż nie wygląda) też jest umiejętnością!

A co za tym, idzie można się tego nauczyć.

Naprawdę można.
Trochę to trwa, ale się da.

Spróbuj.

5. Jak zostać optymistą z wyboru?

Za każdym razem gdy łapiesz się na tym, że coś oceniasz
– spróbuj świadomie skupić się na tej jaśniejszej stronie.

Pada deszcz i jest Ci mokro?
⇒ Będzie lepsze powietrze i przyjemniej się oddycha.

Trudno jest Ci znaleźć pracę?
⇒ Twoi kontrkandydaci też muszą się z tym mierzyć.
A Ty możesz wygrać z nimi swoją wytrwałością!

Zwolnienie z pracy?
⇒ Może to jest dobra okazja na zmiany?…

6. Nie możesz nic wymyślić?

Jeżeli już naprawdę nie widzisz pozytywów,
to pomyśl o tym jak o treningu głowy.

Kłótnia w domu. ⇒ Trening.
Złamałem nogę. ⇒ Trening.
Problem w pracy. ⇒ Trening…

Za mocne? A jaki masz inny wybór…

Może dzięki tej sytuacji wzmocnisz się
i w przyszłości uchroni Cię to przed jeszcze większym bagnem?

Nie ma pewności, ale jest duża szansa.

7. Możesz zmienić świat

To jak podchodzimy do codziennych spraw ma realny wpływ na nasze decyzje.

A Twoje decyzje mają już realny wpływ na Twoje życie.
Mogą zmienić Twoje życie.

Pesymista 😔
⇒ Jestem głupi i z pewnością mi się nie uda, dlatego nawet nie spróbuję 🙁

Optymista 🙂
⇒ Nie mam pojęcia jak to zrobić, nigdy wcześniej tego nie robiłem.
Przynajmniej spróbuję, bo nie mam nic do stracenia.

Twoje życie, Twoje wybory.

Powodzenia!
Tomek

 

No comments
Share:
Przewaga nowoczesnego programisty

7 Kluczowych Umiejętności, Które Zapewniają Przewagę Na Rynku Dla Nowoczesnego (i Początkującego) Programisty

Miękkie umiejętności odgrywają kluczową rolę w karierze programisty, często okazując się nawet ważniejsze niż aktualna wiedza techniczna, czy analityczne myślenie. Szczególnie na początku drogi zawodowej jako programista.

7 Kluczowych Umiejętności, Które Zapewniają Przewagę Na Rynku Dla Nowoczesnego (i Początkującego) Programisty – wprowadzenie

Z tego materiału dowiesz się:

  • Czy polscy programiści są najlepsi na świecie?
  • Które umiejętności zapewnią Ci przewagę na rynku pracy?
  • Czy jesteś przyszłym programistą, który osiągnie sukces?

7 Kluczowych Umiejętności, Które Zapewniają Przewagę Na Rynku Dla Nowoczesnego (i Początkującego) Programisty – słowem wstępu

Nazywam się Tomasz Woliński i jestem programistą Java od 18 już lat.

Zaczynałem od zupełnego zera. Nic nie umiałem, nie miałem znajomości, nie znałem języka angielskiego, a nawet miałem dość mocno ograniczony dostęp do Internetu. Trudne czasy, ale nauczyło mnie to pokory i wielu cennych umiejętności.

Dziś jako programista, ale też trener programowania prowadzę własną działalność, realizuje międzynarodowe projekty dla bardzo znanych firm – takich jak SAP, Nordea, czy Siemens. Prowadzę swoją szkołę programowania, zatrudniam programistów oraz rekrutuje stale nowych.

Przez ostanie 5 lata miałem do czynienia z setkami początkujących programistów – zarówno na stacjonarnych bootcampach jak i w ramach mojego programu mentoringowego KierunekJava.

I zauważyłem, że istnieją pewne cechy programisty, który stanie się nie tylko bardzo bogaty w ciągu 1-3 lat, ale również będzie specjalistą rozchwytywanym na cały świat w programowaniu.

Bo musisz wiedzieć, że Polscy Programiści są uważani za jednych z najlepszych na świcie i potwierdza to wiele rankingów. Jakiś czas temu portal HackerRank (popularny serwis z zadaniami dla programistów) opublikował ranking z podziałem na Kraje, w którym Polska została sklasyfikowana na 3 pozycji, zaraz po Chinach i Rosji.

programista

 

➡ ZOBACZ 👉: Umiejętności i kompetencje miękkie – soft skills

7 Kluczowych Umiejętności, Które Zapewniają Przewagę Na Rynku Dla Nowoczesnego (i Początkującego) Programisty – rady

Oto 7 cech, które możesz nabyć i stać się bogatym programistów i jednym z topowych specjalistów w Polsce:

➡ ZOBACZ 👉: Sztuczna inteligencja

1. Adaptacja do zmieniającego się środowiska

Branża IT szybko się rozwija, a technologie, które dzisiaj są na topie, jutro mogą stać się przestarzałe.
Jeszcze nie tak dawno AI, kojarzyła się większości osób z filmami science fiction – a dziś jest już całkowicie normalne, że wykorzystujemy ją w swojej pracy.
Do tego stopnia, że mi osobiście chwilami trudno jest sobie przypomnieć jak mogłem to robić bez niej…

Umiejętność szybkiej adaptacji i nauki nowych rzeczy jest więc bardziej wartościowa niż bieżąca wiedza, która może szybko stracić na aktualności.

Jest to akurat dosyć skrajny przypadek, ale dobrze pokazuje, że podejście popularne w pokoleniu naszych rodziców – czyli nauczę się umiejętności na 5-letnich studiach i potem przez większość dorosłego życia będę z nich korzystał – w dzisiejszym szybko zmieniającym się świecie traci rację bytu.

2. Rozwój kompetencji interpersonalnych

W świecie, gdzie programowanie staje się coraz częściej grą zespołową, umiejętności takie jak komunikacja, praca w zespole i zarządzanie konfliktami są niezbędne do efektywnej współpracy.

Nawet najlepsza wiedza techniczna nie zastąpi zdolności do efektywnego komunikowania się i budowania relacji z innymi.

Ok, wiedza techniczna jest bardzo ważna – ale nie zapominajmy, że to nie wszystko.

Przeciętny programista spędza bardzo dużo czasu na różnego rodzaju spotkaniach podczas, których ustalamy jak będziemy pracować, co jest do zrobienia itp.

W moim obecnym projekcie nad rozwijanym produktem pracuje około 50 osób, które zostały podzielone na mniejsze zespoły. Taki ogrom ludzi sprawia, że ten aspekt związany z komunikacją jest niezwykle ważny.

3. Rozwiązywanie problemów

W programowaniu często napotyka się na nieoczekiwane wyzwania.

Najróżniejszego typu – każdy, kto chociaż raz był w projekcie i próbował zaimplementować coś większego wie, o czym tutaj mówię.

Umiejętność kreatywnego myślenia i znajdowania niestandardowych rozwiązań jest nieoceniona, a to wymaga więcej niż tylko wiedzy technicznej; wymaga elastyczności umysłu i otwartości na nowe podejścia.

Problemy komunikacyjna, korporacyjne – ale tak, też techniczne.

Problem z dostępem do danych, niedziałające środowisko, ktoś na urlopie
– to codzienność, z którą musimy sobie radzić.

Pracujemy na różnych problemach, na które często nie ma jednoznacznej odpowiedzi,
a trzeba sobie z tym radzić.
Dlatego zadajemy pytania i szukamy informacji. – czyli uczymy się rozwiązywać nie do końca zdefiniowane problemy.

➡ ZOBACZ 👉: CV Programisty – Twojego CV nikt nie czyta! Sprawdzone sposoby na zhakowanie rekrutacji i CV!

4. Samodyscyplina i zarządzanie czasem

W erze pracy zdalnej i elastycznych godzin pracy, umiejętność samodzielnego zarządzania czasem i dyscyplina są kluczowe do utrzymania produktywności i skuteczności.

Mój przykład: Wstaję rano, prawie że, o której chcę. Mam jedno spotkanie od poniedziałku do czwartku – zazwyczaj o 10:30 – przez 15 minut a jak nie mogę to piszę wiadomość.

Mogę pracować od siebie z domu, od rodziców, czy z dowolnego innego miejsca na świecie.

Bardzo komfortowe warunki – ale jest pewien haczyk. Skoro nikt nad Tobą nie stoi i nikt Cię nie pilnuje, to trzeba wykazać się samodyscypliną i umiejętnością zarządzania czasem – by zwyczajnie coś zrobić.

Podobnie jest z samą nauką programowania.

Rozumiem jednak, że nie jest to takie proste. Sama nauka programowania NIE jest trudna, Choć w początkowym okresie trudno utrzymać motywację i skupienie… Trochę jak z ćwiczeniami i dietą – wiesz, że to dla Ciebie dobre, ale ten kebab wieczorem i piwko kusi 🙂

Strategie na podtrzymanie motywacji przy minimalnym wysiłku

Regularne rozliczanie efektów – spotkania z mentorem przynajmniej raz w tygodniu Trochę głupio przyjść na spotkanie bez pracy domowej 🙂

Mentor podpowie, wyjaśni co niezrozumiałe. Po pewnym czasie widać efekt procentu składanego. Ucz się tylko tego, co niezbędne! Dobre materiały i mentor, który doradzi, co ma znaczenie, a co można teraz odpuścić

Jak znaleźć czas i motywację na naukę?

Jakie jest Twoje DLACZEGO? Po co to robisz? Uczyć się tego, co trzeba, a nie głupot… Możliwie jak najmniej! I szybko pójść do pracy Indywidualna ścieżka edukacji, każdy co innego. Rób to, co CIEBIE interesuje najbardziej.

➡ ZOBACZ 👉: Nauka programowania – jak się uczyć programowania, mimo braku czasu i motywacji

5. Skupienie na detalu i dbanie o jakość

W programowaniu nawet drobne błędy mogą mieć duże konsekwencje.

Przykładowo – błąd w zapisie danych, który nie zostanie wcześniej wyłapany – może doprowadzić do bezpowrotnej utraty informacji w systemie produkcyjnym.
Użytkownik próbuje zapisać dane, ale mu się to nie udaje – właśnie przez nasz błąd.

Utrata danych, niezadowolenie klienta i potencjalnie strata pieniędzy i czasu.
Nic przyjemnego.

Dlatego – zdolność do koncentracji i uwagi na detale to cechy, które przekładają się na jakość i niezawodność kodu i są bardzo w cenie.

Całe szczęście mamy też różnego rodzaju rozwiązania i procesy,
które pomagają nam zadbać o jakość kodu.
Dla przykładu automatyczne testy regresji, które potwierdzają, czy aplikacja dalej działa tak jak powinna po naszej zmianie.

Zazwyczaj też droga, jaką musi pokonać nowa funkcjonalność od komputera programisty do serwera produkcyjnego jest tak zaprojektowana, że dana zmiana musi przejść przez różne serwery testowe – co dodatkowo zwiększa szansę na wyłapanie ewentualnych niedoróbek.

6. Cierpliwość i wytrwałość

Programowanie często wymaga godzin prób i błędów.
Dlatego posiadanie cierpliwości i wytrwałości w rozwiązywaniu problemów jest równie ważne jak techniczne umiejętności.

Programowania nie nauczysz się w tydzień, czy nawet miesiąc.
Mamy co prawda speedrunnerów co w 4 miesiące potrafią to ogarnąć, ale jednak to rzadkość – trzeba liczyć te 10 m-cy/rok intensywnej pracy, szczególnie gdy zaczynamy od zera.

7. Nauka przez całe życie

Dostałem pierwszą pracę w IT jako programista i co teraz?

Koniec mojej nauki? no niekoniecznie 😉
Można wręcz powiedzieć, że to dopiero początek.
Tylko teraz już na całkowicie innych zasadach.

W IT nieustanna nauka jest czymś normalnym i niejako wpisanym w naszą codzienną pracę.
Przykładowo – masz do napisania funkcjonalność gdzie będzie wykorzystywana baza NoSQL, to najpierw dostajesz trochę czasu w godzinach pracy, żeby nauczyć się przynajmniej podstaw tej technologii – a później doszkalasz się już podczas samej implementacji.
I tak sukcesywnie zdobywasz coraz to nowe kompetencje.

Ważne jest jednak, by chcieć się uczyć i chcieć się dalej rozwijać.
Szczególnie że warto to robić – bo zdobywając nowe kompetencje, zwiększamy swoją wartość na rynku pracy.

7 Kluczowych Umiejętności, Które Zapewniają Przewagę Na Rynku Dla Nowoczesnego (i Początkującego) Programisty – podsumowanie

  • To tyle jeżeli chodzi o – 7 Kluczowych Umiejętności, Które Zapewniają Przewagę Na Rynku Dla Nowoczesnego (i Początkującego) Programisty
  • Jestem przekonany, że inwestując swój czas właśnie w te 7 obszarów, zdobędziesz przewagę nad konkurencją i zapewnisz sobie dużo lepszy start w IT
  • Na koniec zapraszam Cię do odwiedzenia strony – 👉 https://stormit.pl/test-predyspozycji

 

Przygotowaliśmy dla Ciebie specjalną listę kontrolną, która pomoże Ci ocenić, czy programowanie jest ścieżką kariery odpowiednią dla Ciebie.

Ta lista skupia się na kluczowych umiejętnościach i predyspozycjach, które są ważne dla każdego programisty, niezależnie od poziomu doświadczenia. A jeśli chcesz zostać bogatym programistą, to musisz odpowiedzieć sobie na poniższe pytania.

Znajdziesz tu pytania dotyczące różnych aspektów, od analitycznego myślenia, przez umiejętność pracy w zespole, aż po adaptację do zmian i rozwiązywanie problemów.

Przejrzyj każdy punkt i odpowiedz sobie szczerze „tak” lub „nie”.

Każde „tak” to jeden punkt.

Na końcu podlicz swoje punkty i sprawdź, w której kategorii się znajdujesz. Czy to dopiero początek Twojej drogi w IT, czy już jesteś na dobrej drodze do zostania rozchwytywanym specjalistą?

Pamiętaj, że ta lista to narzędzie motywacyjne – niezależnie od wyniku, zawsze możesz rozwijać swoje umiejętności i dążyć do celu. Powodzenia!

Dzięki za wspólnie spędzony czas i do usłyszenia.

No comments
Share:
Programowanie jest jak pływanie

Programowanie jest jak pływanie 🏊💦

  1. Programowanie jest jak pływanie 🏊💦
    Wpadłbyś na pomysł, żeby uczyć się pływania
    – tylko czytając o tym książki, albo oglądając tutoriale na YT?…
    Szczerze wątpię 🙂
    A jeżeli TAK, to nie wróżę Ci zbytnich sukcesów…
  2. To dlaczego na litość boską 🤯
    tak dużo osób uczy się programowania właśnie w taki sposób!?
  3. Pobrudzić sobie ręce kodem
    Żeby nauczyć się programowania musisz usiąść do komputera.
    Musisz zacząć pisać kod.
    MUSISZ POBRUDZIĆ SOBIE RĘCE KODEM !!!
    Innej drogi nie ma…
  4. Zacznij od czegoś małego
    Tak samo jak z pływaniem 🌪️⛈️⚡🌩️
    – nie zaczynasz od wzburzonego morza, a od brodzika… 👶🍼
    Składnia języka, proste przykłady, małe aplikacje.
    Najlepiej realne problemy:

    • Średnia wieku członków Twojej rodziny
    • Ile dni zostało Ci do emerytury…
    • itp. itd.
  5. Sukcesywnie zwiększaj poziom trudności
    Coraz większe projekty, Coraz większa pewność siebie.
    Ale wszystko w swoim czasie.
    Step, by step…
  6. Proces jest Twoim przyjacielem
    Koduj codziennie. 🗓️
    Nawet 30 minut dziennie może zdziałać cuda.
    Po tygodniu nie zauważysz różnicy. Ale po miesiącu? Po roku? Zaufaj procesowi. 📈
    Proces jest Twoim przyjacielem!
  7. Przygotuj się na błędy i niepowodzenia
    W programowaniu jak w życiu błędy są nieuniknione, ale każdy z nich to cenna lekcja.
    Programista jest wart, tyle ile jego doświadczenie
    – czyli tyle ile zrobił wdrożeń i ile rozwiązał problemów.
  8. Praktyka i sztuka
    Programowanie to dziedzina na pograniczu nauk ścisłych oraz sztuki.
    Niektórzy jeszcze mówią, że magii 😁
    To powoduje, że czasem dość trudno jest precyzyjnie określić „idealne rozwiązanie”.
    Dlatego często ograniczamy się do dobrych praktyk + oraz właśnie praktyki! To wszystko i wiele wiele więcej!
    Znajdziesz w naszych społecznościach.
    Zapraszam 🤝
    i powodzenia!

 

No comments
Share: