Waterfall vs. Agile

agile
Exista o gama larga de metodologii care pot fi folosite in dezvoltarea de software. Doua dintre cele mai cunoscute sunt Waterfall si Agile. Ambele au puncte pro si contra. Care dintre ele este mai buna? Raspunsul e relativ si depinde de tipologia proiectului la care se lucreaza.

Principala caracteristica a metodologiei Waterfall e liniaritatea. Vorbim practic despre un proces care “curge” (de unde vine si numele) prin mai multe secvente, de la inceputul si pana la finalul proiectului. In Waterfall, pasii se succed si nu se repeta.

Agile in schimb este un proces iterativ, secvential. Exista un set de pasi care se repeta pentru fiecare sprint (sau iteratie). In Agile, iteratiile se succed.

“Pasii” de care vorbim in dezvoltarea unui proiect pot varia, in functie de tipul de proiect care se discuta. In continuare, voi generaliza – pentru o mai buna explicare a proceselor. Vorbim asadar despre analiza, design, implementare, testare si lansare.

In Waterfall se trece secvential de la un pas la altul – conform schemei de mai jos.

W_A_01

Practic, se desfasoara partea de analiza, apoi urmeaza cea de design, apoi cea de implementare si asa mai departe. Se merge doar inainte, ceea ce inseamna ca nu se va reveni de la design la analiza sau de la implementare la design.

Evident, lucrul cu Waterfall prezinta avantaje si dezavantaje deopotriva.

Avantaje ale lucrului cu Waterfall :

  1. Proiectul poate fi estimat cu acuratete mare, iar calendarul de dezvoltare poate fi si el stabilit odata ce avem estimarea.
  2. Bugetul necesar proiectului poate fi calculat din start, pe baza estimarii si a calendarului.
  3. Un plan de dezvoltare poate fi realizat si urmat pas cu pas, oferindu-i managerului de proiect o buna imagine de ansamblu asupra proiectului respectiv.
  4. Fiecare pas va fi documentat cu grija, astfel incat inlocuirile anumitor membri ai echipei de dezvoltare se vor putea face mai usor. Din moment ce workflow-ul e secvential si merge doar inainte, un eventual nou membru al echipei trebuie doar sa se puna la curent cu munca celui dinaintea sa.
  5. Datorita documentatiei existente, managerului de proiect ii va fi usor sa identifice cand anume (in istoria proiectului) s-a luat o anumita decizie sau s-a facut o anumita modificare.

Dezavantaje ale lucrului cu Waterfall :

  1. Una dintre marile probleme ale metodologiei Waterfall este rigiditatea. Avand in vedere ca totul “curge” doar intr-o directie, revenirea la un pas sau un anumit punct din trecut poate pune probleme mari. De exemplu, odata ce stadiul de design este complet si se trece la implementare, o modificare (mai mult sau mai putin semnificativa) de design poate da peste cap lucrurile. Altfel spus, daca clientul se razgandeste si doreste modificari fundamentale cand proiectul este deja intr-o faza avansata a dezvoltarii, asta va duce la modificari semnificative ale bugetului si ale calendarului de lucru.
  2. Problemele se identifica tarziu, in general doar in faza de testare. Iar daca aceste probleme reprezinta greseli fundamentale in arhitectura proiectului, ele pot deveni aproape imposibil de remediat – pentru ca n-au fost identificate din timp iar proiectul a fost practic construit pe o arhitectura gresita.
  3. Daca proiectul este in intarziere (din diverse motive) atunci uneori se reduce din timpul alocat testarii si rezolvarii de buguri. Ceea ce duce la lansarea unui produs cu probleme care pot sa devina critice intr-un timp relativ scurt.

In Agile avem iteratii – secvente separate (sprint-uri). In fiecare sprint se repeta aceiasi pasi mentionati mai sus – analiza, design, implementare, testare, lansare – iar sprint-urile se succed, dupa cum se poate vedea in urmatoarea schema.

W_A_02

La fel ca si in cazul Waterfall, lucrul cu metodologia Agile prezinta avantajele si dezavantajele sale :

Avantaje ale lucrului cu Agile :

  1. Rezistenta la schimbare este foarte scazuta. Aproape inexistenta, de fapt. Daca la un moment dat se doreste implementarea unei schimbari majore, aceasta poate fi luata in calcul in urmatorul sprint.
  2. Problemele sunt identificate devreme in procesul de development – si pot fi rezolvate din timp. De exemplu, daca in faza de testare de la finalul unei iteratii s-a descoperit un bug major, rezolvarea acestuia poate fi inclusa ca si task prioritar intr-o noua iteratie. Asta contribuie la imbunatatirea rapida a calitatii produsului, de la o iteratie la alta.
  3. Lansarea unui produs de baza (MVP / Most Viable Product) se poate face relativ devreme, iar respectivului produs i se pot aduce imbunatatiri/modificari in iteratiile urmatoare. Asta duce la un ROI (Return of Investment) mai rapid.
  4. Vizibilitatea la nivel general, in ceea ce priveste intreg proiectul – este mult mai buna. Este mai clar ce anume s-a facut si ce anume urmeaza sa se faca. Asta duce si la un Risk Management mai bun, pentru ca problemele care apar pe parcurs pot fi rezolvate mai devreme, iar oportunitatile se pot exploata si ele din timp.

Dezavantaje ale lucrului cu Agile :

  1. Schimbarile care apar des (de la o iteratie la alta) pot duce la nemultumiri in cadrul echipei de development.
  2. Pot aparea presiuni din partea stakeholderilor pentru includerea intr-un sprint viitor a unor functionalitati care depasesc (ca estimare de timp) perioada stabilita pentru acel sprint. Aceste presiuni pot afecta moralul echipei de dezvoltare.
  3. Este dificila estimarea efortului total, pentru un proiect dat care se va face cu Agile. Specificatiile sunt putine la inceput si nu neaparat bine documentate – in general acopera doar primele sprinturi, fara a da o idee foarte clara despre forma/functionalitatile produsului final.
  4. Documentatia este in general vaga si incompleta, ceea ce face ca integrarea noilor membri in echipa de dezvoltare sa fie problematica uneori.

Care dintre metodologii este mai buna? Nu exista un raspuns clar la aceasta intrebare. Metodologia aleasa depinde mult de tipul proiectului la care se lucreaza. O buna alternativa e “imprumutarea” anumitor concepte din metodologiile existente si crearea unei noi metodologii (custom) care sa se potriveasca proiectului in sine. O combinatie intre Agile si Waterfall poate fi binevenita. De exemplu, cea de mai jos.

W_A_03

Practic, in aceasta combinatie vorbim de :

  • o evolutie liniara a pasilor de analiza si design
  • una secventiala (pe mai multi pasi mai mici / mai multe iteratii) a implementarii si testarii
  • o evolutie liniara a lansarii

Aceasta combinatie ia unele parti bune atat din Waterfall cat si din Agile si le combina intr-o a treia metodologie, care poate fi folosita cu succes in proiectele unde se preteaza.

Nimic nu este fix, nimic nu este batut in cuie. Orice PM are libertatea de-a alege metodologia dupa care lucreaza, cata vreme rezultatele obtinute la final sunt bune/foarte bune.

Voi ce metodologie folositi? Care sunt avantajele ei? Dar dezavantajele?

Add a Comment

Your email address will not be published. Required fields are marked *