Slicing a Cake
   © 2010 Tomasz Włodarek. Pragmatyczne metody wytwarzania oprogramowania.
   Materiał udostępniany na licencji Creative Commons (by-nc-nd).
© 2010 Tomasz Włodarek. Pragmatyczne metody wytwarzania oprogramowania.
Materiał udostępniany na licencji Creative Commons (by-nc-nd).
As a <type of user>, I want <some goal> so
                       that <some reason>.

Jako użytkownik systemu aukcyjnego muszę
      mieć możliwość wystawiania aukcji aby
                     sprzedawać i zarabiać.


       © 2010 Tomasz Włodarek. Pragmatyczne metody wytwarzania oprogramowania.
       Materiał udostępniany na licencji Creative Commons (by-nc-nd).
zbyt złożone
                                                        zbyt nieokreślone
                                                          zbyt ryzykowne
                                                                zbyt duże



© 2010 Tomasz Włodarek. Pragmatyczne metody wytwarzania oprogramowania.
Materiał udostępniany na licencji Creative Commons (by-nc-nd).
•  etapy procesu

                                       •  warstwy architektury

                                       •  komponenty systemu

                                       •  workflow (ciąg/
                                          sekwencja czynności
                                          wykonywanych przez
                                          użytkownika)
© 2010 Tomasz Włodarek. Pragmatyczne metody wytwarzania oprogramowania.
Materiał udostępniany na licencji Creative Commons (by-nc-nd).
Sposób 1. Raftingowy

           Jako projektant muszę zaprojektować UI
           Jako programista muszę zaimplementować
                                  system aukcyjny
           Jako tester muszę przetestować system
                                          aukcyjny
    Symptomy: pojawiają się nazwy stanowisk i czynności naśladujące kolejne
    etapy procesu wytwórczego, brak roli i czynności wykonywaje przez użytkownika
    Efekt: brak wartości dla klienta (WYSIWTF), zanika komunikacja z klientem
    (user-loser), wydłużenie cyklu (kaskada), brak pracy zespołowej, death
    march
                    © 2010 Tomasz Włodarek. Pragmatyczne metody wytwarzania oprogramowania.
                    Materiał udostępniany na licencji Creative Commons (by-nc-nd).
Sposób 2. Archeologiczny

       Jako formatka UI muszę zawierać 16 pól wg.
                następującej specyfikacji/projektu
        Jako warstwa prezentacji muszę wyświetlać
                                         formatki
       Jako warstwa przechowywania danych muszę
                   przechowywać dane o aukcjach
    Symptomy: pojawiają się nazwy warstw systemu, brak roli i czynności wykonywanej
    przez użytkownika
    Efekt: brak wartości dla klienta (WYSIWTF), zanika komunikacja z klientem (user-
    loser), wydłużenie cyklu (kaskada)
                     © 2010 Tomasz Włodarek. Pragmatyczne metody wytwarzania oprogramowania.
                     Materiał udostępniany na licencji Creative Commons (by-nc-nd).
Sposób 3. Architektoniczny

     Jako moduł aukcyjny muszę przyjmować nową
                           ofertę w danej aukcji
          Jako komponent bezpieczeństwa muszę
                     autoryzować użytkowników

    Symptomy: pojawiają się nazwy modułów/komponentów/podsystemów, brak
    roli i czynności wykonywanej przez użytkownika
    Efekt: brak wartości dla klienta (WYSIWTF), zanika komunikacja z klientem
    (user-loser), wydłużenie cyklu (kaskada), w przypadku projektów
    wielozespołowych zanika odpowiedzialność za dostarczenie kompletnej
    funkcjonalności
                   © 2010 Tomasz Włodarek. Pragmatyczne metody wytwarzania oprogramowania.
                   Materiał udostępniany na licencji Creative Commons (by-nc-nd).
Sposób 4. Gimnazjalno-maturalny

        Jako użytkownik mogę zalogować się do systemu
          Jako użytkownik mam możliwość wprowadzania
                                     oferty sprzedaży
           Jako użytkownik mam możliwość podglądania
                        wprowadzonej oferty sprzedaży

    Symptomy: workflow rozłożono na wstęp, rozwinięcie, zakończenie i/lub
    wykorzystano model CRUD (CRAP? Create, Read, Alter, Purge), brak lub nikła wartość
    biznesowa pojedynczej historii
    Efekt: wartość dla klienta rośnie z każdą kolejną iteracją, dopiero seria zakończonych
    historii daje poczucie całości, wydłużenie cyklu, zawężenie pola (zmiany architektury
    mogą być bolesne)
                      © 2010 Tomasz Włodarek. Pragmatyczne metody wytwarzania oprogramowania.
                      Materiał udostępniany na licencji Creative Commons (by-nc-nd).
