WONTFIX

Joel Spolsky, u "Software Inventory" članku:

In many real-world companies, the desire never to miss any bug report leads to bug bankrupcy, where you wake up one day and discover that there are 3000 open bugs in the database, some of which are so old they may not apply any more, some of which can never be reproduced, and most of which are not even worth fixing because they’re so tiny.

Sa ovim smo se mi bili zakopali u activeCollab 2. Kada god bismo pogledali Tickets stranicu, uvek bi bila tona posla da se radi, od koga su polovinu činili nebitni bagovi i ideje za sitna unapređenja. Najveći problem je kada ovakve stvari unose takav šum da ne vidite stvarno važne stvari ili stvari koje imaju neku vrednost.

Rešenje koje smo počeli koristiti kako bismo izašli na kraj sa tim ludilom: novi, svež projekat za početak, a onda stvari koje predugo stoje u sistemu zatvorimo sa WONFIX labelom. Nije ni svaki bug report pažnje vredan… Oni koji jesu se uvek vrate:

Don’t worry, the severe bugs will come back.

Microsoft - umiruća platforma?

U zadnjih par dana smo radili na uprošćavanju izgleda email obaveštenja koja activeCollab šalje korisnicima. Kroz par kratkih dizajn iteracija smo došli do onoga što nam se sviđa i na meni je bilo da dogovoreni dizajn prekodiram. 

Notification

Meni se ovaj dizajn svideo jer jasno naglašava akciju, nije grafički težak i može brzo da se prolazi kroz niz obeveštanje i vide bitne informacije. Vrlo brzo sam iskodirao verziju koju Gmail i Sparrow korektno prikazuju, ali problemi su krenuli onog momenta kada sam upalio Outlook i pogledao kako se stvari u njemu vide.

Ukratko: "Mikrosofte, koji k???" Znao sam da Outlook ima slabu rendaljku koju deli sa ostalim alatima u Office paketu, ali nisam bio svestan da ću morati da se vraćam u 1998. Čak je i IE6 miljama ispred rendering endžina koji Outlook 2010 ima u sebi. Posle par sati frustracije i eksperimentisanja, došao sam do nečega što koliko toliko liči na originalni dizajn i stao kada je prosta funkcionalnost postignuta. Od mene toliko… Finese će dobiti fini klijenti, a Outlook dobija tek toliko upeglan dizajn da se ne raspada.

Umiruća Platforma

I tu dolazimo do jednog zanimljivog momenta, do koga je doveo proces kompletno poguban po sam Microsoft: Microsoft platforma prestaje biti bitna u očima mnogih developera! Kompanija ima mnogo korisnika, ali već godinama gubi grupu ljudi koju bih opisao kao vrh koplja - opinion-makere, programere i dizajnere koji prave zanimljive aplikacije i proizvode, tech novinare… Ti ljudi više ne koriste Microsoftove proizvode, na konferencije za štampu koje organizuje Microsoft dolaze sa Mac laptopima ili iPadima, testiraju za Windows na kraju, kada razmišljaju o nekoj inovaciji, retko kao polaznu tačku uzimaju Microsoft platformu itd. 

Nesumnjivo je da je Microsoft previše velik da bi propao i može sasvim lepo da živi u svom "malom mehuru" godinama, možda čak i decenijama, bez većih problema. Međutim, to je put umiruće platforme. Vrh koplja je okrenut na drugu stranu i samo je pitanje vremena kada će za sobom povući i dobar deo ostalih korisnika.

activeCollab i telefon

Odnedavno A51 pruža i konsultacije preko telefona, tako da moj help desk potpis izgleda ovako:

--
Regards,

Ilija S.
activeCollab Support

General and Pre-Sale Questions: 1-888-422-6260 (toll-free)
Technical Support: support@activecollab.com

Supper happy zbog toga.

The Business Redemption Clock

The business redemption clock, a concept by Christopher Escher, via Rebuilding RIM by Michael Mace:

Chris said that the process of rehabilitating a company's image was like moving the hands of a clock. Having a great image was at 12:00.  A company's image could stay in that position for a long time as long as it didn't have too much bad news.  But if bad news built up, the hands eventually slipped over to the 3:00 position, which meant you were perceived to be a troubled company.

Chris said companies always want to force the hands to go backwards to 12, because they want to get past the pain.  But his insight was that you can never do that.  First you have to acknowledge the problem (3 pm), articulate your plan (6 pm), and then show that you're making progress at fixing it (9 pm).  I think Chris had some other stages in there, but you get the general idea.  Only after you had taken all of the intermediate steps, and posted improved financials as a result, would people believe that you had actually earned your redemption and returned to stability at 12.

