Od viška glava (ne) boli

Program za knjigovodstvo – moćan i fleksibilan

Gužva u džungli

30. oktobra 1974-e u Zairu se odigrao jedan od najboljih boks mečeva između aktuelnog svetskog šampiona Džordža Formena i Muhamed Alija – “gužva u džungli. Meč je trebao da bude rutinsko prebijanje Alija od strane Foremana jer je Foreman  bio mašina neverovatne snage koja je jednog Frejzera u samo dve runde nokautirala 6 puta. Muhamed Ali je sa druge strane bio znatno slabijeg udarca i reputacije, ali mnogo pokretljivi i brži.

Čak ni komentatori pristalice Alija mu nisu davali nikakve šanse u duelu jer je sva logika i bokserska praksa govorila jasno u prilog da svestraniji Foreman pobeđuje. Rezultat ove istorijske bitke je dobro poznat: Ali je kao pčela plesao oko Foremana sedam rundi, potpuno ga izmorio i onda ga nokautirao nošen skandiranjem desetine hiljade Zairaca: ”Mumbaje Ali, Mumbaje Ali” (Ubij ga Ali…).

Ok, priča zanimljiva, ali kakve veze imaju knjigovodstveni program i gužva u džungli?

Suštinski se svodi na to da je to ilustracija kako se ispostavilo da je Alijeva brzina i pokretljivost postigla mnogo veći efekat od svestranijeg, spremnijeg i u svakom pogledu jačeg Foremana. Da prenesem tu analogiju polako sad na program za knjigovodstvo

Features sell

Tradicionalno u segmentu poslovnih (eng. enterprise) aplikacija vlada nepisano pravilo Features sellšto grubo prevedeno označava da je uspešnost prodaje poslovnog softvera direktno proporcionalno broju dodatnih osobina i funkcija koje on ima u poređenju sa konkurentskim programima.

Tačnost i delotvornost ovog pristupa potvrđena je tržišnim uspehom proizvođača ovakvih aplikacija u zadnjih nekoliko dekada, a primera takvih aplikacija je mnogo: od Microsoft Excell-a do skoro svih programa za knjigovodstvo domaćih i stranih. Programi ovog tipa su toliko načičkani funkcijama da se često porede metaforički sa “švajcarskim nožićem”.

O kompleksnosti tih aplikacija kao problemu po korisnika programa za knjigovodstvo sam već pisao, te ću ovde da se osvrnem na jedan drugi problem, a to je da je izrada i održavanje takvih projekta izuzetno skupa i zahteva veliki broj radnika, što čini praktično nemogućim “+1 tržišnu borbu”  (imanje više funkcija od konkurencije). Kao ilustracija toga može da posluži da u “super teškoj” kategoriji knjigovodstvenih programa u SAD postoji samo jedna ozbiljna firma: Intuit.

Da li to znači da ne postoje druge firma u Americi koje rade knjigovodstvenim programima? Naravno da ne. Ostale firme uglavnom primenjuju taktiku patentiranu od strane Steve Jobs-a

“Ako ne možeš nekog da pobediš u nekoj igri, promeni igru.”

To se u praksi svodi na to da se konkurencija okreće rešenjima čiji je akcenat sa težnje na imanju što više funkcija pomeren na imanje što manje funkcija, a sve to na bazi logike da je većini korisnika u stvarnosti potreban samo jedan veoma mali broj funkcija kompleksnih i moćnih rešenja, te da svo to mnoštvo funkcija koje “teškaši” nude korisniku samo smetaju .

Primera ovih programa ima mnogo: od kanoničnih Google Docs-a i Basecamp-a do knjigovodstvenih programa poput Freshbooks.

Ja nisam pristalica ni jedne ni druge grupe, već moje opredeljenje ide u pravcu “što većeg broja pametno odabranih funkcija” . Jedan od ljudi koji je taj stav objasnio na maestralan način je Joel Spolsky, prema čijem iskustvu imam neizmerno poštovanje.

Ako vam slušanje predavanja na engleskom jeziku nije problem obavezno odvojite sat vremena za ovo.

