Istega ‘softverja’ se ne piše dvakrat

Vam je članek všeč?

Priporočite ga prijateljem prek družbenih omrežij!

“Življenje programerja je težko”, je rekel moj prijatelj v šali. Vendar je resnično težko. Naša panoga napreduje zelo hitro. Tehnologija in praksa, ki jo za razvoj programske opreme uporabljamo danes, je lahko že jutri preteklost, “tehnični dolg”. Pogosto imamo ambivalenten odnos do našega dela – nenehno se navdušujemo nad novim, obenem pa smo ogorčeni nad starim. Velikokrat se zgodi, da bi najraje odprli prazno datoteko in začeli znova.

programiranje

“Življenje programerja je težko”, je rekel moj prijatelj v šali. Vendar je resnično težko. Naša panoga napreduje zelo hitro. Tehnologija in praksa, ki jo za razvoj programske opreme uporabljamo danes, je lahko že jutri preteklost, “tehnični dolg”. Pogosto imamo ambivalenten odnos do našega dela – nenehno se navdušujemo nad novim, obenem pa smo ogorčeni nad starim. Velikokrat se zgodi, da bi najraje odprli prazno datoteko in začeli znova.

Sprememba je edina konstanta

Zagotovo ste že slišali za rek, da “dobra programska oprema ni nikoli dokončana”.  Vsak, ki je kdaj na trg poslal vsaj eno komercialno aplikacijo, ve, da razvoj programske opreme nikoli ni natančno načrtovan, niti nima nekega časovnega roka. Mene najbolj spominja na otroško igro z Lego kockami, kjer se nam na začetku zdi, da imamo natančno določen cilj, kasneje pa se končni cilj večkrat spremeni. Kar naenkrat se kockam pridružijo še avtomobilčki in kartonska škatla, velikokrat pa ugotovimo, da potrebujemo še več kock. Ta igra dejansko nima logičnega konca. Po navadi se konča takrat, ko nas prekine mama. Ali žena.

Spremembe so v naravi razvoja programske opreme. Na razvoj vpliva toliko neznank, da je neko dolgoročno načrtovanje popolnoma brezsmiselno. Pod našo kontrolo sta zgolj vizija in proces. Vse ostalo je prilagajanje tržišču in uporabnikom. Programer, ki si po mnogih letih razvoja neke programske opreme želi, da bi vse skupaj napisal na novo, pozablja na spremenljivo naravo svojega dela. Ko pogleda nazaj, vidi vse napake, zaradi katerih je programska oprema zastarela. Obenem pa ne razume, v kakšnih razmerah so bile te rešitve sprejete, in zato zmotno misli, da je sedaj še boljši, in se bo napakam zagotovo izognil. Izkušnje so pomembne, vendar pa prihodnost prinaša vedno nove neznanke, ki imajo nepredvidljiv vpliv na razvoj. Najboljše kar lahko storimo ni to, da vse zbrišemo in začnemo znova, ampak prilagodimo naš proces v upanju, da bo čez nekaj let nekega novega programerja glava bolela manj, kot nas pred leti.

Slaba ideja

Zdi se mi, da v praksi, ali:

  1. preoblikujemo, popravljamo, oziroma nadgrajujemo obstoječo programsko opremo ali
  2. pišemo novo, ki išče neko novo vizijo in odgovarja na vprašanja nekega novega trga.

Tretje možnosti ni. Napisati obstoječo programsko opremo od začetka je smiselna toliko, kot je smiselno dvakrat sestaviti enako letalo iz Lego kock. Tisti, ki ima otroke, bo razumel. Da je ponovno pisanje že obstoječe programske opreme slaba ideja, je najbolje opisal Joel Spolsky v svojem članku “Stvari ki jih nikoli ne smete storiti, prvi del”.  V njem opiše primer podjetja Netscape, ki je s svojo odločitvijo o izdelavi spletnega brskalnika popolnoma iz ničle, pripeljalo do katastrofalnih poslovnih posledic. Mladi bralci morda še niste slišali za Netscape. Morda je to ena od posledic te odločitve. Če si vseeno želite napisati neko programsko opremo popolnoma od začetka, predlagam, da si najprej preberete Joelov članek.

