@Catalin_Banu Uite ca am aparut si eu in discutie, intr-un tarziu
Ideea de baza in Agile este sa reusesti sa iei deciziile potrivite in functie de context. De aceea Agile Manifesto spune in principiu ca trebuie sa te adaptezi situatiei si sa gandesti de fiecare data cum e mai bine sa faci. In filozofia Agile ar trebui sa nu fim rigizi prin a avea o metodologie stricta, ci mai curand sa reusim sa ne adaptam pentru un sigur scop: sa aducem valoare adaugata clientului cat mai rapid.
Astfel exista niste practici care sunt corelate cu dorinta de a ne concentra pe valoarea adusa clientului:
- prioritizare a cerintelor in functie de valoare adaugata si dificultate
- cicluri scurte de feedback si incercarea scurtarii lor (de la cerinte la implementare, de la idee la un prim increment, de la cod scris pentru cerinte la validarea lui prin teste automate, etc)
- colaborare in echipe multi-functionale; sa ai in echipa membri care pot sa rezolve orice e nevoie pentru a aduce valoare clientului
- si multe altele
Pentru a raspunde acum punctual intrebarii, in filozofia Agile nu vrem sa avem o documentatie completa la inceputul proiectului. Vrem doar sa avem cerinte foarte clare pentru urmatoarea perioada (3-6 saptamani). Aceste cerinte foarte clare trebuie sa fie exact nucleul valorii adaugate a produsului creat. De ce? Pentru ca vrem sa il lansam cat mai rapid catre utilizatori si sa ii intrebam daca ii ajuta de fapt si daca pot sa monetizez cat mai repede produsul. Aproape de fiecare data trebuie sa fac ajustari, mai mici sau mai mari, pentru ca utilizatorii sa fie cu adevarat multumiti. Asta inseamna ca am un prin increment care este utilizat, care aduce valoare clientului si profit producatorului.
Dar trebuie sa am niste filtre care sunt utilizate pentru a fi sigur ca cerintele sunt clare atunci cand incep sa lucrez. In Scrum acesta se numeste Definition of Ready. Este practic o lista de criterii pe care cerintele trebuie sa le respecte (cerintele sunt clare, au definite criterii de acceptanta, exista mock-up grafic, poate sa fie implementat in maxim 3 zile, etc). Echipa poate si trebuie sa refuze orice cerinte care nu sunt clare, pentru ca altfel nu facem nimic altceva decat sa pierdem timp si bani pe cerinte neclare.
Un alt filtru este Definition of Done, care arata cum cerintele sunt finalizate de catre echipa. Si aceasta este o lista simpla (analizat, codat, testat dev, scris teste automate cu coverage 80%, nu exista buguri, etc)
Practic daca orice cerinta este implementata in maxim 3 zile, asta inseamna ca clientul poate sa vada in maxim 3 zile noi dezvoltari si sa isi spuna parerea daca asta este ce vrea. Daca mai vrea ajustari, le formalizeaza in asa fel incat sa respecte Definition of Ready si echipa le va realiza in functie de prioritatea cu care le vrea clientul. Singurul lucru pe care nu l-as face aici ar fi sa opresc echipa din a dezvolta ceva pentru a face shimbari, decat in cazuri rare si foarte speciale.
Un dialog constant cu clientul ii da increderea ca ceea ce se dezvolta este ceea ce vrea, iar micile sau marile ajustari vin repede astfel incat sa avem incremente de aplicatie care pot sa fie livrate cat mai repede.
Am lucrat si cu clientul langa noi, in echipa si pot sa spun ca a fost cea mai buna experienta. In orice moment puteam sa intrebam orice si eram siguri ca dezvoltam exact ce trebuie.
Pentru a concluziona, nu cred ca poti sa dezvolti software fara a avea cerinte clare si bine documentate. Orice filozofie si metodologie ai alege, iti trebuie claritate maxima cand incepi sa lucrezi. Traim intr-o lume dinamica unde pentru a putea sa ne ajutam clientii la maxim trebuie sa fim capabili sa acceptam si sa le rezolvam “nehotararile” cat mai repede si fara a crea technical debt.