Business redemption clock

Korak prvi: identifikuj problem
Korak drugi: predstavi plan za njegovo rešenje
Korak treći: onda i nešto stvarno u radi po tom pitanju.

Problem:

There is a downside to acknowledging the problem: you make it worse.

Ideas are essentially worthless

Lukas Mathis, kao komentar na post gde Neven Mrgan priča o svojoj "pull to refresh" ideji koju je neko drugi pre njega šipovao:

People often assume that ideas are where value is created. In reality, ideas (even non-simple ones) are plentiful, easy, and often generated by more than one person at the same time. Ideas are essentially worthless. Value is only created when people actually make stuff.

Jednostavno objašnjeno, u tri rečenice. Ideje su bezvredne dok neko nešto ne uradi sa njima.

Nisi završio…

… dok to neko normalan ne proveri:

Ne mogu da verujem

Rezultat cele ove igranke je stvarno upeglan sistem za filtriranje zadataka i izveštavanje koji ostatak softvera koristi na niz drugih mesta. Vredelo je :)

Korisnici i zahtevi za novim mogućnostima

Kada traže novu funkcionalnost, tipično za korisnike je da predlažu rešenje, bez da detaljno iznesu sam problem. Na primer, korisnik će pre tražiti:

Mi bismo želeli da activeCollab podržava Markdown

umesto:

Sistem za unos teksta je dosta kabast u trenutnoj verziji vašeg softvera. Mi bismo želeli da možemo brzo i jednostavno da pišemo, bez da klikćemo na opcije u toolbaru. Takođe, jako su nam bitne liste, tabele i brzo ubacivanje linkova i slika

Možda malo čudan primer, ali je prilično dobar kao prikaz jedne stvari: rešenje koje korisnici traže nije nužno ono što stvarno i žele. U ovom konkretnom slučaju, rešenje možda nije sam Markdown (iako tako verovatno deluje nekom ko ima dosta iskustva sa istim), već pomeriti granice koliko dobro može vizuelni editor da se upegla i integriše.

U suštini, ovo stvarno nije problem ukoliko ne slušate slepo korisnike. Zahteve i predloge ne treba uzimati zdravo za gotovo, već treba naći problem koji bi taj zahtev rešio. U velikom broju slučajeva, sam problem može biti rešen na mnogo elegantniji i jednostavniji način od zatraženog rešenja i stvarno bi bilo šteta to propustiti samo zato što od drveća nismo uspeli da vidimo šumu.

Kako stvari postaju stabilnije…

… commiti postaju sve manji i manji. Sada nije redak slučaj da commit bude svega dve izmene u jednom ili dva fajla. Ranije, kada je sistem pucao po šavovima, retki su bili commiti koji ne zahvataju bar 10, 15 fajlova, ponekad i mnogo više kod većih refaktorisanja.

Slična je stvar i kod verzija. Kada grana pređe u fazu održavanja (ne dodaju se nove mogućnost, samo se krpe postojeće), commiti postanu maleni i retki, dok sam rad na otvaranju grane obično znači masivne izmene i gomile promenjenih fajlova.

Small commit

Zašto je ovo bitno? Verovatno i nije bitno, a ako i jeste onda samo kao "smradić" koji ukazuje na ozbiljniji problem: ako je grana već neko vreme u fazi održavanja i imamo dosta velikih commita, nešto krupnije nije u redu, verovatno "kontrola kvaliteta".

Working Effectively with Legacy Code

Evo jedan članak u duhu knjige koju upravo čitam: Working Effectively with Legacy Code. Misija je izmeniti klasu koja pravi izveštaje na osnovu praćenog vremena i troškova u activeCollab 3 tako da podržava više valuta.

Wewlc

Podrška za više valuta je dodata u međuvremenu i sistem za izveštavanje je nije svestan, tako da trenutno meša babe i žabe (troškove napravljene u Eurima tretira isto kao i troškove napravljene u dinarima i dolarima i samo ih sabira).

Problem je što trenutno ne postoje apsolutno nikakvi testovi za klasu za izveštavnje, pa:

  1. Nisam siguran da li klasa radi kako treba bez ikakvih izmena. Malo sam se igrao i sve deluje OK, ali nisam baš 100% siguran da sam pokrio sve slučajeve.
  2. Ukoliko krenem sada da prepravljam kod, nisam siguran da li će novi kod raditi kako treba bez mnogo ručnog njakanja izveštaja sa znanim podacima. Može to da radi neko drugi umesto mene (QA), ali bi se time krug između izmene i testiranja produžio na sate u najboljem slučaju (dane realno) što je previše sporo i troši vreme dve osobe umesto jedne.