Nevarna terminologija

Kljub vsemu, programerji danes pogosto uporabljajo termin “napisati od začetka”.  Tudi če sva vas jaz in Joel do sedaj že nekoliko prepričala v nesmiselnost tega početja, je včasih tudi sama terminologija lahko nevarna. Naj vam to pojasnim na primeru mojih lastnih izkušenj.

Stranka, za katero trenutno delam je veselo, nemško programersko podjetje. Že več kot 8 let razvijajo programsko opremo, katere uporabniki so večinoma pravniki, ki cenijo varnost. Prodaja je uspešna, tako da je tudi direktor pretežno zadovoljen. Zadovoljni so tudi operativci. Zadovoljna je celo recepcija. Edini, ki niso ravno zadovoljni, so programerji. Preko vseh teh let, se je v njihovi programski opremi nabralo precej zastarelih rešitev. Te zastarele rešitve so začele motiti vodjo razvoja  do te mere, da je začel preklinjati svojega šefa, da naj mu dovoli, da naj programsko opremo “popravi z buldožerjem”. Izkušeni direktor pa se ni pustil zapeljati, in še naprej ni dovolil, da se programska oprema začne pisati znova. Vse do prejšnjega leta. Takrat je, na veliko veselje programerjev, dal zeleno luč za razvoj nove različice – iz ničle. Le kaj se je spremenilo?

Ko sem poslušal programerje, kaj si želijo v novi različici, so odzvanjale predvsem napredne tehnične rešitve: Angular, Node, Redis, Bootstrap itd. Nato pa sem spoznal direktorja. Njegova pričakovanja niso bila toliko tehnična. Navdušeno mi je pripovedoval, kako si odvetniki želijo, da bi v prihodnosti delali na mobilnih telefonih in tablicah. Pojasnjeval mi je, kako se je spremenil poslovni model, saj so se tudi konzervativni klienti navadili na SaaS, o tem, da obstajajo priložnosti tudi na drugih tržiščih, kjer ima varnost, še posebej po zadnjih škandalih NSA, vse večjo ceno. Dobil sem vtis, da govorim z vizionarjem, ki si dejansko ne želi toliko nove različice obstoječe programske opreme, bolj kot nekega novega produkta, ki bo kos novim izzivom. Motiv je poslovni, in ne tehnični. Odšel sem nadušen. Zavihali smo rokave in začeli z razvojem.

Nekaj, kar sem na začetku ignoriral, je nenadoma postalo jasno. Celotna ekipa je razvoj nove različice poimenovala “pišemo od začetka”. Tudi sodelavcem so govorili: “Pišemo od začetka”. “Delamo iz ničle”, sem slišal nekoga, ki je po telefonu pojasnjeval njegovo trenutno delo. Nekako sem se tudi sam neopazno privadil na to terminologijo, vendar pa sem se kmalu zavedel njenega negativnega vpliva. Predvsem imam v mislih to, da “pišemo od začetka” obstoječo programsko opremo, ki jo nato uporabimo kot specifikacijo za novo. Razvojna ekipa se je ves čas trudila izdelati uporabniški vmesnik, ki bi bil karseda podoben staremu, saj naj bi bili uporabniki nove različice identični uporabnikom stare. Programerji so se trudili rešiti enake tehnične probleme na nov način, brez da bi se vprašali, ali bo tudi te probleme treba v prihodnosti reševati ponovno. Kmalu mi je postalo jasno, da “pisanje od začetka” ni zgolj napačna terminologija, ampak tudi pristop, ki ima negativne posledice na naš razvojni proces.

Uporabnik pred tehnologijo

Ko se razvoj programske opreme začne od začetka, moramo imeti v glavi vizijo, ne pa tehnologijo. Motiv mora biti poslovni in ne tehnološki. Če nam je glavni cilj odprava tehnične zastarelosti, namesto napada na nov trg ali rešitve problema, bomo potem vložili dovolj časa v razvoj? Bojim se, da ne.

“Življenje programerja je težko”, je rekel moj prijatelj v šali. Imel je prav. Vendar pa moramo življenje najprej olajšati uporabniku, nato sebi.

Prevedel Janez Klemenčič