Isti se softver ne piše dvaput

Isti se softver ne piše dvaput

"Težak je život programera", umeo je šaljivo da kaže jedan moj prijatelj. I jeste težak. Naša profesija napreduje veoma brzo. Tehnologije i prakse, koje danas koristimo za razvoj softvera, već sutra postaće naš tehnički dug. Često imamo ambivalentan odnos prema svom poslu: konstantno smo oduševljeni novim, a ogorčeni nasleđem. Nije retkost da poželimo da otvorimo praznu datoteku i počnemo iz početka.

programiranje

“Težak je život programera”, umeo je šaljivo da kaže jedan moj prijatelj. I jeste težak. Naša profesija napreduje veoma brzo. Tehnologije i prakse, koje danas koristimo za razvoj softvera, već sutra postaće naš tehnički dug. Često imamo ambivalentan odnos prema svom poslu: konstantno smo oduševljeni novim, a ogorčeni nasleđem. Nije retkost da poželimo da otvorimo praznu datoteku i počnemo iz početka.

Promena je jedina konstanta

Sigurno ste već čuli izreku da “dobar softver nikada nije završen”. Svako ko je na tržište poslao bar jednu komercijalnu aplikaciju, zna da razvoj softvera nije precizno isplaniran, vremenski ograničen projekat. Mene više podseća na dečiju igru Lego kockama, gde nam se na početku čini da imamo jasnu ideju šta želimo da napravimo, a onda se ciljevi često menjaju. U igru odjednom uleću i neki autići i kartonska kutija, a neretko shvatimo i da nam fale neke kocke. Igra zapravo nikada ne dolazi do nekog logičnog kraja. Uglavnom se završava kad nas prekine mama. Ili žena.

Promene su u prirodi razvoja softvera. Na njega utiče toliko nepoznatih stvari, da je svako dugoročnije planiranje potpuno besmisleno. Pod našom su kontrolom samo vizija i proces. Sve ostalo je reakcija na tržište i korisnike. Programer, koji nakon mnogih godina razvoja nekog softvera želi da ga napiše iz početka, zaboravlja na tu promenljivu prirodu svog posla. On gleda unazad i jasno vidi pogrešne odluke, koje su uzrok za tehnički dug. Međutim, često ne može da razume pod kakvim su okolnostima takve odluke donete i pogrešno pretpostavlja da će ovog puta, poučen iskustvom, moći bolje da planira i izbegne nove greške. Iskustvo jeste važno ali novo vreme donosi nove nepoznate, koje imaju neki novi, nepredvidljiv uticaj na razoj. Najbolje što možemo da uradimo nije da srušimo i počnemo iz početka, već da prilagodimo naš proces, nadajući se da će za par godina nekog novog programera glava boleti manje nego nas.

Loša ideja

Smatram da u praksi ili:

  1. refaktorišemo, popravljamo, odnosno nadgrađujemo postojeći softver ili
  2. pišemo novi, koji treba da prati neku novu viziju i odgovori nekom novom tržištu.

Trećeg nema. Napisati postojeći softver iz početka ima smisla koliko i ponovo napraviti isti avion od Lego kocaka. Ko ima decu, razumeće.

Koliko je ponovno pisanje postojećeg softvera loša ideja, najbolje je opisao Joel Spolsky u svom članku: “Stvari koje nikad ne bi smeli da radite, prvi deo”. U njemu opisuje slučaj kompanije Netscape, na koju je odluka da iz početka napiše svoj web browser imala katastrofalne poslovne posledice. Mlađi čitaoci možda neće znati za Netscape, ali možda je i to jedna od tih posledica. Ako ikada poželite da napišete neki softver iz početka, predlažem da prvo pročitate Joelov članak.

Opasna terminologija

Uprkos svemu, programeri i danas često koriste termin “napisati iz početka”. Sve i da smo vas do sad Joel i moja malenkost ubedili u besmislenost toga, ponekad je i sama terminologija opasna. Ali to bih želeo da vam objasnim na primeru iz sopstvenog iskustva.

Klijent za koga trenutno radim je jedno veselo, nemačko softversko preduzeće. Već 8 godina razvijaju softver, čiji su korisnici uglavnom pravnici, koji cene sigurnost. Prodaja ide dobro, pa je direktor uglavnom zadovoljan. Zadovoljna je i operativa. Zadovoljna je čak i recepcija. Jedini, koji nisu toliko zadovoljni, su programeri. Tokom svih tih godina, u njihovom se softveru nagomilao tehnički dug. Tištio je taj tehnički dug vođu razvoja, pa je s vremena na vreme preklinjao svog šefa, da ga pusti da softver “refaktoriše buldožerom”. Iskusni direktor se nije dao prevariti, pa je zahteve da se počne iz početka dugo odbijao. Sve do prošle godine. Tada je, na veliko veselje svojih programera, dao zeleno svetlo za razvoj nove verzije – iz nule. Šta li se promenilo?