Izveštavanje podržava prikaz individualnih zapisa ili sumiranih podataka, plus četiri načina grupisanja u oba slučaja, tako da baš treba vremena za ručnu pripremu podataka i testiranje. Iz tog razloga, prvi korak je napisati automatizovan test koji će nam potvrditi da kod radi ono za šta je originalno napisan da radi:

Test tracking reports

Pošto koristim activeCollab Timer da pratim vreme, znam koliko mi je vremena bilo potrebno da postavim testove: 1 sat i 15 minuta efektivno. Uzimajući da iz svog dana retko kada uspem da izvučem više od 3 sata efektivno programiranja, to stvarno deluje kao jako mnogo vremena za posao koji tehnički ni na koji način nije unapredio proizvod: ni jedna nova mogućnost nije dodata, ni jedna stranica nije ubrzana, ni jedna labela u sistemu nije prepravljena da bude jasnija…

Međutim, ono što je to uloženo vreme donelo je postavljanje sigurnosne mreže za sve današnje i buduće izmene koje će se desiti toj klasi. Pa krećemo…

Prvo što sam uradio je refaktorisao metod koji barata sumiranim izveštajima. U momentu kada je pisan, delovalo je da će prost switch raditi posao, ali je metod vremenom prerastao 300 redova koda. Kada sam ga rastavio i ponovo sastavio tako da koristi više pravilno imenovanih metoda, poterao sam ranije napisane testove da vidim da nisam nešto u međuvremenu pokvario. 10 sekundi kasnije testovi su mi rekli da klasa radi na identičan način kao i ranije, iako je sada osetno jednostavnija za čitanje i ispravke. Lepo!

Nakon refaktorisanja ide i onaj deo zbog čega je cela priča i počela: dodavanje mogućnosti izveštaja da sumiraju podatke kada je u sistemu definisano više valuta. Pre nego što se bacim na prepravljanje koda same klase, prvo treba da se napiše test koji proverava naša nova očekivanja. Naravno, pošto je ovo urađeno pre nego što smo stvarno i dirali kod, test neće proći:

Test tracking reports 2

Možda zvuči malo glupo pisati test pre koda, ali to je cela poenta iza Test-Drive Development pristupa. Pisanjem testa pre pisanja koda imamo priliku da lepo ispišemo očekivanja i uočimo neke rane problem u dizajnu.

Ovo je zanimljiv momenat. Ranije bih počeo ovde, međutim u ovom konkretnom slučaju iza sebe već ima dva sata efektivnog programiranja, a kao rezultat tu su sistem kojim mogu oceniti da li izmene koje budem napravio rade kako treba, plus je sam rad sa klasom jednostavniji jer sam neke komplikovane delove refaktorisao.

Idemo lagano - sada treba da izmeniti klasu da zadovoljili nova očekivanja. Uz izmenu klase i test se možda promeni na nekim mestima koja bih još dodatno da pokrijem, a koja sam prevideo kada sam ga pisao. Kada je sve gotovo, dobijemo lep rezultat:

Test tracking reports 3

activeCollab Timer kaže: 45 minuta za novu funkcionalnost, plus 2 sata ranije za pisanje testova i refaktorisanje.

Ovakav pristup programiranju je investicija u kvalitet softvera koji će biti poslat klijentima (najskuplji je bug koji korisnik nađe), kao i u budući razvoj. Modifikovanje bilo koje klase je osetno jednostavnije ukoliko već postoji test za nju, tako da će razvoj postajati lakši ako se sistematski prolazi kroz postojeći kod i pišu testovi za njega, iako sama aplikacija u međevremenu raste i postaje komplikovanija.

I za kraj, proces, ukratko:

  1. Postavimo testove koji proveravaju da li postojeći kod radi na očekivani način;
  2. U svakom kodu uvek ima nešto da se refaktoriše, tako da uzmemo lepo pa prepravimo par stvari, kako bi kod bio čitkiji, a buduće izmene lakše;
  3. Prepravimo testove tako da proveravaju naša nova očekivanja i poteramo ga iako znamo da neće proći. Korisno je videti tačke u kodu na kojima nova očekivanja nisu ispunjena;
  4. Prepravimo klasu tako da zadovoljava nova očekivanja;
  5. Otvorimo jedno 'ladno jer smo sebi i kolegama upravo uštedeli sate posla u budućnosti, a korisnicima napravili kvalitetnije rešenje koje će manje pucati i za koje ćemo lakše i brže objavljivati unapređenja i ispravke.

Google i Microsoft danas

Marco Arment, u "Learning from competition":