Za sve nas prezauzete da odvojimo sat vremena za gledanje bilo čega evo jednog mog primera koji ilustruje takođe moj pristup na jedan “konkretan” način…

Procesi, a ne funkcije…

U jednom od mnogih četova koje sam imao sa Aleksandrom Saveskim, dotakli smo se tematike korisničkog filtriranja podataka prikazanih u tabeli.

Sasvim ispravno i u duhu rešenja iz grupe švajcarskih nožića, Aleksandar je izneo primer o tome kako je korisno imati mogućnost filtriranja podataka poslovnih partnera predstavljenih u tabeli po različitim kriterijumima koji čak mogu biti i povezani logičkim operacijama omogućavajući time fleksibilno i moćno filtriranje podataka. Ideja je takođe da se korisniku omogući da određene često korišćene izraze za filtriranje snimi i kasnije samo pozove iz liste predefinisanih filtera.

Evo vrlo grube ilustracija ideje takve tabele (nema veze nikakve sa rešenjem koje Aleksandar implementira)

Odmah da razjasnimo nešto: ovo rešenje je po mom mišljenju konceptualno sasvim na nivou najboljih programa i kao takvo implementirano u dosta svetskih programa. Drugim rečima, bez obzira na dalji tok ovog teksta, ne tvrdim da je rešenje pogrešno per se, samo nije u skladu sa mojom filozofijom građenja programa – dozvoljam verovatno pogrešnom.

Ja sam se naravno kao svaki pravi zagrižen programer  odmah složio da je to moćno i fleksibilno rešenje, ali sam onda stavi svoju kapu “arhitekte” i krenuo da “glumim đavoljeg advokata” te ga zapitao koji je konkretan slučaj kad je filtriranje potrebno.

Po meni je vrlo neverovatno da će bilo koji korisnik doći do ekrana sa listom korisnika iz čiste dosade, uvek postoji neki razlog i izuzetno je bitno proniknuti u to na to koji proces iz stvarnog sveta rezultuje tim dolaskom korisnika na taj ekran sa listom korisnika.

Da li je to traganje za šifrom kupca koji sedi sa druge strane stola, nasuprot komercijaliste i čeka da poruči robu?  Moguće – dosta programa ima tu funkciju, ali to što dosta programa implementira nešto na isti način ne znači neizostavno da je to ispravan način. Svaki kupac zna napamet jedinstveni PIB sopstvene firme tako da je sa tog aspekta pretraga partnera suvišan korak koji je moguće preskočiti direktnim odlaskom u unos računa, pitati kupca koji mu je PIB i njegovim ukucavanjem momentalno odrediti kupca računa.

Evo scenarija koji je Aleksandar spomenuo i koji na prvi pogled je očigledan dokaz svrsishodnosti filtera.

Šta ako je izvođaču građevinskih radova potrebna lista građevinskih radova koji su završeni, a koji nisu naplaćeni? Zar to nije savršen slučaj za filter od dva elementa i oni dobiju izveštaj kakav njima treba?

Na prvi pogled, diskusioni nokaut dostojan Alijevog iz 7 runde. Moj odgovor (naravno) je bilo opet pitanje zašto je ta lista treba korisniku uopšte? Šta će on sa njom da uradi jednom kad je vidi na ekranu?

Objašnjenje je bio da korisnik na bazi te liste kreira račun za izvršene radove koji ispostavlja naručiocu radova – što nas dovodi do ključnog dela ovog teksta – ilustracije mog stava

Korisnika ne zanima funkcija “filtriranja liste radova koji su završeni i neplaćeni”.
Ono što njega zanima je automatizacija procesa “fakturisanje neplaćenih radova”.

Grubo i čisto hipotetički ilustrovano, ne treba njemu tabela sa filterima, grupisanjima i sortiranjima, već jedno jedino “dugme” koje kad klikne mu otvori ekran za unos računa kod koga su kao stavke uneseni automatski svi završeni, a neplaćeni radovi. On onda prođe brzo kroz tu listu i izbaci stavke koje neće da fakturiše i to je to.
(Ako se uvek fakturišu SVI neplaćeni radovi ni korak sa pregledom računa ne bi bio potreban – pritisak na dugme i faktura izlazi)