*Courtesy     of Jeff Patton (http://www.agileproductdesign.com)




© 2010 Tomasz Włodarek. Pragmatyczne metody wytwarzania oprogramowania.
Materiał udostępniany na licencji Creative Commons (by-nc-nd).
© 2010 Tomasz Włodarek. Pragmatyczne metody wytwarzania oprogramowania.
Materiał udostępniany na licencji Creative Commons (by-nc-nd).
Sposób 5. Darwinowski

        Jako użytkownik systemu aukcyjnego muszę mieć
           możliwość wystawiania aukcji aby sprzedawać i
                         zarabiać (rev. 1, 2, 3, 4, 5, …)


   Symptomy: każda historyjka reprezentuje kompletny ciąg czynności wykonywanych
   przez użytkownika w systemie (workflow), jednak z mniejszą niż docelowa liczbą
   szczegółów (low-fidelity…hi-fidelity); na poziomie backlogu pożądany stopień precyzji
   odzwierciedlony jest poprzez wykorzystanie serii/ciągu doprecyzowujących historyjek
   (story-o-types), cechą charakterystyczną na poziomie implementacji jest szerokie
   wykorzystanie stubów, mocków, symulatorów
   Efekt: wartość dla klienta dostarczana jest w każdej iteracji, możliwe wnioskowanie
   (planowanie) na tej podstawie; otwarte pole możliwości

                     © 2010 Tomasz Włodarek. Pragmatyczne metody wytwarzania oprogramowania.
                     Materiał udostępniany na licencji Creative Commons (by-nc-nd).
American Footballers © 1999 Nick Veasey (http://www.nickveasey.com)




© 2010 Tomasz Włodarek. Pragmatyczne metody wytwarzania oprogramowania.
Materiał Tomasz Włodarek. Pragmatyczne metody wytwarzania
© 2010 udostępniany na licencji Creative Commons (by-nc-nd). oprogramowania.
Materiał udostępniany na licencji Creative Commons (by-nc-nd).
Role użytkowników. Nie wszyscy mogą robić
wszystko. Zidentyfikuj role (rodzaje)
użytkowników, stwórz dla każdej z nich odrębne
zestawy user stories. Ustal z klientem co kto
może, zdecyduj kto jest ważniejszy i ułóż w tej
kolejności w backlogu.




                © 2010 Tomasz Włodarek. Pragmatyczne metody wytwarzania oprogramowania.
                Materiał udostępniany na licencji Creative Commons (by-nc-nd).
Częstość użycia. Jakie operacje użytkownicy
wykonują często a jakie sporadycznie? Ułóż user
stories w backlogu od najczęściej do najrzadziej
wykorzystywanych.




                © 2010 Tomasz Włodarek. Pragmatyczne metody wytwarzania oprogramowania.
                Materiał udostępniany na licencji Creative Commons (by-nc-nd).
Typ, ilość lub sposób przetwarzania
danych. Ustal jakie dane są gromadzone,
przetwarzane, przesyłane. Czy można
ograniczyć ich ilość/typ/zakres/rozmiar? Czy
zamiast skomplikowanych formatów danych
możemy użyć pliku tekstowego? Ustal z
klientem oczekiwane fidelity.




                © 2010 Tomasz Włodarek. Pragmatyczne metody wytwarzania oprogramowania.
                Materiał udostępniany na licencji Creative Commons (by-nc-nd).
Interface. Ustal sposób komunikacji z
systemem. Czy zamiast rozbudowanego GUI
możemy użyć konsoli, emaila? W jaki sposób
komunikujemy się ze sprzętem
(wprowadzanie i wyprowadzanie danych)? W
jaki sposób komponenty komunikują się ze
sobą? Co można uprościć, pominąć? Ustal z
klientem oczekiwane fidelity.




               © 2010 Tomasz Włodarek. Pragmatyczne metody wytwarzania oprogramowania.
               Materiał udostępniany na licencji Creative Commons (by-nc-nd).
Logika biznesowa. Jakie operacje musimy
przeprowadzić a jakie kroki możemy opuścić?
Jakie dane, w jakich okolicznościach muszą
bezwzględnie podlegać walidacji? Przesuń resztę
w dół backlogu.




                © 2010 Tomasz Włodarek. Pragmatyczne metody wytwarzania oprogramowania.
                Materiał udostępniany na licencji Creative Commons (by-nc-nd).
Wygląd. Najpierw niech w ogóle zacznie
działać nim stanie się ładne.
Wydajność. Najpierw niech w ogóle zacznie
działać nim będzie w stanie działać szybko.
Bezpieczeństwo. Najpierw niech w ogóle
zacznie działać nim będzie bezpieczne.




               © 2010 Tomasz Włodarek. Pragmatyczne metody wytwarzania oprogramowania.
               Materiał udostępniany na licencji Creative Commons (by-nc-nd).
Nie dąż do perfekcji w pierwszym pokoleniu. Szukaj
najprostszego wariantu spełniającego założenia (KISS). Nie bój się
mnożyć user stories zwiększając stopniowo poziom precyzji.




Nie bój się modyfikować wielokrotnie tego samego
kodu. Najlepsza funkcjonalność i architektura powstają
ewolucyjnie. Przygotuj się na to (refaktoryzacja, wzorce, testy, CI).
              © 2010 Tomasz Włodarek. Pragmatyczne metody wytwarzania oprogramowania.
              Materiał udostępniany na licencji Creative Commons (by-nc-nd).
Znaj umiar. Dekomponuj tylko te elementy, które mają szanse być
realizowane w ciągu najbliższych 3–6 iteracji. Dziel tak długo aż do
pojedynczej iteracji zespół będzie w stanie wziąć 4–8 user stories.




Wodospady zostaw na wakacje :) Agile to nie tylko podejście iteracyjne i
przyrostowe, ale również (przede wszystkim?) ewolucyjne. Na co dzień
przeplataj sposoby 4 i 5 (w naprawdę dużych systemach 3, 4, 5).
               © 2010 Tomasz Włodarek. Pragmatyczne metody wytwarzania oprogramowania.
               Materiał udostępniany na licencji Creative Commons (by-nc-nd).
dziękuję!
tomek@poddrzewem.pl
http://www.poddrzewem.pl
http://www.linkedin.com/in/wlodarek




                      © 2010 Tomasz Włodarek. Pragmatyczne metody wytwarzania oprogramowania.
                      Materiał udostępniany na licencji Creative Commons (by-nc-nd).
http://www.poddrzewem.pl/klinika

Slicing a cake

  • 1.
    Slicing a Cake © 2010 Tomasz Włodarek. Pragmatyczne metody wytwarzania oprogramowania. Materiał udostępniany na licencji Creative Commons (by-nc-nd).
  • 2.
    © 2010 TomaszWłodarek. Pragmatyczne metody wytwarzania oprogramowania. Materiał udostępniany na licencji Creative Commons (by-nc-nd).
  • 3.
    As a <typeof user>, I want <some goal> so that <some reason>. Jako użytkownik systemu aukcyjnego muszę mieć możliwość wystawiania aukcji aby sprzedawać i zarabiać. © 2010 Tomasz Włodarek. Pragmatyczne metody wytwarzania oprogramowania. Materiał udostępniany na licencji Creative Commons (by-nc-nd).
  • 4.
    zbyt złożone zbyt nieokreślone zbyt ryzykowne zbyt duże © 2010 Tomasz Włodarek. Pragmatyczne metody wytwarzania oprogramowania. Materiał udostępniany na licencji Creative Commons (by-nc-nd).
  • 5.
    •  etapy procesu •  warstwy architektury •  komponenty systemu •  workflow (ciąg/ sekwencja czynności wykonywanych przez użytkownika) © 2010 Tomasz Włodarek. Pragmatyczne metody wytwarzania oprogramowania. Materiał udostępniany na licencji Creative Commons (by-nc-nd).
  • 6.
    Sposób 1. Raftingowy Jako projektant muszę zaprojektować UI Jako programista muszę zaimplementować system aukcyjny Jako tester muszę przetestować system aukcyjny Symptomy: pojawiają się nazwy stanowisk i czynności naśladujące kolejne etapy procesu wytwórczego, brak roli i czynności wykonywaje przez użytkownika Efekt: brak wartości dla klienta (WYSIWTF), zanika komunikacja z klientem (user-loser), wydłużenie cyklu (kaskada), brak pracy zespołowej, death march © 2010 Tomasz Włodarek. Pragmatyczne metody wytwarzania oprogramowania. Materiał udostępniany na licencji Creative Commons (by-nc-nd).
  • 7.
    Sposób 2. Archeologiczny Jako formatka UI muszę zawierać 16 pól wg. następującej specyfikacji/projektu Jako warstwa prezentacji muszę wyświetlać formatki Jako warstwa przechowywania danych muszę przechowywać dane o aukcjach Symptomy: pojawiają się nazwy warstw systemu, brak roli i czynności wykonywanej przez użytkownika Efekt: brak wartości dla klienta (WYSIWTF), zanika komunikacja z klientem (user- loser), wydłużenie cyklu (kaskada) © 2010 Tomasz Włodarek. Pragmatyczne metody wytwarzania oprogramowania. Materiał udostępniany na licencji Creative Commons (by-nc-nd).
  • 8.
    Sposób 3. Architektoniczny Jako moduł aukcyjny muszę przyjmować nową ofertę w danej aukcji Jako komponent bezpieczeństwa muszę autoryzować użytkowników Symptomy: pojawiają się nazwy modułów/komponentów/podsystemów, brak roli i czynności wykonywanej przez użytkownika Efekt: brak wartości dla klienta (WYSIWTF), zanika komunikacja z klientem (user-loser), wydłużenie cyklu (kaskada), w przypadku projektów wielozespołowych zanika odpowiedzialność za dostarczenie kompletnej funkcjonalności © 2010 Tomasz Włodarek. Pragmatyczne metody wytwarzania oprogramowania. Materiał udostępniany na licencji Creative Commons (by-nc-nd).
  • 9.
    Sposób 4. Gimnazjalno-maturalny Jako użytkownik mogę zalogować się do systemu Jako użytkownik mam możliwość wprowadzania oferty sprzedaży Jako użytkownik mam możliwość podglądania wprowadzonej oferty sprzedaży Symptomy: workflow rozłożono na wstęp, rozwinięcie, zakończenie i/lub wykorzystano model CRUD (CRAP? Create, Read, Alter, Purge), brak lub nikła wartość biznesowa pojedynczej historii Efekt: wartość dla klienta rośnie z każdą kolejną iteracją, dopiero seria zakończonych historii daje poczucie całości, wydłużenie cyklu, zawężenie pola (zmiany architektury mogą być bolesne) © 2010 Tomasz Włodarek. Pragmatyczne metody wytwarzania oprogramowania. Materiał udostępniany na licencji Creative Commons (by-nc-nd).
  • 10.
    *Courtesy of Jeff Patton (http://www.agileproductdesign.com) © 2010 Tomasz Włodarek. Pragmatyczne metody wytwarzania oprogramowania. Materiał udostępniany na licencji Creative Commons (by-nc-nd).
  • 11.
    © 2010 TomaszWłodarek. Pragmatyczne metody wytwarzania oprogramowania. Materiał udostępniany na licencji Creative Commons (by-nc-nd).
  • 12.
    Sposób 5. Darwinowski Jako użytkownik systemu aukcyjnego muszę mieć możliwość wystawiania aukcji aby sprzedawać i zarabiać (rev. 1, 2, 3, 4, 5, …) Symptomy: każda historyjka reprezentuje kompletny ciąg czynności wykonywanych przez użytkownika w systemie (workflow), jednak z mniejszą niż docelowa liczbą szczegółów (low-fidelity…hi-fidelity); na poziomie backlogu pożądany stopień precyzji odzwierciedlony jest poprzez wykorzystanie serii/ciągu doprecyzowujących historyjek (story-o-types), cechą charakterystyczną na poziomie implementacji jest szerokie wykorzystanie stubów, mocków, symulatorów Efekt: wartość dla klienta dostarczana jest w każdej iteracji, możliwe wnioskowanie (planowanie) na tej podstawie; otwarte pole możliwości © 2010 Tomasz Włodarek. Pragmatyczne metody wytwarzania oprogramowania. Materiał udostępniany na licencji Creative Commons (by-nc-nd).
  • 13.
    American Footballers ©1999 Nick Veasey (http://www.nickveasey.com) © 2010 Tomasz Włodarek. Pragmatyczne metody wytwarzania oprogramowania. Materiał Tomasz Włodarek. Pragmatyczne metody wytwarzania © 2010 udostępniany na licencji Creative Commons (by-nc-nd). oprogramowania. Materiał udostępniany na licencji Creative Commons (by-nc-nd).
  • 14.
    Role użytkowników. Niewszyscy mogą robić wszystko. Zidentyfikuj role (rodzaje) użytkowników, stwórz dla każdej z nich odrębne zestawy user stories. Ustal z klientem co kto może, zdecyduj kto jest ważniejszy i ułóż w tej kolejności w backlogu. © 2010 Tomasz Włodarek. Pragmatyczne metody wytwarzania oprogramowania. Materiał udostępniany na licencji Creative Commons (by-nc-nd).
  • 15.
    Częstość użycia. Jakieoperacje użytkownicy wykonują często a jakie sporadycznie? Ułóż user stories w backlogu od najczęściej do najrzadziej wykorzystywanych. © 2010 Tomasz Włodarek. Pragmatyczne metody wytwarzania oprogramowania. Materiał udostępniany na licencji Creative Commons (by-nc-nd).
  • 16.
    Typ, ilość lubsposób przetwarzania danych. Ustal jakie dane są gromadzone, przetwarzane, przesyłane. Czy można ograniczyć ich ilość/typ/zakres/rozmiar? Czy zamiast skomplikowanych formatów danych możemy użyć pliku tekstowego? Ustal z klientem oczekiwane fidelity. © 2010 Tomasz Włodarek. Pragmatyczne metody wytwarzania oprogramowania. Materiał udostępniany na licencji Creative Commons (by-nc-nd).
  • 17.
    Interface. Ustal sposóbkomunikacji z systemem. Czy zamiast rozbudowanego GUI możemy użyć konsoli, emaila? W jaki sposób komunikujemy się ze sprzętem (wprowadzanie i wyprowadzanie danych)? W jaki sposób komponenty komunikują się ze sobą? Co można uprościć, pominąć? Ustal z klientem oczekiwane fidelity. © 2010 Tomasz Włodarek. Pragmatyczne metody wytwarzania oprogramowania. Materiał udostępniany na licencji Creative Commons (by-nc-nd).
  • 18.
    Logika biznesowa. Jakieoperacje musimy przeprowadzić a jakie kroki możemy opuścić? Jakie dane, w jakich okolicznościach muszą bezwzględnie podlegać walidacji? Przesuń resztę w dół backlogu. © 2010 Tomasz Włodarek. Pragmatyczne metody wytwarzania oprogramowania. Materiał udostępniany na licencji Creative Commons (by-nc-nd).
  • 19.
    Wygląd. Najpierw niechw ogóle zacznie działać nim stanie się ładne. Wydajność. Najpierw niech w ogóle zacznie działać nim będzie w stanie działać szybko. Bezpieczeństwo. Najpierw niech w ogóle zacznie działać nim będzie bezpieczne. © 2010 Tomasz Włodarek. Pragmatyczne metody wytwarzania oprogramowania. Materiał udostępniany na licencji Creative Commons (by-nc-nd).
  • 20.
    Nie dąż doperfekcji w pierwszym pokoleniu. Szukaj najprostszego wariantu spełniającego założenia (KISS). Nie bój się mnożyć user stories zwiększając stopniowo poziom precyzji. Nie bój się modyfikować wielokrotnie tego samego kodu. Najlepsza funkcjonalność i architektura powstają ewolucyjnie. Przygotuj się na to (refaktoryzacja, wzorce, testy, CI). © 2010 Tomasz Włodarek. Pragmatyczne metody wytwarzania oprogramowania. Materiał udostępniany na licencji Creative Commons (by-nc-nd).
  • 21.
    Znaj umiar. Dekomponujtylko te elementy, które mają szanse być realizowane w ciągu najbliższych 3–6 iteracji. Dziel tak długo aż do pojedynczej iteracji zespół będzie w stanie wziąć 4–8 user stories. Wodospady zostaw na wakacje :) Agile to nie tylko podejście iteracyjne i przyrostowe, ale również (przede wszystkim?) ewolucyjne. Na co dzień przeplataj sposoby 4 i 5 (w naprawdę dużych systemach 3, 4, 5). © 2010 Tomasz Włodarek. Pragmatyczne metody wytwarzania oprogramowania. Materiał udostępniany na licencji Creative Commons (by-nc-nd).
  • 22.
    dziękuję! tomek@poddrzewem.pl http://www.poddrzewem.pl http://www.linkedin.com/in/wlodarek © 2010 Tomasz Włodarek. Pragmatyczne metody wytwarzania oprogramowania. Materiał udostępniany na licencji Creative Commons (by-nc-nd).
  • 23.