Microsoft is so much more interesting today: while Google seems to think they don’t need to change anything [… about Android] and Apple’s customers are brainwashed by marketing, Ballmer has shut up about Apple publicly and Microsoft is making radical changes.

Evo ga jedno razmišljanje inspirisano citatom gore (iako nije direktno povezano sa temom samog teksta, a to je učenje od konkurencije).

Što se Inerneta i uticaja na isti tiče, pamtim:

  • Neprikosnoveni Microsoft s kraja devedesetih i iz perioda oko 2000 kada je Internet Explorer bio najbolju browser i držao 90%+ saobraćaja,
  • Nemarni i trapavi Microsoft tu negde oko 2003, 2004 sa bajatom verzijom Internet Explorera koju niko od njihovih inženjera godinama nije pogledao,
  • Zanemarljivi Microsoft tu negde od 2007, 2008. Održavamo kompatibilnost, ali je Internet Explorer toliko zaostao da je ta kompatibilnost na "radi" nivou, bez finesa i preciznog peglanja.

Iz mog ličnog ugla, još uvek su u trećoj fazi ili u laganom prelazu u četvrtu fazu (šta god ona bila). Uprkos tome, stoji da ljudi u Microsoftu ćute i rade i da je svaka nova verzija Internet Explorera bolja od prethodne.

S druge strane, Google je jako brzo prešao iz "slatki mali geeky Google" faze u "Jebote, moram smisliti način da se skinem sa njihovih servisa što pre!" fazu. Iako je Google jedan od glavnih pokretača razvoja browsera (samo pratite tempo kojim se razvija Chrome), ima nešto ljigavo u samom motivu i to ih čini… Zastrašujućim?

Apple živi od prodaje hardvera i sadržaja, Microsoft od prodaje softvera, ali Google ima drugačiju fintu: njima su korisnici proizvod koji nude svojim mušterijama (firmama koje plasiraju reklame). Uvek je sranje znati da si proizvod kojim neko trguje i zato mi je, na čudan način, Microsoft danas 10 puta draži nego Google.

Chronicle (2012)

Sinoć sam pogledao Chronicle. Film mi se svideo, što i ne čudi pošto obožavam Čovek++ teme. Ubacite eksoskelete, nanotehnologije, supermoći ili šta god i nema brige, to kod mene uvek prolazi:

Ellen ripley

 

Gledam da izbegavam IMDB komentare pre nego što pogledam film (osim u slučajevima kada baš na IMDB tražim šta bih gledao), ali ih često pogledam kasnije. Za ovaj film su dosta podeljeni: ili je ocena visoka (7+) ili je jedna zvezda. I tako ja pročitam par negativnih komentara i iznerviram se.

Zabrinjavajuća ograničenost i nedostatak mašte, plus tipičan trolerski pristup. Holivud je kreirao armiju zombija koji očekuju da im sve bude servirano na kašičicu i da su likovi robotizovani stereotipi (sa perfektno belim zubima i/ili savršenim sisama). Onog momenta kada stvari malo skrenu sa trase zacrtane holivudskim bluprintom, eto frke i negativnih komentar.

Chronicle ima svoje probleme, ali je daleko od jedne zvezdice. To što mnoge stvari nisu rečene, što se kroz film gleda kako likovi uče, što često zabrljaju i što se ne ponašaju kao prepametni kriminalni bosovi je ono što ga čini različitim od većine super bljuvotina. Ovo je mnogo kvalitetnija zabava od Tora, Kapetana Amerike i sličnih visokobudžetnih gluposti, a produkcija iste je koštala bar red veličina manje.

Doing it the hard way

Penelope Trunk, u članku prepunom fotografija prasića kaže:

Someone who tells you about how great they are and how they have already figured everything out—those are people with a low sense of wellbeing because they are too invested in looking like their life is in order. They can’t do anything difficult because they don’t want to fail in front of you.

But failing in front of you is a sign that the person is living the kind of life you’d like to live – one where every day you wake up and struggle to do something difficult. That you have not done before.

Ovo je dosta blizu stava koji već neko vreme imam formulisan kao: "Uvek biraj učenje", a koji se odnosi na svesno biranje one opcije koja će mi omogućiti da najviše naučim iz niza ponuđenih opcija. Ta opcija je obično dosta teža od ostalih, ali ono što poneseš iz celog iskustva je mnogo vrednije na duže staze nego odabir brzog i lakog rešenja.