Korisnici, a ne mi (programeri)

Najveći problem u pravljenju poslovnih aplikacija je u tome da ih prave programeri, a ne sami korisnici. Kada to kažem naravno da ne mislim da su programeri glupe i nesposobne individue, naprotiv spadaju u društveni vrh po tom pitanju. Ono na šta mislim je da su po definiciji programeri ljudi tehničke edukacije ili bar “skloni tehnici” i kao takvi fokusirani na implementacino–tehničke aspekte programa.

Ko bi mogao od programera odoleti tako savršenoj tabeli koja automatski radi grupisanje, sortiranje, zamrzavanje, pretraživanje itd – sve bez ijedne linije koda?

Usled te opčinjenosti alatima, programskim jezicima i sličnim tehničkim aspektima veoma je lako smetnuti sa uma da svi ti alati služe modelovanju i automatizaciji stvarnih poslovnih procesa korisnika programa i zameniti taj pristup potpuno obrnutim pristupom gde se stvarni procesi prilagođavaju alatima.

Koliko puta ste pomislili ili čuli nekog da kaže nešto poput
“Ova tabela korisnička kontrola je super cool, pitam se kako i gde bi smo mogli da je koristimo u programu?”

Zaključak

Dobar knjigovodstveni program nije ni švajcarski nožić ni “glorifikovani text box”. Dobar knjigovodstveni program menja “fleksibilnost” za “fokusiranost”, orijentaciju na opcije koje “mogu da podrže bilo koji korisnički zahtev” sa orijentacijom na “obuhvatanje i sažimanje procesnog koraka više”. Dobar knjigovodstveni program pokušava da što više i što verodostojnije reflektuje poslovnu stvarnost – ne očekuje od korisnika da se prilagodi programu, već je on prilagođen njemu.

Evo i nekoliko mojih pitanja za sve Vas:

  • Koliko ima funkcija knjigovodstveni program za koje niste ni sigurni kako rade?
  • Da li smatrate da preterujem u “pasiranju hrane” i da je “moćna tabela sa filterima” baš ono što vama treba?
  • Ako ste u poslu izrade knjigovodstvenih programa, molim vas kažite da li u svom programu pratite “+1 pristup” i nadmašite konkurenciju u pogledu šta sve vaš program ume ili imate neki drugi pristup?
  • Ko je u pravu bio: Aleksandar ili ja?

Vaš procesno orijentisano piskaralo,
Nikola Malović

Dovoljno dobar knjigovodstveni program

Algoritmija – zemlja programera

Otkriću vam vam ovde premijerno jednu od najbolje čuvanih tajni na svetu:

“Programeri su magična bića koja žive u magičnoj zemlji Algoritmiji.“

Šokirani, zar ne? Niste očekivali? A tek kad čujete kako u Algoritmiji vladaju drugačija pravila igre: ne programira se za platu, Program na kome se radi se ne prodaje za novac, ne koriste ga stvarni ljudi već isključivo zamišljene nasmejane čikice sa izrazom iskrenog oduševljenja dok koriste Program.

U Algoritmiji niko ne “programira” – svi Programeri rade uvek i isključivo na najsavršenijim, najbriljantnijim i najlepšim i genijalnim umetničko naučnim kreacijama. Programeri u Algoritmiji preziru malograđanske okove vremenskih rokova – vremenski rok za izradu nečeg ima samo jednu ulogu – da mu se grohotom nasmeje kada se prekrši. Za svoj rad Programeri u Algoritmiji su plaćeni novcem koga Poslodavac materijalizuje sa najvećom lakoćom iz vazduha u neograničenim količinama pukim pucketanjem prstiju.

Bedna stvorenja zvana Korisnici nemaju (naravno) prvo glasa iz prostog razloga što nisu Programeri te samim tim ni kadri da pojme svojim ograničenim umovima smrtnika uzvišenost kreacije Programera zvane Program. Korisnici i sami znaju svoje mesto koje im pripada u izradi Programa, te tako strpljivo i ćutke sede u svom uglu sobe čekajući kao svaki dobar statista da ga prozovu kada komad izrade Programa dođe do scene gde on vadi novac iz novčanika i sa osmehom na licu ga da Poslodavcu te trkom ondmah nakon toga napusti binu.