Slušajući programere, dok su mi pričali šta sve žele da urade u novoj verziji, odzvanjala su uglavnom moderna tehnička rešenja: te Angular, te Node, te Redis, te Bootstrap, itd. A onda sam upoznao direktora. Njegova očekivanja nisu bila toliko tehnička. Pričao mi je oduševljeno o tome kako advokati budućnosti žele da rade na telefonima i tabletima. Objašnjavao je kako su se promenili poslovni modeli jer su se i konzervativniji klijenti navikli na SaaS, kako postoje nove prilike na drugim tržištima, gde sigurnost, posebno nakon poslednjih NSA skandala, ima sve veću cenu, itd. Stekao sam utisak da razgovaram s vizionarom, koji zapravo ne želi toliko novu verziju postojećeg softvera, koliko neki nov proizvod, koji će odgovoriti nekim novim izazovima. Motiv je poslovni, a ne tehnički. Izašao sam oduševljen. Zasukali smo rukave i razvoj je počeo.

Nešto, što sam na početku ignorisao, a što mi je tek kasnije upalo u uši, je da ceo tim razvoj nove verzije naziva “pisanje iz početka”. “Pišemo iz početka”, govorili su drugim kolegama. “Gradimo je iz nule”, čuo sam kako neko objašnjava preko telefona. Nekako sam neoprezno i sam prihvatio tu terminologiju ali sam ubrzo počeo da shvatam njen negativan uticaj. Obzirom da mi “pišemo iz početka” postojeći softver, onda ga koristimo kao da je specifikacija za novi. Produktna ekipa je pokušavala da osmisli novi korisnički interfejs, sve vreme gledajući u stari i pretpostavljajući da će korisnici nove verzije biti identični postojećim. Programeri su pokušavali da reše iste tehničke probleme na novi način, ne pitajući se da li te probleme ovog puta uopšte treba rešavati. Postalo mi je jasno da “pisanje iz početka” nije samo bezazlena terminologija, već pristup, koji ima opasan uticaj na naš razvojni proces.

Korisnik pre tehnologije

Kada razvoj softvera počne iz početka, u glavama treba imati viziju, a ne tehnologiju. Motiv treba da bude poslovni, a ne tehnološki. Ako su nam prioriteti poređani tako, da nam je glavni cilj otplatiti tehnički dug, a ne rešiti nove probleme ili napasti novo tržište, da li ćemo dovoljno vremena utrošiti na inovaciju? Bojim se da ne.

“Težak je život programera”, umeo je šaljivo da kaže moj prijatelj. Imao je pravo. Ali život prvo moramo da olakšamo korisniku, pa tek onda sebi.

Komentari

  1. Petar

    Petar

    13. 12. 2013. u 3:38 pm Odgovori

    Osobno ne volim kada ljudi daju isključive savjete. Uvijek radi ovo, nikad ne radi ono.

    Više volim “možda”, “ovisi”, “ponekad”, ali da, problem je da se to teže “prodaje”.

    Tako da ovo “Isti se softver ne piše dvaput” može biti istina većinu vremena ali nikako uvijek.

    Život je komplicirana stvar i možemo doći u bezbroj situacija, posebno kad se okolnosti često mijenjaju.

    Popravljao sam jako slabi kod, koji je “radio”. Ali više se je isplatilo tu jad i bijedu napisati iznova nego biti pod stalnom brigom kad će puknuti i koliko dana ću potrošiti da nađem gdje je problem. Ali tada je išlo za relativno malu investiciju, tako da sve ovisi.

    Na nekoj burzi su investirali milijune u .NET kod, pa su koliko se sjećam otkrili da im je problem garbage collector, jer im stvara kašnjenje od nekoliko milisekundi. Ali tamo su te ms vrijedne ogromne pare. I bacaj sve u vodu i piši na novo u C-u.

    It depends……

    :))

  2. Poratl za posao

    Poratl za posao

    16. 12. 2013. u 10:41 am Odgovori

    Slažem se s Petrom. Sve je stvar pojedinačne situacije. I ja sam imao slučajeve gdje sam nasljedio kod od prijašnjih programera koji su napravili kupus od programa, a potom dali otkaz. Vidio sam da je krajnje besmisleno to održavati jer se na održavanje gubi jako puno vremena. Zato sam napisao sve iznova. Bio sam sretan i ja i poslovodstvo.

    Štoviše, svaki program, odnosno svaki IS ima svoj životni ciklus. Kada vrijeme (i troškovi) održavanja počinju biti veliki i besmisleni, onda ide “Jovo nanovo”.

