{"id":10984,"date":"2026-03-06T06:09:23","date_gmt":"2026-03-05T22:09:23","guid":{"rendered":"https:\/\/www.archimetric.com\/pl\/lean-agile-approach-action\/"},"modified":"2026-03-06T06:09:23","modified_gmt":"2026-03-05T22:09:23","slug":"lean-agile-approach-action","status":"publish","type":"post","link":"https:\/\/www.archimetric.com\/pl\/lean-agile-approach-action\/","title":{"rendered":"Zastosowanie podej\u015bcia Lean Agile w praktyce"},"content":{"rendered":"<header class=\"entry-header\">\n<div class=\"entry-title-subtitle\">\n<p class=\"entry-title\">Zastosowanie podej\u015bcia Lean Agile w praktyce<\/p>\n<div class=\"sub-title\">\n<div class=\"autor-fecha\"><span class=\"autor-in-full-posts\"><i class=\"fa fa-user\"><\/i> <a href=\"https:\/\/blog.visual-paradigm.com\/index.php\/author\/curtis-tsang\/\">Curtis Tsang<\/a>\u00a0\u00a0<\/span> <span class=\"fecha-in-full-posts\"><i class=\"fa fa-calendar-o\"><\/i> 4 sierpnia 2016<\/span><span class=\"comments-in-full-posts\"><i class=\"fa fa-comment-o\"><\/i> <a data-disqus-identifier=\"108 https:\/\/blog.visual-paradigm.com\/?p=108\" href=\"https:\/\/blog.visual-paradigm.com\/index.php\/2016\/08\/04\/lean-agile-approach-in-action\/#disqus_thread\">1 Komentarz<\/a><\/span><\/div>\n<\/div>\n<\/div>\n<\/header>\n<div class=\"sub-title-widget-area\"><\/div>\n<div class=\"entry-content\">\n<h2><b>Przyk\u0142ad portalu studenta<\/b><\/h2>\n<p>Kolegium spo\u0142eczne chce stworzy\u0107 portal dla student\u00f3w, kt\u00f3ry b\u0119dzie oferowa\u0142 us\u0142ugi online. Zaproszono przedstawiciela student\u00f3w, pracownik\u00f3w z wydzia\u0142u oraz cz\u0142onk\u00f3w zespo\u0142u administrator\u00f3w portalu, aby utworzy\u0107 zesp\u00f3\u0142 uczestnicz\u0105cy w projekcie tworzenia portalu studenta. Oto notatki z pierwszej spotkania.<\/p>\n<p><b>Spotkanie z interesariuszami<\/b><\/p>\n<p>Agenda<\/p>\n<ul>\n<li>Zaproponuj funkcje dla portalu studenta<\/li>\n<li>Om\u00f3w realno\u015b\u0107 zaproponowanej listy funkcji<\/li>\n<li>Zidentyfikuj priorytety funkcji do zaimplementowania jako podstawowe, nast\u0119pna partia, po\u017c\u0105dane \u2026<\/li>\n<\/ul>\n<p>Steve (Zesp\u00f3\u0142 programist\u00f3w): Witamy\u2026 Chcemy, aby spotkanie by\u0142o bardziej produktywne i skuteczne. Gdy proponujecie funkcje, kt\u00f3re chcieliby\u015bcie mie\u0107, mo\u017cemy u\u017cy\u0107 nast\u0119puj\u0105cego formatu jako standardowego sposobu wyra\u017cania: kto (kim jeste\u015b), co (chcesz), i dlaczego (chcesz to zrobi\u0107)\u2026 Te funkcje zostan\u0105 zapisane jako historie u\u017cytkownika, kt\u00f3re b\u0119d\u0105 u\u017cywane jako narz\u0119dzie komunikacji w ca\u0142ym projekcie.<\/p>\n<p>Nast\u0119pnie przeprowadzili\u015bmy m\u00f3zgowy szturm, aby stworzy\u0107 list\u0119 historii u\u017cytkownika od r\u00f3\u017cnych interesariuszy:<\/p>\n<p>Przedstawiciel student\u00f3w: zapisz si\u0119 na kursy, zap\u0142a\u0107 za op\u0142at\u0119 za studia, zobacz harmonogram, edytuj harmonogram, zobacz kart\u0119 ocen, rezygnuj z kurs\u00f3w \u2026<\/p>\n<p>Przedstawiciel akademicki: dodaj informacje o kursie, edytuj informacje o kursie, usu\u0144 informacje o kursie \u2026<\/p>\n<p>Administrator portalu: zr\u00f3b kopi\u0119 zapasow\u0105 informacji o kursie, edytuj status konta studenta<\/p>\n<p>Teraz mamy kilka kart, kt\u00f3re mo\u017cna uporz\u0105dkowa\u0107 w rz\u0119dach i kolumnach<\/p>\n<p><img alt=\"User Story\" class=\"alignnone wp-image-109\" decoding=\"async\" height=\"278\" loading=\"lazy\" src=\"https:\/\/www.archimetric.com\/wp-content\/uploads\/2022\/02\/User-Story.jpg\" width=\"449\"\/><\/p>\n<p>Priorytetyzacja zaproponowanych funkcji<\/p>\n<p>Reprezentant programisty: Mamy list\u0119 priorytetowych historii u\u017cytkownika do zaimplementowania w kolejnej iteracji. Aby to zrobi\u0107, musimy szczeg\u00f3\u0142owo przeanalizowa\u0107 ka\u017cd\u0105 histori\u0119 u\u017cytkownika, aby uzyska\u0107 wi\u0119cej informacji. Przejd\u017amy przez pierwsz\u0105 podstawow\u0105 funkcj\u0119 \u201ezapisz si\u0119 na kurs\u201d<\/p>\n<p><img alt=\"User Story Statenent\" class=\"alignnone size-full wp-image-110\" decoding=\"async\" height=\"117\" loading=\"lazy\" src=\"https:\/\/www.archimetric.com\/wp-content\/uploads\/2022\/02\/User-Story-Statenent.png\" width=\"605\"\/><\/p>\n<p>Otrzymali\u015bmy dodatkowe informacje od u\u017cytkownik\u00f3w ko\u0144cowych na spotkaniu:<\/p>\n<ul type=\"disc\">\n<li>Akademik: student musi by\u0107 studentem stacjonarnym zapisanym na studiach<\/li>\n<li>Administrator: student musi poda\u0107 poprawne dane logowania do konta<\/li>\n<li>Akademik: kurs nie jest pe\u0142en<\/li>\n<li>Akademik: wymagania wst\u0119pne dla kursu musz\u0105 zosta\u0107 spe\u0142nione<\/li>\n<li>Administrator: kurs wybrany do dodania do harmonogramu nie mo\u017ce kolidowa\u0107 z terminem innego kursu<\/li>\n<li>Programista: jakie inne funkcje chcesz, by by\u0142y grupowane razem z t\u0105 funkcj\u0105 na li\u015bcie w systemie docelowym?<\/li>\n<li>Student: rezygnuj z kurs\u00f3w, zobacz harmonogram, edytuj harmonogram.<\/li>\n<\/ul>\n<p>Trzy C historii u\u017cytkownika<\/p>\n<p>Dobre historie u\u017cytkownika to znacznie wi\u0119cej ni\u017c tylko stwierdzenia. Standardowa historia u\u017cytkownika sk\u0142ada si\u0119 z trzech cz\u0119\u015bci, powszechnie nazywanych trzema C. Pierwsze \u201eC\u201d ka\u017cdej historii u\u017cytkownika powinno by\u0107 zgodne z zasadniczym formatem: Jako [rola], chc\u0119 [zrobi\u0107 co\u015b], poniewa\u017c [korzy\u015bci], co stanowi minimaln\u0105 zawarto\u015b\u0107 historii u\u017cytkownika do umieszczenia na karcie. Rozmowy to tre\u015b\u0107 drugiego \u201eC\u201d historii u\u017cytkownika, kt\u00f3ra reprezentuje dyskusj\u0119 mi\u0119dzy u\u017cytkownikami ko\u0144cowymi, w\u0142a\u015bcicielem projektu i zespo\u0142em programist\u00f3w. W tych rozmowach zapisywane s\u0105 rozmowy ustne lub inne przydatne informacje, takie jak e-maile, szkice, lub inne materia\u0142y zwi\u0105zane z projektem. Ostatnie \u201eC\u201d historii u\u017cytkownika to potwierdzenie, kt\u00f3re stanowi kryteria akceptacji u\u017cywane do potwierdzenia, \u017ce historia u\u017cytkownika zosta\u0142a poprawnie zaimplementowana i pomy\u015blnie dostarczona.<\/p>\n<p>Pozw\u00f3l mi nieco rozwin\u0105\u0107, jak rozwija\u0107 cz\u0119\u015b\u0107 potwierdzenia historii u\u017cytkownika. Tutaj u\u017cywamy najbardziej znanej szablonu zwanego Gherkin, kt\u00f3ry wykorzystuje wz\u00f3r Given-When-Then, aby kierowa\u0107 pisaniem test\u00f3w akceptacyjnych dla historii u\u017cytkownika:<\/p>\n<ul type=\"disc\">\n<li>(Given.. i) pewne kontekst<\/li>\n<li>(When.. i) wykonywana jest pewna akcja<\/li>\n<li>(Then.. i) wykonaj pewne akcje<\/li>\n<\/ul>\n<p>Narz\u0119dzia takie jak Cucumber i frameworki testowe Jbehave zach\u0119caj\u0105 do u\u017cywania szablonu Given\/Then\/Then do przeprowadzania test\u00f3w automatycznych, cho\u0107 mo\u017ce by\u0107 r\u00f3wnie\u017c u\u017cywany wy\u0142\u0105cznie jako heurystyka, niezale\u017cnie od tego, czy b\u0119dzie u\u017cywane narz\u0119dzie.<\/p>\n<p>Zbierzmy wszystkie informacje dotycz\u0105ce historii u\u017cytkownika \u201ezarejestruj kurs\u201d i umie\u015b\u0107my je w formacie 3Cs:<\/p>\n<p><img alt=\"3Cs User Story\" class=\"alignnone size-full wp-image-111\" decoding=\"async\" height=\"496\" loading=\"lazy\" src=\"https:\/\/www.archimetric.com\/wp-content\/uploads\/2022\/02\/3Cs-User-Story.png\" width=\"609\"\/><\/p>\n<p>Teraz po\u0142\u00f3\u017cmy informacje do UeXceler, kt\u00f3ry zawiera konwersj\u0119 i potwierdzenie, kt\u00f3re wcze\u015bniej opracowali\u015bmy.<\/p>\n<p><img alt=\"Conversion User Story\" class=\"alignnone size-full wp-image-112\" decoding=\"async\" height=\"210\" loading=\"lazy\" src=\"https:\/\/www.archimetric.com\/wp-content\/uploads\/2022\/02\/Conversion-User-Story.png\" width=\"701\"\/><\/p>\n<h2><b>Dzielenie Epyku na Historie U\u017cytkownika<\/b><\/h2>\n<p>Je\u015bli dok\u0142adniej przeanalizujemy histori\u0119 u\u017cytkownika \u201ezarejestruj kurs\u201d, mo\u017cemy odkry\u0107, \u017ce jest zbyt du\u017ca, by mog\u0142a zosta\u0107 umieszczona w sprintie. Mo\u017cemy j\u0105 traktowa\u0107 jako Epyk (wi\u0119ksz\u0105 histori\u0119 u\u017cytkownika), kt\u00f3r\u0105 mo\u017cna podzieli\u0107 na grup\u0119 powi\u0105zanych mniejszych historii u\u017cytkownika. Mo\u017cemy podzieli\u0107 epik na zadania \u2013 nazywam to podzia\u0142 poziomy, albo alternatywnie mo\u017cemy podzieli\u0107 epik na scenariusze i nazywa\u0107 to podzia\u0142 pionowy.<\/p>\n<h2><b>Podzia\u0142 poziomy<\/b><\/h2>\n<p>Tradycyjny spos\u00f3b budowania du\u017cego funkcjonalno\u015bci polega\u0142 na rozk\u0142adaniu jej na zadania, kt\u00f3re nale\u017ca\u0142o wykona\u0107 na poziomie warstw architektonicznych. Na przyk\u0142ad model widok kontrola (MVC) lub architektura klient-serwer, aby zapewni\u0107 rozdzielenie odpowiedzialno\u015bci dla architektury systemu, a nast\u0119pnie dopasowa\u0107 j\u0105 do architektury n-warstwowej, takiej jak interfejs graficzny, logika sterowania, model obiektowy, mapowanie obiektowo-relacyjne, warstwy bazy danych itd. Istnieje wiele element\u00f3w architektury n-warstwowej, a ja tutaj wymieni\u0119 tylko kilka:<\/p>\n<ul>\n<li>Pozwala nam rozwija\u0107 wysokiej jako\u015bci ekspertyz\u0119 w jednej z warstw architektonicznych<\/li>\n<li>Inne aplikacje b\u0119d\u0105 mog\u0142y wykorzystywa\u0107 funkcjonalno\u015b\u0107 udost\u0119pnian\u0105 przez Twoje warstwy.<\/li>\n<li>B\u0119dziesz m\u00f3g\u0142 roz\u0142o\u017cy\u0107 swoje warstwy na wiele fizycznych poziom\u00f3w. Mo\u017ce to mie\u0107 bardzo du\u017cy wp\u0142yw na Twoj\u0105 aplikacj\u0119 poprzez popraw\u0119 wydajno\u015bci (czasem), skalowalno\u015bci i odporno\u015bci na b\u0142\u0119dy.<\/li>\n<li>Utrzymanie Twojej aplikacji jest \u0142atwiejsze dzi\u0119ki niskiemu sprz\u0119\u017ceniu mi\u0119dzy warstwami.<\/li>\n<li>Dodawanie nowych funkcjonalno\u015bci do Twojej aplikacji jest \u0142atwiejsze.<\/li>\n<li>Warstwy sprawiaj\u0105, \u017ce Twoja aplikacja jest \u0142atwiejsza do testowania.<\/li>\n<\/ul>\n<p>Istnieje du\u017ca liczba pomy\u015blnych implementacji opartych na architekturze n-warstwowej, takich jak Ruby on Rails i architektura oparta na us\u0142ugach internetowych.<\/p>\n<h2><b>Historie u\u017cytkownika i podzia\u0142 poziomy<\/b><\/h2>\n<p>Maj\u0105c lub korzystaj\u0105c z korzy\u015bci architektury n-warstwowej dla naszego systemu, ma ona pewne wady, gdy u\u017cywamy jej w podej\u015bciu do historii u\u017cytkownika. Cz\u0119sto prowadzi\u0142a do bardzo wolnego cyklu zwrotu informacji, w zale\u017cno\u015bci od rozmiaru funkcjonalno\u015bci, poniewa\u017c czekamy, a\u017c ka\u017cdy z osobna sko\u0144czy swoj\u0105 cz\u0119\u015b\u0107, by j\u0105 zintegrowa\u0107 i upewni\u0107 si\u0119, \u017ce dzia\u0142a. Termin \u201epoziome ci\u0119cie\u201d odnosi si\u0119 do wykorzystania tego podej\u015bcia warstwowego jako g\u0142\u00f3wnej metody rozk\u0142adania du\u017cych funkcjonalno\u015bci.<\/p>\n<h2><b>Podzia\u0142 pionowy<\/b><\/h2>\n<p>Aby przyspieszy\u0107 cykl zwrotu informacji, mo\u017cemy wzi\u0105\u0107 epik i podzieli\u0107 go na kilka scenariuszy u\u017cytkownika, kt\u00f3re przebijaj\u0105 si\u0119 przez ka\u017cd\u0105 z warstw architektonicznych. Mo\u017cemy roz\u0142o\u017cy\u0107 prawie ka\u017cd\u0105 funkcjonalno\u015b\u0107 na kawa\u0142ki, tak aby zbudowanie, zintegrowanie i przetestowanie wszystkich element\u00f3w zaj\u0119\u0142o maksymalnie kilka dni. Ka\u017cdy kawa\u0142ek sk\u0142ada si\u0119 z wszelkich prac, kt\u00f3re nale\u017cy wykona\u0107 w danej warstwie architektonicznej, a tak\u017ce wszelkich test\u00f3w i integracji, kt\u00f3re mog\u0105 by\u0107 potrzebne, by przygotowa\u0107 go do wypuszczenia.<\/p>\n<p>Zazwyczaj podzia\u0142 poziomy dzieli funkcjonalno\u015bci na historie u\u017cytkownika lub zadania na poziomie komponentu architektonicznego. Przyk\u0142ad: interfejs u\u017cytkownika front-end, bazy danych lub us\u0142ugi backend. Natomiast pionowy kawa\u0142ek prowadzi do dzia\u0142aj\u0105cej, demonstracyjnej oprogramowania, kt\u00f3re dodaje warto\u015b\u0107 biznesow\u0105. Dlatego podzia\u0142 pionowy poprawia zdolno\u015b\u0107 zespo\u0142u do dostarczania potencjalnie gotowego do wypuszczenia przyrostu produktu w ka\u017cdym sprintie. Wyobra\u017a sobie ciastko z warstwami \u015bmietnika, czekolady, owoc\u00f3w i ciasta. Je\u015bli ciasto rozetnie si\u0119 poziomo, tw\u00f3j znajomy dosta\u0142by tylko kawa\u0142ek ciasta, czekolady, \u015bmietnika lub owoc\u00f3w. Jestem pewien, \u017ce Twoi znajomi chcieliby kawa\u0142ek z nieco wszystkich warstw. Otrzymywanie tylko jednej warstwy ciasta nie pozwala im poczu\u0107 prawdziwego smaku ca\u0142ego ciasta. Spos\u00f3b bardziej przyjazny dla Twoich znajomych to tworzenie pionowych kawa\u0142k\u00f3w (po\u017c\u0105danej warto\u015bci).<\/p>\n<p><img alt=\"Cake\" class=\"wp-image-113 aligncenter\" decoding=\"async\" height=\"210\" loading=\"lazy\" src=\"https:\/\/www.archimetric.com\/wp-content\/uploads\/2022\/02\/Cake.png\" width=\"287\"\/><\/p>\n<h2><b>Podzia\u0142 epiku poziomo zgodnie z celem<\/b><\/h2>\n<p>Pami\u0119taj, \u017ce konwersja dla historii u\u017cytkownika \u201ezarejestruj kurs\u201d, kt\u00f3r\u0105 mieli\u015bmy na spotkaniu z interesariuszami, zosta\u0142a najpierw zaproponowana przez student\u00f3w (g\u0142\u00f3wna rola) i wspierana przez innych interesariuszy. Gdy analizowali\u015bmy szczeg\u00f3\u0142owe informacje dotycz\u0105ce historii u\u017cytkownika, odkryli\u015bmy, \u017ce istnieje do\u015b\u0107 du\u017co informacji, kt\u00f3re zosta\u0142y zarezerwowane przez innych interesariuszy, kt\u00f3rzy b\u0119d\u0105 uczestniczy\u0107 w historii u\u017cytkownika jako wspieraj\u0105ca rola.<\/p>\n<p>W rzeczywisto\u015bci niekt\u00f3rzy studenci mog\u0105 nie dba\u0107 ani nawet nie chcie\u0107 ogranicze\u0144 ustanowionych przez osoby w roli wspieraj\u0105cej. Na przyk\u0142ad student zapomina has\u0142o i wpisuje je niepoprawnie trzy razy, mo\u017ce nie chcie\u0107 przechodzi\u0107 przez proces resetowania has\u0142a, ale nadal ma pewno\u015b\u0107, \u017ce mo\u017ce spr\u00f3bowa\u0107 kilka razy wi\u0119cej, albo student nie chce mie\u0107 limitu na ksi\u0105\u017cki w bibliotece, lub okresu wypo\u017cyczenia itd. Osoby, kt\u00f3re chc\u0105 ustawi\u0107 pewne zasady biznesowe, ograniczenia dla zaproponowanych funkcjonalno\u015bci jako swoje cele u\u017cytkownika, to w\u0142a\u015bnie te, kt\u00f3re uczestnicz\u0105 w historii u\u017cytkownika jako rola wspieraj\u0105ca. Funkcjonalno\u015b\u0107 nie powinna dzia\u0142a\u0107 wcale, je\u015bli zasady biznesowe i drugi cel nie zostan\u0105 na\u0142o\u017cone na zaproponowan\u0105 funkcjonalno\u015b\u0107. Je\u015bli podzielimy epik poziomo zgodnie z celami aktor\u00f3w pomocniczych na grup\u0119 historii u\u017cytkownika, mo\u017cemy jednocze\u015bnie spe\u0142ni\u0107 cele tych aktor\u00f3w, uczyni\u0107 histori\u0119 u\u017cytkownika testowaln\u0105 i otrzyma\u0107 feedback bezpo\u015brednio od odpowiedniej osoby.<\/p>\n<p><img alt=\"Conversion User Story\" class=\"alignnone size-full wp-image-112\" decoding=\"async\" height=\"210\" loading=\"lazy\" src=\"https:\/\/www.archimetric.com\/wp-content\/uploads\/2022\/02\/Conversion-User-Story.png\" width=\"701\"\/><\/p>\n<p>Zbadajmy informacje z sekcji konwersji i potwierdzenia, aby zobaczy\u0107, jak mo\u017cemy podzieli\u0107 wi\u0119ksz\u0105 histori\u0119 \u201ezarejestruj kurs\u201d na grup\u0119 powi\u0105zanych historii u\u017cytkownika.<\/p>\n<ol>\n<li>Student musi by\u0107 zarejestrowanym studentem, je\u015bli nie, to nie otrzyma po\u015bwiadczenia wydanego w powiadomieniu dla nowych student\u00f3w. Je\u015bli otrzyma\u0142 powiadomienie, ale konto jeszcze nie zosta\u0142o aktywowane, musi zarejestrowa\u0107 nowe konto online (oznaczone jako czerwony okr\u0105g 1)<\/li>\n<li>Je\u015bli zag\u0142\u0119bimy si\u0119 nieco g\u0142\u0119biej w proces logowania, wiemy, \u017ce je\u015bli student poda dane logowania trzy razy niepoprawnie, musi przej\u015b\u0107 do \u201eprocesu resetowania has\u0142a\u201d (oznaczone jako czerwony okr\u0105g 2 i 3)<\/li>\n<\/ol>\n<p><img alt=\"Confirmation Given\" class=\"alignnone size-full wp-image-114\" decoding=\"async\" height=\"324\" loading=\"lazy\" src=\"https:\/\/www.archimetric.com\/wp-content\/uploads\/2022\/02\/Confirmation-Given.png\" width=\"871\"\/><\/p>\n<h2><b>Og\u00f3lny compartment historii u\u017cytkownika<\/b><\/h2>\n<p>Stw\u00f3rzmy te historie u\u017cytkownika w UeXceler:<\/p>\n<p>Historia u\u017cytkownika Logowanie konta jest tworzona w og\u00f3lnym compartmentie historii u\u017cytkownika. Opr\u00f3cz historii u\u017cytkownika logowania tworzona jest r\u00f3wnie\u017c dwie inne powi\u0105zane historie u\u017cytkownika w tym samym compartmentie, s\u0105 to \u201ereset has\u0142a\u201d i \u201eUtw\u00f3rz nowe konto ucznia\u201d z nast\u0119puj\u0105cych powod\u00f3w:<\/p>\n<ul>\n<li>W przypadku, gdy dane logowania konta zostan\u0105 niepoprawnie wprowadzone przez ucznia trzy razy, zostanie wyzwolona historia u\u017cytkownika \u201ereset has\u0142a\u201d;<\/li>\n<li>a je\u015bli nowy ucze\u0144 jeszcze nie zarejestrowa\u0142 konta ucznia, mo\u017ce wyzwoli\u0107 histori\u0119 u\u017cytkownika \u201eUtw\u00f3rz nowe konto ucznia\u201d w oknie logowania.<\/li>\n<\/ul>\n<ol>\n<li>Jako ucze\u0144, chc\u0119 zalogowa\u0107 si\u0119 do portalu ucznia, aby\u2026<\/li>\n<li>Jako administrator portalu, chc\u0119 zweryfikowa\u0107, \u017ce osoba loguj\u0105ca si\u0119 jest zarejestrowanym uczniem, aby\u2026<\/li>\n<li>Jako kierownik kursu, chc\u0119 zweryfikowa\u0107 odpowiednio\u015b\u0107 przed zezwoleniem na dodanie wybranego kursu do harmonogramu ucznia, aby\u2026<\/li>\n<\/ol>\n<p>Mo\u017cemy uzna\u0107, \u017ce te trzy historie u\u017cytkownika zosta\u0142y podzielone poziomo od epiki \u2013 \u201ezarejestruj kurs\u201d, ale te historie u\u017cytkownika spe\u0142niaj\u0105 cele niekt\u00f3rych aktor\u00f3w pomocniczych, od kt\u00f3rych mo\u017cesz otrzyma\u0107 opini\u0119 i potwierdzi\u0107. Gdyby warunki wst\u0119pne nie zosta\u0142y spe\u0142nione, g\u0142\u00f3wna historia u\u017cytkownika nie mia\u0142aby ju\u017c \u017cadnego sensu.<\/p>\n<p>Mo\u017cna zauwa\u017cy\u0107, \u017ce umie\u015bcili\u015bmy wszystkie te historie u\u017cytkownika w og\u00f3lnym compartmentie historii u\u017cytkownika, a przyczyn\u0105 jest to, \u017ce maj\u0105 one du\u017ce prawdopodobie\u0144stwo wsp\u00f3\u0142dzielenia tych samych warunk\u00f3w wst\u0119pnych z innymi powi\u0105zanymi funkcjonalno\u015bciami (historiami u\u017cytkownika) na tym samym ekranie wywo\u0142ania, takimi jak \u201ezobacz harmonogram\u201d, \u201eedytuj harmonogram\u201d, \u201ewypisz kursy\u201d itp.<\/p>\n<h2><b>Compartmenty przypadk\u00f3w u\u017cycia<\/b><\/h2>\n<p>W powy\u017cszym rysunku pozosta\u0142y trzy oznaczone czerwonym kolorem: 4, 5 i 6. S\u0105 to scenariusze alternatywne epiki \u201ezarejestruj kurs\u201d. W przypadku, gdy kt\u00f3rykolwiek z tych trzech warunk\u00f3w nie zostanie spe\u0142niony, pojawi si\u0119 scenariusz alternatywny, kt\u00f3ry mo\u017ce zosta\u0107 przedstawiony jako rozdzielona historia u\u017cytkownika. Mo\u017cemy rozwa\u017cy\u0107 podzia\u0142 poziomy lub pionowy, ale czy zawsze podzia\u0142 pionowy jest lepszy? Niekoniecznie \u2013 zale\u017cy to od sytuacji. Nie ma uniwersalnego rozwi\u0105zania, musimy rozwa\u017cy\u0107, kt\u00f3ry podej\u015bcie jest bardziej odpowiednie dla Twojego przypadku. Pozw\u00f3l mi to wyja\u015bni\u0107 nieco dok\u0142adniej.<\/p>\n<p>Na przyk\u0142ad, je\u015bli chcesz przydzieli\u0107 g\u0142\u00f3wn\u0105 histori\u0119 u\u017cytkownika jednemu programi\u015bcie, a trzy historie u\u017cytkownika: logowanie, rejestracja nowego konta i reset has\u0142a \u2013 drugiemu programi\u015bcie. Mo\u017cesz preferowa\u0107, by osoba odpowiedzialna za g\u0142\u00f3wn\u0105 histori\u0119 u\u017cytkownika najpierw opracowa\u0142a scenariusz \u201eszcz\u0119\u015bliwy\u201d w bie\u017c\u0105cym sprintie, a nast\u0119pnie stopniowo rozwija\u0142a scenariusze alternatywne w kolejnych sprintach tym samym programist\u0105 (o ile czas pozwala). Ale je\u015bli czas jest kr\u00f3tki, a jednocze\u015bnie uwa\u017casz, \u017ce jednemu programi\u015bcie jest zbyt ci\u0119\u017cko zarz\u0105dza\u0107 ca\u0142\u0105 epik\u0105, mo\u017cesz podzieli\u0107 j\u0105 poziomo na zadania i przydzieli\u0107 je r\u00f3wnolegle kilku programistom.<\/p>\n<h2><b>Podzia\u0142 epiki na scenariusze<\/b><\/h2>\n<p>Je\u015bli rozwa\u017cymy szczeg\u00f3\u0142y scenariusza opisanego w sekcji potwierdzenia epiki, \u0142atwo znajdziemy pionowe fragmenty dla grupy powi\u0105zanych historii u\u017cytkownika.<\/p>\n<ol>\n<li>Jako kierownik kursu, chc\u0119 zweryfikowa\u0107 wymagania wst\u0119pne przed zezwoleniem na dodanie wybranego kursu do harmonogramu ucznia, aby\u2026<\/li>\n<li>Jako kierownik kursu, chc\u0119 sprawdzi\u0107 dost\u0119pno\u015b\u0107 kursu przed zezwoleniem na dodanie kursu do harmonogramu ucznia, aby\u2026<\/li>\n<li>Jako kierownik kursu, chc\u0119 zweryfikowa\u0107 dost\u0119pno\u015b\u0107 slotu czasowego ucznia przed zezwoleniem na dodanie wybranego kursu do harmonogramu ucznia, aby\u2026<\/li>\n<\/ol>\n<h2><b>Podzia\u0142 epiki na zadania<\/b><\/h2>\n<p>Je\u015bli chcemy roz\u0142o\u017cy\u0107 epik\u0119 na mniejsze zadania do r\u00f3wnoleg\u0142ego rozwoju w tym samym sprintie, nast\u0119puj\u0105co:<\/p>\n<ol>\n<li>Sprawd\u017a stan limitu kursu<\/li>\n<li>Sprawd\u017a wymagania wst\u0119pne kursu<\/li>\n<li>Sprawd\u017a slot czasowy<\/li>\n<\/ol>\n<p>Teraz decyzja nale\u017cy do Ciebie \u2013 jak podzieli\u0107 epik\u0119 na historie u\u017cytkownika w procesie rozwoju agilnego. Mo\u017cesz zobaczy\u0107, \u017ce historia u\u017cytkownika \u201eZarejestruj kurs\u201d i jej powi\u0105zane historie znajduj\u0105 si\u0119 w compartmentie przypadk\u00f3w u\u017cycia (Twojej epiki), nazywanym r\u00f3wnie\u017c \u201eZarejestruj kurs\u201d, kt\u00f3ry s\u0142u\u017cy jako miejsce zast\u0119pcze do umieszczenia wszystkich g\u0142\u00f3wnych historii u\u017cytkownika oraz tych, kt\u00f3re zosta\u0142y podzielone z g\u0142\u00f3wnej.<\/p>\n<p><img alt=\"User Story Use Case Compartments\" class=\"alignnone size-full wp-image-115\" decoding=\"async\" height=\"994\" loading=\"lazy\" src=\"https:\/\/www.archimetric.com\/wp-content\/uploads\/2022\/02\/User-Story-Use-Case-Compartments.png\" width=\"1138\"\/><\/p>\n<p>\u00a0<\/p>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>Zastosowanie podej\u015bcia Lean Agile w praktyce Curtis Tsang\u00a0\u00a0 4 sierpnia 2016 1 Komentarz Przyk\u0142ad portalu studenta Kolegium spo\u0142eczne chce stworzy\u0107<\/p>\n","protected":false},"author":3479,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_yoast_wpseo_title":"","_yoast_wpseo_metadesc":"","fifu_image_url":"","fifu_image_alt":"","footnotes":""},"categories":[120,83],"tags":[],"class_list":["post-10984","post","type-post","status-publish","format-standard","hentry","category-lean","category-scrum"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.0 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Zastosowanie podej\u015bcia Lean Agile w praktyce - ArchiMetric Polish<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.archimetric.com\/pl\/lean-agile-approach-action\/\" \/>\n<meta property=\"og:locale\" content=\"pl_PL\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Zastosowanie podej\u015bcia Lean Agile w praktyce - ArchiMetric Polish\" \/>\n<meta property=\"og:description\" content=\"Zastosowanie podej\u015bcia Lean Agile w praktyce Curtis Tsang\u00a0\u00a0 4 sierpnia 2016 1 Komentarz Przyk\u0142ad portalu studenta Kolegium spo\u0142eczne chce stworzy\u0107\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.archimetric.com\/pl\/lean-agile-approach-action\/\" \/>\n<meta property=\"og:site_name\" content=\"ArchiMetric Polish\" \/>\n<meta property=\"article:published_time\" content=\"2026-03-05T22:09:23+00:00\" \/>\n<meta name=\"author\" content=\"archimetric@visual-paradigm.com\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Napisane przez\" \/>\n\t<meta name=\"twitter:data1\" content=\"archimetric@visual-paradigm.com\" \/>\n\t<meta name=\"twitter:label2\" content=\"Szacowany czas czytania\" \/>\n\t<meta name=\"twitter:data2\" content=\"11 minut\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.archimetric.com\/pl\/lean-agile-approach-action\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.archimetric.com\/pl\/lean-agile-approach-action\/\"},\"author\":{\"name\":\"archimetric@visual-paradigm.com\",\"@id\":\"https:\/\/www.archimetric.com\/pl\/#\/schema\/person\/e4027c9f5b602fc705716009e5671d28\"},\"headline\":\"Zastosowanie podej\u015bcia Lean Agile w praktyce\",\"datePublished\":\"2026-03-05T22:09:23+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.archimetric.com\/pl\/lean-agile-approach-action\/\"},\"wordCount\":2274,\"commentCount\":0,\"image\":{\"@id\":\"https:\/\/www.archimetric.com\/pl\/lean-agile-approach-action\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.archimetric.com\/wp-content\/uploads\/2022\/02\/User-Story.jpg\",\"articleSection\":[\"Lean\",\"Scrum\"],\"inLanguage\":\"pl-PL\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.archimetric.com\/pl\/lean-agile-approach-action\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.archimetric.com\/pl\/lean-agile-approach-action\/\",\"url\":\"https:\/\/www.archimetric.com\/pl\/lean-agile-approach-action\/\",\"name\":\"Zastosowanie podej\u015bcia Lean Agile w praktyce - ArchiMetric Polish\",\"isPartOf\":{\"@id\":\"https:\/\/www.archimetric.com\/pl\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.archimetric.com\/pl\/lean-agile-approach-action\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.archimetric.com\/pl\/lean-agile-approach-action\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.archimetric.com\/wp-content\/uploads\/2022\/02\/User-Story.jpg\",\"datePublished\":\"2026-03-05T22:09:23+00:00\",\"author\":{\"@id\":\"https:\/\/www.archimetric.com\/pl\/#\/schema\/person\/e4027c9f5b602fc705716009e5671d28\"},\"breadcrumb\":{\"@id\":\"https:\/\/www.archimetric.com\/pl\/lean-agile-approach-action\/#breadcrumb\"},\"inLanguage\":\"pl-PL\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.archimetric.com\/pl\/lean-agile-approach-action\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"pl-PL\",\"@id\":\"https:\/\/www.archimetric.com\/pl\/lean-agile-approach-action\/#primaryimage\",\"url\":\"https:\/\/www.archimetric.com\/wp-content\/uploads\/2022\/02\/User-Story.jpg\",\"contentUrl\":\"https:\/\/www.archimetric.com\/wp-content\/uploads\/2022\/02\/User-Story.jpg\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.archimetric.com\/pl\/lean-agile-approach-action\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.archimetric.com\/pl\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Zastosowanie podej\u015bcia Lean Agile w praktyce\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.archimetric.com\/pl\/#website\",\"url\":\"https:\/\/www.archimetric.com\/pl\/\",\"name\":\"ArchiMetric Polish\",\"description\":\"EA, Dev Ops, Scrum, Agile and More\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.archimetric.com\/pl\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"pl-PL\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.archimetric.com\/pl\/#\/schema\/person\/e4027c9f5b602fc705716009e5671d28\",\"name\":\"archimetric@visual-paradigm.com\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pl-PL\",\"@id\":\"https:\/\/www.archimetric.com\/pl\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/de58c1924d83d002dbce0b79f74ba4b70e2f85238332df6cabc0227effdf470d?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/de58c1924d83d002dbce0b79f74ba4b70e2f85238332df6cabc0227effdf470d?s=96&d=mm&r=g\",\"caption\":\"archimetric@visual-paradigm.com\"},\"url\":\"https:\/\/www.archimetric.com\/pl\/author\/archimetricvisual-paradigm-com\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Zastosowanie podej\u015bcia Lean Agile w praktyce - ArchiMetric Polish","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.archimetric.com\/pl\/lean-agile-approach-action\/","og_locale":"pl_PL","og_type":"article","og_title":"Zastosowanie podej\u015bcia Lean Agile w praktyce - ArchiMetric Polish","og_description":"Zastosowanie podej\u015bcia Lean Agile w praktyce Curtis Tsang\u00a0\u00a0 4 sierpnia 2016 1 Komentarz Przyk\u0142ad portalu studenta Kolegium spo\u0142eczne chce stworzy\u0107","og_url":"https:\/\/www.archimetric.com\/pl\/lean-agile-approach-action\/","og_site_name":"ArchiMetric Polish","article_published_time":"2026-03-05T22:09:23+00:00","author":"archimetric@visual-paradigm.com","twitter_card":"summary_large_image","twitter_misc":{"Napisane przez":"archimetric@visual-paradigm.com","Szacowany czas czytania":"11 minut"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.archimetric.com\/pl\/lean-agile-approach-action\/#article","isPartOf":{"@id":"https:\/\/www.archimetric.com\/pl\/lean-agile-approach-action\/"},"author":{"name":"archimetric@visual-paradigm.com","@id":"https:\/\/www.archimetric.com\/pl\/#\/schema\/person\/e4027c9f5b602fc705716009e5671d28"},"headline":"Zastosowanie podej\u015bcia Lean Agile w praktyce","datePublished":"2026-03-05T22:09:23+00:00","mainEntityOfPage":{"@id":"https:\/\/www.archimetric.com\/pl\/lean-agile-approach-action\/"},"wordCount":2274,"commentCount":0,"image":{"@id":"https:\/\/www.archimetric.com\/pl\/lean-agile-approach-action\/#primaryimage"},"thumbnailUrl":"https:\/\/www.archimetric.com\/wp-content\/uploads\/2022\/02\/User-Story.jpg","articleSection":["Lean","Scrum"],"inLanguage":"pl-PL","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.archimetric.com\/pl\/lean-agile-approach-action\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.archimetric.com\/pl\/lean-agile-approach-action\/","url":"https:\/\/www.archimetric.com\/pl\/lean-agile-approach-action\/","name":"Zastosowanie podej\u015bcia Lean Agile w praktyce - ArchiMetric Polish","isPartOf":{"@id":"https:\/\/www.archimetric.com\/pl\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.archimetric.com\/pl\/lean-agile-approach-action\/#primaryimage"},"image":{"@id":"https:\/\/www.archimetric.com\/pl\/lean-agile-approach-action\/#primaryimage"},"thumbnailUrl":"https:\/\/www.archimetric.com\/wp-content\/uploads\/2022\/02\/User-Story.jpg","datePublished":"2026-03-05T22:09:23+00:00","author":{"@id":"https:\/\/www.archimetric.com\/pl\/#\/schema\/person\/e4027c9f5b602fc705716009e5671d28"},"breadcrumb":{"@id":"https:\/\/www.archimetric.com\/pl\/lean-agile-approach-action\/#breadcrumb"},"inLanguage":"pl-PL","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.archimetric.com\/pl\/lean-agile-approach-action\/"]}]},{"@type":"ImageObject","inLanguage":"pl-PL","@id":"https:\/\/www.archimetric.com\/pl\/lean-agile-approach-action\/#primaryimage","url":"https:\/\/www.archimetric.com\/wp-content\/uploads\/2022\/02\/User-Story.jpg","contentUrl":"https:\/\/www.archimetric.com\/wp-content\/uploads\/2022\/02\/User-Story.jpg"},{"@type":"BreadcrumbList","@id":"https:\/\/www.archimetric.com\/pl\/lean-agile-approach-action\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.archimetric.com\/pl\/"},{"@type":"ListItem","position":2,"name":"Zastosowanie podej\u015bcia Lean Agile w praktyce"}]},{"@type":"WebSite","@id":"https:\/\/www.archimetric.com\/pl\/#website","url":"https:\/\/www.archimetric.com\/pl\/","name":"ArchiMetric Polish","description":"EA, Dev Ops, Scrum, Agile and More","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.archimetric.com\/pl\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"pl-PL"},{"@type":"Person","@id":"https:\/\/www.archimetric.com\/pl\/#\/schema\/person\/e4027c9f5b602fc705716009e5671d28","name":"archimetric@visual-paradigm.com","image":{"@type":"ImageObject","inLanguage":"pl-PL","@id":"https:\/\/www.archimetric.com\/pl\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/de58c1924d83d002dbce0b79f74ba4b70e2f85238332df6cabc0227effdf470d?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/de58c1924d83d002dbce0b79f74ba4b70e2f85238332df6cabc0227effdf470d?s=96&d=mm&r=g","caption":"archimetric@visual-paradigm.com"},"url":"https:\/\/www.archimetric.com\/pl\/author\/archimetricvisual-paradigm-com\/"}]}},"_links":{"self":[{"href":"https:\/\/www.archimetric.com\/pl\/wp-json\/wp\/v2\/posts\/10984","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.archimetric.com\/pl\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.archimetric.com\/pl\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.archimetric.com\/pl\/wp-json\/wp\/v2\/users\/3479"}],"replies":[{"embeddable":true,"href":"https:\/\/www.archimetric.com\/pl\/wp-json\/wp\/v2\/comments?post=10984"}],"version-history":[{"count":0,"href":"https:\/\/www.archimetric.com\/pl\/wp-json\/wp\/v2\/posts\/10984\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.archimetric.com\/pl\/wp-json\/wp\/v2\/media?parent=10984"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.archimetric.com\/pl\/wp-json\/wp\/v2\/categories?post=10984"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.archimetric.com\/pl\/wp-json\/wp\/v2\/tags?post=10984"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}