Jedini strah koji programeri u Algoritmiji imaju je da ne završe slučajno svoj program. Zato se i na najmanji privid mogućeg napredovanja ka završetku napisani kod neumorno prepravlja u *bolje stanje*, prelazi na najsavremenije tehnologije lansirane tog dana (a u Savršeniji bar tih lansiranja revolucionarno novih stvari ima zaista mnogo), postojeći kod se briše jer se jasno uvidi da postoji rizik da takav neće odgovarati mogućim potrebama Korisnika koje bi on mogao imati za 24 godine.

Srbija (ni)je Algoritmija

Na moju veliku žalost, a siguran sam na žalost velikog broja mojih kolega, nedavno je otkriveno da Algoritmija ne postoji. Srbija je u mnogo čemu Algoritmija, ali ispostavilo se da na žalost to nije za nas programere. Radi se za novac, postoje korisnici koji besramno očekuju funkcionalni proizvod za svoj novac kojim (gle drskosti) mogu obavljati svoju poslovnu delatnost. Poslodavci em ne materijalizuju novac iz vazduha em još  bezobrazno očekuju od nas Programera da za taj novac kojim nas plaćaju završimo programe na vreme i u odgovorenom obimu.

Cela situacija bi bila potpuni i katastrofalni poraz za nas programere van Algoritmije, da se mi programeri nismo dosetili načina borbe protiv toga: zažmurimo jako i trudimo se što više možemo da zamislimo da smo u Algoritmiji. Rezultati ove gerilske borbe su neočekivano dobri: procenat nezavršenih i nedovršenih knjigovodstvenih programa  je sasvim na nivou proseka Algoritmije.

Jedini je problem sa celom gerilskom taktikom što se sa vremena na vreme poneko od Programera gledajući korisnike kako se zlopate sa “algoritmičnim programima” sažali na iste i obično odluče da im pomognu time što će napraviti najbolji program za knjigovodstvo. Pitanje na koji odmah nalete je koji je najbolji program za knjigovodstvo?  Jedan deo njih bazira odluku na zahtevima korisnika pokušavajući da pokrije“uniju svih eventualnosti”. Drugi deo potpuno ignoriše korisnike i radi isključivo po sopstvenom nahođenju. Obe ove grupe uglavnom završe na sličnom mestu: sa rešenjem koje je manje ili više tehnički savršeno, sa rešenjem nafilovanim svim mogućim i nemogućim opcijama rada programa. Program naravno pokazuje u procenat tačno proces indeksiranja tabele FAK01 i PK23 u zadnja 2 reda ekrana. Sa takvim programom, nema šanse da se negativno odgovori na pitanje starog lisca knjigovođe: “A, da li može ovo?”. Može sve naravno – podržano je.

Da li je takav program koji može i radi sve – savršeni program za knjigovodstvo?

Po mom ličnom uverenju nije jer je “previše dobar”. U slučaju knjigovodstvenih programa po meni ne važi da “od viška glava ne boli” već naprotiv. Eto dođosmo napokon i do teme ovog članka, sledeće teze

Savršeni program za knjigovodstvo dakle nije najbolji program za knjigovodstvo,
već je to “neophodno dobar” program za knjigovodstvo.

Kako možeš…

“… da veličaš osrednjost kada ti u samom podnaslovu ovog bloga stoji kao proklamovani cilj Savršeni knjigovodstveni program po meri korisnika?“ – možda  se neki od vas pitaju sad.

Kažu da slika govori više od hiljadu reči, pa ću se ja zato odgovoriti na to pitanjem koristeći grafikon potreba i zadovoljstva iz knjige Dilema izumitelja

