Prva ideja za rešenje ovog programa je korišćenje naredbe
y = faktorijel(x)
pri čemu se pretpostavlja da je faktorijel() neka već raspoloživa funkcija koja se ponaša kao crna kutija i izračunava traženu vrednost. Čak i ako je takva funkcija raspoloživa, mi nismo nužno sigurni u njenu ispravnost. Ispravnost našeg šireg programa zavisiće od ispravnosti te funkcija čije ponašanje nam možda nije u potpunosti poznato. Šta, na primer, vraća ta funkcija za x=-5? Da bismo mogli da koristimo takvu funkciju, neophodno je da znamo da je ona ispravno napisana, tj. da znamo da li se ona uvek zaustavlja, za koje ulazne vrednosti je definisana i da li za svaku od njih vraća tačan rezultat.
Ukoliko takva funkcija nije raspoloživa, neophodno ju je implementirati i dokazati njenu ispravnost. Ono što je na samom početku neophodno uraditi je da se jasno definiše kakve se vrednosti ulazne promenljive mogu očekivati i šta je to što se očekuje na izlazu, tj. šta je to što želimo da program izračuna. Dakle, neophodno je da jasno definišemo preduslov i pauslov programa, tj. da formulišemo specifikaciju.
Kako faktorijel ima smisla računati samo za nenegativne cele brojeve, preduslov programa je {x ≥ 0}. Na izlazu očekujemo rezultat izračunavanja faktorijela, pa je pauslov {y = faktorijel(x)}. Dakle, specifikaciju našeg programa možemo zapisati na sledeći način:
{x ≥ 0} --> {y = faktorijel(x)}
Sledeći korak je projektovanje i realizacija rešenja, tj. konstruisanje algoritma koji rešava ovaj problem.