Odgovori

Tvoja e-mail adresa neće biti objavljena.

Popularno

Kolumna

Kako je meni i 35.000 kupaca 96% snižen Foreov UFO postao “najbolje iskustvo kupovine ikad”

Osjećaj kada pronađete, a potom i kupite neki proizvod po 96% nižoj cijeni, nezamjenjiv je, pogotovo ako ste jedni od “rijetkih” koju su ponudu pronašli. Svi vam zavide, napravili ste odličan “deal”, a manje je bitno treba li vam uopće taj proizvod.

Startupi i poslovanje

Od agencije do freelancinga: 8 savjeta za život i posao koje sam naučio težim putem

A kako vi ne bi morali, stiže jedna poučna usporedba oblika poslovanja kroz stvarna iskustva.

Startupi i poslovanje

MVT Solutions iz Pisarovine osigurao 100.000 od 300.000 eura vrijedne runde investicije za brži i jeftiniji razvoj IoT-ja

Ovaj domaći startup u tri je godine, bez ikakve vanjske investicije, razvio IoTaaP, alat koji može uvelike olakšati razvoj IoT proizvoda različitim klijentima. Osim hardvera, njihov poslovni model se skalira kroz softver i cloud, a koliko uspješno su se rješenjem i radom potvrdili do sada, najbolje govori i vijest o prvoj investicijskoj rundi predvođenoj domaćim investitorom.

Što ste propustili

Startupi i poslovanje

Osvojili su “Oscara” za industrijski dizajn, a onda sve snage uložili u kreiranje najboljih madraca

Uz mnoge druge domaće i inozemne nagrade, Filip Havranek i Kristina Lugonja dobitnici su Red Dota, najprestižnije svjetske nagrade za industrijski dizajn, a odnedavno su postali i osnivači startupa. Iako su dosad dizajnirali različite namještaje i proizvode - od stolova, stolica, lampi i prijenosnih SSD-ova - njihov prvi startup proizvod je madrac Nimbus koji se ne prodaje u nijednoj fizičkoj trgovini.

Kultura 2.0

Kako iskoristiti advent za employer branding (a da nije samo domjenak)

Važnost dobrog raspoloženja unutar tvrtke ne možemo zanemariti, pogotovo kad je riječ o kraju godine kada se projekti privode kraju dok se istovremeno pripremmo za nadolazeće. Čini se da je A1 otkrio najbolju formulu kako preživjeti zimu: mjesec dana blagdana u uredima.

Startupi i poslovanje

“Kod nas toga nema”: Samo 16% žena u hrvatskoj IT industriji nije doživjelo spolnu diskriminaciju

“Nejednakost je samo u Vašoj glavi, da manje sjedite pred pudijerom, a više pred knjigom nebi vidjeli nejednakost”.

Tehnologija

Klijenti banaka imaju sve manje vremena: Kako banke razvijaju digitalne proizvode za njih?

Digitalna transformacija mijenja iz temelja različite industrije. Koje vještine su vam potrebne ne bi li u jednoj od njih temelje gradili upravo vi, saznali smo od product ownera i managera Raiffeisen banke.

Kolumna

Kako je meni i 35.000 kupaca 96% snižen Foreov UFO postao “najbolje iskustvo kupovine ikad”

Osjećaj kada pronađete, a potom i kupite neki proizvod po 96% nižoj cijeni, nezamjenjiv je, pogotovo ako ste jedni od “rijetkih” koju su ponudu pronašli. Svi vam zavide, napravili ste odličan “deal”, a manje je bitno treba li vam uopće taj proizvod.

Tehnologija

Hardverski vodič za sve trenutne i buduće influencere, freelancere i gamere

Kraj jedne godine i ulazak u novu možete pamtiti po retrospektivi na prošle uspjehe i neuspjehe te novogodišnjim planovima koji su se izjalovili do sredine siječnja. A možete i po tome kako ste napokon odlučili napraviti prvi korak prema ostvarenju svog influencerskog, gamerskog ili freelancerskog sna. Hardver možda nije najvažnija stvar u toj priči, ali je sigurno bitna stvar za početak.