Takav pristup može biti i lična, ali i poslovna filozofija. Kada kao firma odlučuješ šta ćeš i kako, jedno od zgodnih pitanja je: "Šta ćemo naučiti iz ovoga?" Platiti stručnjaka da reši problem je često najbolje rešenje (kao npr konfiguraisanje telefonske centrale koje sada radimo) pošto u poslu treba imati fokus, ali takođe postoje stvari koje bi bilo zgodno da se odrade na teži način, kako bi znanje koje proizađe iz toga ostalo u firmi (razvoj i održavanje našeg web frameworka npr).

Brz razvoj 101

Pogledajte log verzija 1password aplikacije za Mac: bar jedan release mesečno, uglavnom dva do tri, a nije Software as a Service! Svaka čast ekipi iz AgileBits, to se tako radi.

Osnovni princip se može sumirati u kratku "Bring value and bring it often" filozofiju koja je osnova svih agilnih metodologija razvoja. Najlepša stvar je što je takav razvoj ne samo dobar finansijski (gledano na duže staze), već i znatno zabavniji. Kada se pređe na brzu rotaciju verzija, razvoj postaje mnogo zanimljiviji pošto se stvari mnogo brže kreću i bivaju objavljene, a kupci zadovoljniji zato što ne moraju da čekaju mesecima na nove mogućnosti i ispravke.

Uvek sam "znao" (navodnici zato što ne treba mešati insinkt i znanje) da je baš takav pristup razvoju rešenje, ali nisam imao dve stvari:

  • Precizno definisano zašto je to dobro, sa finansijske strane. Rešenje nudi tradicionalna proizvodnja, koja na inventar i Work in Progress gleda kao na zarobljeni kapital i teži da ga smanji. Ista stvar je i sa softverom, gde su stvari na kojima se radi u stvari inventar. Što je kraće vremena nova mogućnost u razvoju (vremenski razmak između donošenja odluke da se nešto napravi do momenta kada je to dostupno korisnicima), to bolje.
  • Mogućnost da se nove verzije PHP aplikacije često objavljuju, a da to ne predstavlja problem korisnicima. Rešenje je auto-upgrade, a WordPress je celu ideju progurao u mase (sada svi očekuju to). Problem je što je to dosta spetljano kada je PHP u pitanju zbog ograničenja platforme, ali mislim da smo našli ključ i za to:

Activecollab manager

activeCollab Manager već od sledeće nedelje ulazi u (javno dostupnu) betu, zajedno sa activeCollab 3.0.2. Posle toga ide lagano peglanje kroz brzu rotaciju novih buildova, kako samog Managera tako i activeCollaba.

One speed, one gear: Go! :)

Rusi...

… i dalje zahtevaju potpisan i pečatiran račun, "ako može i da nam ga smotate u kovertu i pošaljete". Onda bude muka živa kada im treba objasniti da pečatiran i potpisan račun od firme u Americi nije baš nešto što možemo da se izvede. Potpis još može i da prođe, ali kad im tražite pečat, kao da ste im tražili prst Device Marije.

Ah, da, zbilja - ovi naši traže da se softver izvozi na diskovima? Izvinjavam se Rusi, ipak ste progresivni(ji)!

Novine su loš izvor informacija

Marco Arment, Content Everywhere, But Not A Drop To Drink:

Most reporters are under a lot of pressures that work against the quality and accuracy of their stories. I’ve found that reporters have usually already written the story, at least mentally, before they ask me for a quote, and they’ll bend, twist, and edit what I say to support their narrative. I’m simply a puppet to tell their story, whatever it is.

Prijatelj je ovo iz prve ruke iskusio nedavno: ti si glumac, novinar režiser, a sve u svrhu pričanja priče. Priča koju si tu da ispričaš nije tvoja (iako će u novinama izgledati kao da jeste), već novinarova, i nemaš skoro nikakvu kontrolu nad njom. Ne želim da kažem da je to po svaku cenu loše ili da nije u obostranom interesu, samo da kod nas nije ništa drugačije nego što Marko opisuje.

Evo ga i najbolji deo Markovog komentara, trunka mudrosti za poneti:

I try to remember that whenever I read anything in the press about a subject for which I don’t have first-hand knowledge.

Kada čitam bilo šta u novinama, a posebno dnevnoj štampi, držim veliku distancu. Ako je kvalitet tekstova o nečemu što dobro poznajem (tehničke teme) toliko loš, zašto bih očekivao da materijal koji se bavi nekim drugim, meni manje poznatim temama tipa zdravlju ili ekonomiji, bude bolji? Nema osnova za to, tako da i najdobronamerniji savet iz štampe uzimam sa velikom dozom rezerve (ako ga uopšte ozbiljno i shvatam).

Postoje bolji načini da se čovek informiše i uči. Štampu je vreme i potreba naroda za dnevnim senzacionalističkim fiksom odavno zgazilo.