Kao što vidite na grafikonu, ulagati u tehnološka dimenziju rešenja ima smisla samo do momenta kada rešenje postane “dovoljno dobro” po oceni prosečnog korisnika. Nakon toga se nivo korisničkog zadovoljstva ne podiže na tehnološkom planu već pouzdanošću, cenom, korisničkom podrškom, pametnim dizajnom i sličnim. Ovo je takođe u skladu sa Pareto “80/20” principom o kome sam pisao mnogo puta na blogu

Gore iznesen stav kad se prevede na jezik razumljiv nama programerima zvuči ovako:

”Prosečnog korisnika ne zanima uopšte šta se dešava *ispod haube*.”

To znači da nema smisla beskonačno prepravljati kod, nema smisla juriti beskonačno savršen dizajn baze, nema smisla juriti beskonačno savršeni model stvarnosti pre kodiranja i sl. Ovo naravno NE ZNAČI da nema smisla ulagati u održiv tehnološki dizajn i implementaciju programa, truditi se postići jasno razgraničenje programskih celina itd. Znači samo da ne treba biti prevelik fanatik u tome. Ima toliko stvari pametnijih u koje možete uložiti vaše programerske radne časove, a vreme je novac.

Kako možeš …

“… da razlikuješ sa sigurnošću ono šta ima smisla raditi od onog što nema smisla?”

Evo jednog metoda: uzmu se skupovi zahteva raznih korisnika i ono što je presek tih zahteva se odradi samo. Funkcionalni zahtevi korisnika koji su van tog preseka se jednostavno odbace ili odlože za nedefinasnu budućnost. Iako ovaj pristup funkcioniše kod nekih proizvoda, u slučaju knjigovodstvenih programa je neprimenljiv jer rezultuje polovičnim rešenjima koja svojim nedostacima onemogućuju efikasno vršenje poslovne delatnosti korisnika.

Ok, pošto očigledno ovaj pristup nije optimalan po meni, postavlja se pitanje koji jeste onda?

Za odgovor na ovo pitanje poslužiću se u ovom postu problemom o kome razmišljam dosta zadnjih nekoliko dana – uticajem ekranske rezolucije na optimalan rad programa za knjigovodstvo.

Ako pogledamo statistiku posetioca ovog bloga možemo videti da najveća grupa korisnika koristi računar sa 1024 x768 rezolucijom. Taj podatak je saglasan sa svim ostalim izvorima do kojih sam ja mogao doći.

Postavlja se pitanje dakle šta učiniti na osnovu te informacije.

Ja lično vidim tri opcije:

  • izrada programa za 1024 x 768 i ignorisanje ekrana sa većom rezolucijom.
  • izrada programa koji je prilagođen svim rezolucijama
  • izrada programa koji je prilagođen *optimalnoj* rezoluciji

Ilustraciju implementacije na bazi prvog pristupa možemo videti na primeru Adacco programa za knjigovodstvo.

Po mom ličnom mišljenju ovo je nedovoljno dobro rešenje jer se sav taj neiskorišćeni prostor na primeru unosa mp računa mogao iskoristiti možda za prikaz kontekstnim korisnih informacija: istorija pređašnjih računa kupca, njegove otvorene stavke, stanje artikla na lageru itd itd.. Činjenica da su veličine svih prozora nepromenljive (te se prozor ne može uvećati i raširiti preko celog ekrana) takođe doprinosi mojoj ličnoj impresiji ovog rešenja kao nedovoljno dobrog.

Ilustraciju implementacije na bazi drugog pristupa možemo videti na primeru Microsoft Outlook Ribbon-a gde možemo videti da se alatna traka prilagođava ekranskoj rezoluciji.

Kada je ekranska rezolucija velika ikone su krupne i naglašene, sa punim tekstom.


Kada je ekranska rezolucija mala ikone izgube tekst i preurede se u skladu sa manjim ekranom.

Na prvi pogled, ovo rešenje izgleda idealno – zar je moguće da postoji bolje? Tehničko govoreći – jeste savršeno, ali nas to dovodi do poente ovog članka. Da bi dobio program prilagođen svim mogućim rezolucijama Microsoft je zaposlio sigurno veći broj programera da rade na tome. Veći broj programera koji rade na projektu je veća cena programa.

