Ako mislite da znate bolje kako treba praviti programe, onda to pokažite na delu.
Prvo proizvođač napravi nešto i testira na fabričkim testovima. Kada funkcija padne na testu, onda barem jedno od to dvoje ne valja - funkcija ili test. Ako funkcija prođe test, to znači da radi ispravno u onim slučajevima koji su ubačeni u test. Mnogo više slučajeva može da nastupi (praktično neograničeno), ali je samo neki ograničen skup slučajeva ubačen u test. Primeri se biraju tako da ako greška postoji, da se što verovatnije ispolji. Dakle, kada je proizvod prošao fabričke testobve, to znači da je u celini testiran i da nema poznatih grešaka. Tada se objavljuje beta.
Onda manji deo korisnika počinje da koristi i nastupa mnogo više slučajeva od onoga što je pokriveno fabričkim testovima. Onda korisnici prijavljuju greške i proizvođač ispravlja te novouočene greške. Kada prestane da bude poznatih, izbacuje se finalna verzija.
Onda mnogo više korisnika to koristi i ispoljavaju se greške koje nisu bile uočene. Onda se ispravljaju i one i kada praktično prestane da bude poznatih grešaka, onda je proizvod zreo za ozbiljnu upotrebu, naravno uz ispravke grešaka koje se naknadno budu uočile.
To nikako ne znači da je finalna verzija "nedovršeni poluproizvod krivicom proizvođača". Jednostavno su takvi razvojni ciklusi.
Nije bitno koji su zaključci izvučeni, već kako se do njih došlo.