Fiecare lucru din aplicație care ți se pare evident a fost, la un moment dat, o
alegere între două drumuri. Pagina asta le adună pe cele care se văd din afară
și spune, la fiecare, ce am dat la schimb.
Sunt scrise ca înregistrări, cu data lor, și nu se rescriu mai târziu ca să
arate mai bine. Dacă o decizie s-a dovedit proastă, se adaugă una nouă care o
înlocuiește și o arată cu degetul pe cea veche. Una dintre cele de mai jos face
exact asta: am desenat un grafic într-un fel, l-am văzut citit greșit de un om
adevărat, și l-am întors.
Mai există câteva decizii pe care nu le găsești aici, fiindcă urmarea lor nu se
vede din afară: privesc unelte, versiuni și feluri de a scrie cod. Sunt scrise
în aceleași înregistrări, doar că nu au ce să îți spună ție.
Baza de date refuză singură rândurile altcuiva
Decided: 2026-08-15
Puteam să ascundem datele altor crescători în aplicație, adică să cerem baza de date tot și să arătăm doar ce e al tău. Aproape toate aplicațiile fac așa, fiindcă e mai simplu de scris.
Am ales altfel: baza de date însăși refuză să dea rândurile altui crescător, oricine ar cere. Dacă aplicația ar avea o scăpare, baza tot nu ar da nimic. Regula nu e pornită pe alese, ci pe fiecare tabel, iar o schimbare care ar adăuga un tabel neprotejat nu apucă să ajungă la tine.
Ce ne costă: fiecare tabel nou cere reguli scrise și puse la încercare, iar verificarea are nevoie de o bază de date adevărată pornită la fiecare schimbare. E mai lent pentru noi. E singurul fel în care promisiunea poate fi altceva decât o vorbă.
Importul de la federație ia drumul lung, dinadins
Decided: 2026-08-26
Rezultatele de pe site-ul federației sunt publice și sunt ale tale. Tehnic, cel mai comod ar fi să le aducem singuri, noaptea, pentru toată lumea deodată, și să le ținem la noi ca să le putem căuta oricine.
Nu facem nimic din toate astea. O cerere pleacă doar când apeși tu, se prezintă cinstit cu numele nostru și o adresă de contact, și din pagina citită rămân la noi doar rândurile tale. Numele sau localitatea altui crescător nu se scriu nicăieri, iar clasamentul nu e refăcut la noi.
Ce te costă pe tine: importul e mai lent decât ar putea fi și nu se întâmplă de la sine. Ce ne costă pe noi: renunțăm la funcțiile care s-ar vinde cel mai ușor, adică un motor de căutare prin rezultatele tuturor. Purtarea asta e singurul lucru care ne ține în picioare dacă cineva ne închide ușa într-o zi.
Am întors un grafic pe dos, după ce l-am văzut citit greșit
Decided: Sprint J3
La coeficient, un număr mai mic e mai bun. Prima versiune a graficului a respectat aritmetica: numerele mici jos, cele mari sus. Perfect corect și complet ilizibil. Un porumbel care intra în formă desena o linie care cobora.
Pe ecran, cu un cititor adevărat în fața lui, graficul spunea altceva decât datele. L-am întors: acum valoarea cea mai bună e sus, iar o pasăre care intră în formă urcă. Numerele n-au fost schimbate cu nimic, doar pozițiile lor.
Ce te costă pe tine: dacă ai folosit aplicația înainte, aceleași rezultate arată acum invers față de cum le știai. Sub fiecare grafic scrie de ce. Un grafic care trebuie explicat înainte să poată fi citit e un grafic desenat pe dos, oricât de corectă ar fi socoteala din spate.
Ceasul aplicației e ceasul din România, oriunde ai fi
Decided: Sprint P6.1
Ora de constatare a unei păsări e ora de la crescătorie. Dacă telefonul ar hotărî singur cum se citește, un crescător plecat din țară ar deschide aceeași cursă și ar vedea alte ore decât cele pe care le-a scris pe foaie.
Așa că nu îl lăsăm să hotărască. Orele și datele din aplicație se citesc după ceasul din România, inclusiv trecerea la ora de vară, calculată după regulă și nu ghicită de pe telefon. Aceeași cursă arată la fel pe orice telefon, în orice țară.
Ce te costă pe tine: dacă ești plecat, orele nu se potrivesc cu ceasul de pe perete de acolo. E alegerea pe care am făcut-o dinadins — o oră de constatare care se schimbă când treci o graniță nu mai e ora aceea.
Nu îți vindem încă un aparat
Decided: 2026-09-06
A existat ideea unei antene ThatPigeon la gura halei, care să citească inelele porumbeilor la antrenamente. Am renunțat la ea.
Motivul e simplu: cine face curse are deja un aparat de constatare, plătit și în care are încredere. Nu are nevoie de încă unul, de la noi, pe lângă al lui. Ce îi lipsește nu e aparatul, ci ce se întâmplă cu fișierele care ies din el, iar aia e muncă de programe, nu de electronice.
Ce te costă pe tine: dacă nu ai un aparat de constatare, de la noi nu vine unul. Ce ne costă pe noi: renunțăm la partea din piață care se vinde cel mai scump și în care încrederea e cea mai mare. Rămânem cu memoria și cu înțelesul cursei, nu cu martorul ei.
O lună de probă, apoi un abonament
Decided: 2026-09-12
Planul era o variantă gratuită pentru totdeauna. Nu mai e. Primele treizeci de zile sunt gratuite, cu tot ce are aplicația, iar după ele urmează un abonament.
Ce nu se schimbă e partea care conta. Dacă nu mai plătești, nu pierzi nimic: contul rămâne de citit, cu toți porumbeii, toate cursele și tot jurnalul la locul lor, iar exportul în CSV rămâne gratuit, pentru totdeauna. Nu se încuie nimic și nu ți se ține nimic ostatic. Numărul de porumbei nu e limitat nici în luna de probă, nici după ea.
Ce te costă pe tine: după o lună, aplicația nu mai e gratuită. Ce ne costă pe noi: rămânem fără argumentul că suntem gratuiți, care era cel mai ușor de spus. Ne rămâne unul mai greu, că merităm banii.
Deocamdată nu e nimic de cumpărat, fiindcă plata nu e încă scrisă în aplicație. Când va fi, scriem aici ce s-a schimbat.
Un avizier pentru porumbeii de vânzare, nu un târg
Decided: 2026-09-15
Poți scoate un porumbel la vânzare din aplicație. Anunțul apare pe o pagină pe care o vede oricine, fără cont, lângă pedigree-ul porumbelului.
Asta e tot ce facem: afișăm anunțul. Nu ținem licitații, nu primim bani, nu luăm comision și nu stăm între tine și cumpărător. El te contactează direct, pe calea pe care ai ales-o pentru anunțul acela, și tot ce vă înțelegeți rămâne între voi.
Ca să scoți un porumbel la vânzare, el și pagina crescătoriei trebuie să fie publice. Când îl marchezi vândut, anunțul se închide singur, iar retragerea lui merge oricând.
Ce te costă pe tine: nimeni nu garantează vânzarea, nici vânzătorului, nici cumpărătorului. De aceea fiecare anunț spune să nu plătești în avans unui necunoscut. Ce ne costă pe noi: rapoartele despre anunțuri le citește un om, de mână, iar un anunț care ar trebui scos rămâne afișat până atunci.
Când plata va exista în aplicație, punerea și reînnoirea unui anunț vor cere perioada de probă sau un abonament. Retragerea nu va cere nimic.
Coeficientul de consangvinitate spune pe ce se sprijină
Decided: 2026-09-16
Coeficientul de consangvinitate se calculează din strămoșii pe care i-ai trecut. Dacă lipsesc, cifra iese mai mică decât adevărul: un strămoș netrecut nu poate scădea consangvinitatea, doar o poate ridica.
De aceea aplicația nu îți mai arată doar un număr. Când arborele e complet pe generațiile pe care le socotim, vezi cifra. Când e subțire, vezi aceeași cifră cu semnul `≥` în față și câte generații întregi stau sub ea, ca să știi că e un minim, nu un rezultat. Când nu e trecut niciun strămoș, scrie că nu se poate calcula, în loc să scrie zero.
Zero era răspunsul cel mai periculos pe care îl dădeam. Un porumbel fără niciun strămoș trecut arăta `0.0%` pe fond verde, adică exact ce arată un porumbel despre care chiar știm că nu e consangvinizat. Un arbore gol arăta la fel de liniștitor ca unul curat.
Culoarea nu mai e singurul semn. Pe o foaie tipărită alb-negru culoarea se pierde, așa că banda e scrisă și în cuvinte. Iar când cifra e doar un minim, verdele se retrage: verdele este singura bandă pe care un arbore mai complet ți-o poate lua.
Ce te costă pe tine: un arbore subțire arată acum mai puțin liniștitor decât arăta, și asta e intenționat. Ce ne costă pe noi: fiecare ecran care arată un coeficient trebuie să spună din câte generații l-a citit, iar unul care cere prea puține date se plânge în loc să răspundă.
Foaia de pedigree se întoarce după cât de adânc e arborele
Decided: 2026-09-16
Pedigree-ul pe care îl scoți din aplicație iese pe A4 în două feluri, iar aplicația alege singură. Până în cinci generații, foaia e culcată, pe lat. La șase generații, foaia stă în picioare, pe înalt.
Alegerea se face după câte generații are de desenat foaia aceea, nu după cât de adânc e arborele porumbelului în aplicație. Un porumbel cu opt generații trecute scoate aceeași foaie pe înalt ca unul cu exact șase, iar sub arbore scrie că linia continuă și că strămoșii mai vechi rămân în aplicație.
Un arbore scurt nu duce lipsă de înălțime, ci de lățime: are puține căsuțe, dar în fiecare încape mult. Pe lat, căsuțele primesc spațiul pe care înainte îl împărțeau cu generații care nici nu existau, așa că numele, inelul, culoarea și ce a făcut pasărea încap fără să fie tăiate. Un arbore adânc are problema pe dos, are nevoie de rânduri, și de aceea rămâne pe înalt.
Numărul inelului nu se taie și nu se rupe pe două rânduri niciodată, în nicio generație și pe niciuna dintre cele două foi. Inelul e identitatea păsării; dacă ceva trebuie să cedeze, cedează numele.
Ce te costă pe tine: două pedigree-uri ale aceluiași porumbel, scoase înainte și după ce ai mai trecut un strămoș, pot ieși unul pe lat și altul pe înalt. Într-un dosar cu foi de hârtie asta se vede.
Mai departe
Aceleași alegeri, privite dinspre cod, cu numele componentelor și al regulilor
care le țin, sunt în arhitectura aplicației.