Ako to imamo u vidu, pitanje da li postoji bolje rešenje sagledano u kontekstu gore datog grafika se pretvara u

“Da li si korisniče spreman da platiš mesečno *30* evra umesto *20* da bi imao mogućnost X?”

Sagledavanjem rešenja iz ove pragmatične perspektive, dosta rešenja postaju predobra i predstavljena su u desnom gornjem delu grafika.

Optimalno rešenje je uvek ono rešenje koje je u najboljem interesu korisnika. Na primeru ekranske rezolucije koji koristim u ovom blog postu, to bi bilo rešenje optimizovano za 1280 x 1024 rezoluciju i jednostavnim skaliranjem na gore.

Slažem se da većina korisnika koristi 1024 x 768 na sajtu, ali da li je to u njihovom najboljem interesu – striktno gledano kroz novac?

Cena 19’’ ekrana je negde oko 70 evra i recimo da moraju da plate taj iznos.

Na troškovnoj strani, to dodatno ulaganje će im se isplatiti za nekoliko meseci samo kroz to da je program “20”, a ne “30” evra, a monitor ostaje.

Na prihodnoj strani, time što tokom kreiranja maloprodajnog računa vide otvorene stavke možda će uočiti neki neplaćeni račun, možda će videti u tom dodatnom prostoru da iako nemaju na stanju artikla X da stiže u toku dana iz VP skladišta i ostvariti dodatnu prodaju. Ispisano ime žene kupca u dodatnom prostoru koje omogućuje da pita:”A kako je Snežana?” može da pospeši prodaju pospešuje prodaju…. Ima milion stvari i načina kako se taj dodatni prostor može iskoristiti za pružanje dodatnh informacija prodavcu i samim tim povećanjem efektivnosti komercijalnog rada. Na taj način se za kratko vreme ostvaruje uvećanje prihoda koje pokriva investiciju u potpunosti, a monitor ostaje.

Na marketinškoj strani, kupac koji naručuje robu u preduzeću koje ima neke prastare 15” monitore od 35 kg imaće drugačiju sliku o tom preduzeću nego što bi imao kada bi tu bili 19” LCD monitori.

Da ne razvlačim dalje ovaj banalan primer, shvatili ste poentu sigurno

Dovoljno dobar program za knjigovodstvo je savršeni program za knjigovodstvo

Želim na kraju još samo da podvučem suštinu ovog posta gore ilustrovanu raznim primerima…

“Dovoljno dobar” program za knjigovodstvo je program koji je ni previše dobar ni previše loš. To je program kome su mogućnosti koje nudi izbalansirani pragmatični skup suštinskih funkcija koje knjigovodstveni program treba da ima. Balansiranje seta tih funkcija se ponekad vrši i na način koji kratkoročno gledano je protivan interesima samog korisnika, ali je i to odgovornost autora knjigovodstvenog programa kao profesionalca u toj oblasti. Korisnicima ne treba povlađivati bezumno, ali ih ne treba ni ignorisati potpuno.

Težnja ka tehnološkom savršenstvu programera neusmerena ka nekom od tih balansiranih ciljeva nema pragmatičnog smisla i kao takva je kontraproduktivna. Fokus programera zato treba konstantno proveravati da li je usmeren na stvarni problem, stvarnog korisnika i stvarni proizvod. Programiranje koje smetne sa uma svoju proizvodno – profitnu suštinu, vodi prekoračenju budžeta i vremenskih rokova i proizvodima čija funkcionalnost nije u najboljem mogućem interesu korisnika.

Šta vi mislite o ovome? Da li autori programa za knjigovodstvo trebaju da prave programe na bazi unije svih zahteva svih svojih korisnika? Da li se slažete ili ne sa mojim stavom da je ponekad i u interesusamog  korisnika kada proizvođači knjigovodstvenih programa profesionalno preuzmu odgovornost na svoja pleća i donesu odluku protivno željama korisnika?

Ko po vama treba odlučuje kako i šta program za knjigovodstvo treba da radi?

Hvala na pažnji,
Nikola Od Algoritmije