devblog The CubeTutor Controversy
Píšu tento blogový příspěvek jako reakci na podcast, který byl před několika dny vydán o Cube Tutoru a některých problémech spojených s jeho současným stavem vývoje.
http://solelysingleton.libsyn.com/season-3-episode-1-the-cube-tutor-controvesy
Rád bych poděkoval Bradovi a Ericovi za vytvoření tohoto dílu. K tématu, kvůli kterému mají plné právo křičet a vztekat se, přistoupili vyzrálým, vyrovnaným, jasným a zdvořilým tónem. Jak si asi dokážete představit, bylo pro mě opravdu těžké poslouchat, jak stav Cube Tutor na rovinu vyložili dva z jeho nejdéle fungujících příznivců, kteří navzdory všemu stále pokračují ve finanční podpoře webu prostřednictvím Patreonu. Informace podali jasně a věcně a já nemám žádný problém s žádným z bodů, které zazněly. Mají ve všem pravdu – nedodržel jsem svou část dohody a byl jsem žalostně nedostatečný, pokud jde o nabídku jakékoliv komunikace, a za to se vám všem upřímně omlouvám.
Tak jak jsem se sem dostal?
Pokud vás nezajímá historie Cube Tutoru, pak klidně přeskočte na tuto část:
V roce 2013 jsem byl vývojářem v jedné velké a úspěšné softwarové firmě. Práce byla dobrá a při pohledu zpět si na ni nemohu stěžovat, ale nevzrušovala mě, nedávala mi důvod vstát z postele a vrhnout se do práce. Magic jsem hrál s přestávkami přes deset let a zhruba v té době jsem se začal věnovat kostkám a chtěl jsem si postavit vlastní. Ve volném čase jsem začal vyvíjet Cube Tutor, zpočátku opravdu jen pro vlastní potřebu. Když se rozrostl a začal mít více funkcí, dal jsem ho na internet a pár přátel se v něm začalo vrtat. Odtud jsem dal příspěvek na MTGSalvation, kde jsem vyzval ostatní, aby si ho vyzkoušeli, a mnoho lidí to udělalo.
Přibližně na podzim 2013 jsem si uvědomil, že na Cube Tutoru něco mám. Lidé se do něj opravdu zapojovali a mně dělalo velkou radost, že mohu ve volném čase pracovat na webu, který mám rád. Oslovil mě potenciální obchodní partner s možností vybudovat z Cube Tutor něco, co by mě finančně uživilo, a ten nápad zněl jako sen. Práce mě už poněkud unavovala a představa, že budu na plný úvazek pracovat na něčem, co mě baví, byla nesmírně lákavá. Podal jsem výpověď a vrhl se do toho naplno.
Prvních zhruba šest měsíců roku 2014 bylo skvělých! Každý den jsem se probouzel s motivací tvrdě pracovat na webu, který jsem miloval, a vybudovat z něj něco ještě většího. I když jsem v té době za nic nedostával peníze, dokázal jsem se uživit díky úsporám a s příslibem, že z toho vybuduji životaschopný byznys, jsem spokojeně pracoval dál.
Už si přesně nepamatuji, kdy se to stalo, ale postupně se ukázalo, že obchodní partner, se kterým jsem doufal, že budu spolupracovat, zjevně nemá stejnou vizi jako já a jednoduše nemá zájem náš nápad realizovat. Když se ohlédnu zpět, byl jsem asi trochu naivní a z nějakého důvodu to prostě nešlo dohromady. Moje úspory se začínaly trochu tenčit a tváří v tvář rostoucím provozním nákladům bylo jasné, že nabízet Cube Tutor jako zcela bezplatnou službu už nebude fungovat. Buď jsem se mohl vrátit do práce a požádat své uživatele o malou pomoc s náklady na server a udržet ho v chodu, nebo jsem se do toho mohl vrhnout ještě víc, pracovat na svém vášnivém projektu a pokusit se z něj něco vytěžit. Neměl jsem na výběr, chtěl jsem z toho udělat úspěch.
Pustil jsem se do programu Cube Tutor Champion. Byl to pro vás způsob, jak finančně podpořit Cube Tutor pod příslibem některých funkcí navíc pro váš účet, ale hlavně mě zbavit finančního tlaku a umožnit mi skutečně pracovat na vylepšování webu. Celkově jsem na tom pracoval nejlepší část roku, než to spatřilo světlo světa, ale když se to konečně spustilo, byl to skvělý pocit. Nejenže se do něj lidé zapojili, ale rychle jsem dosáhl závazku druhé úrovně na Patreonu, což mi umožnilo pracovat na webu na částečný úvazek jako na své práci.
V době, kdy byl program spuštěn, jsem na tom byl finančně dost špatně. Po 18 měsících bez výplaty, spolu s tisíci dolary, které jsem utratil za náklady na server, jsem opravdu potřeboval získat nějaký příjem. Opravdu jen díky podpoře velmi milující a chápavé manželky se mi podařilo dostat se do fáze, kdy jsem vůbec mohl spustit program Champion, a za to jsem velmi šťastný. Děkuji Ti.
I přes obrovskou podporu komunity to však prostě nestačilo k tomu, abych se udržel v chodu, a musel jsem přijmout další práci. Byla mi nabídnuta příležitost, která by se velmi dobře hodila vedle mého angažmá 1-2 dny v týdnu na Cube Tutor, a je to práce, ve které pokračuji dodnes, na částečný úvazek. Za tuto příležitost jsem také velmi vděčný, protože málokteré tradiční zaměstnání by mi vyšlo tak vstříc a mělo pochopení pro čas, který jsem potřeboval věnovat práci na Cube Tutor.
Společně se spuštěním programu Champion přišel příval požadavků na funkce od uživatelů, kteří věděli, co od webu chtějí, a prvních několik měsíců až do října 2015 šlo vše skvěle. Vydával jsem pravidelná vydání, řešil požadavky na funkce a obecně plnil slib Patreonu. Zpětná vazba, kterou jsem v této době dostával, byla ve stylu „tyhle funkce jsou skvělé, ale kdy se pustíš do některé z těch větších, jako je zprovoznění webu na mobilních zařízeních?“. Na začátku jsem si nikdy nedokázal představit, že budu ve fázi, kdy lidé budou CT používat tak, jak ho používají, a to ještě nebylo postaveno s ohledem na mobilní zařízení. To byl obrovský závazek. Vrátil jsem se ke svým příznivcům na Patreonu a řekl: „Dobře, zvládnu to, ale už nebudu schopen držet krok s 1-2 Feature Release měsíčně, tohle je 6 měsíců tvrdé práce samo o sobě“. Vy jste mě velmi podpořili a řekli jste: „Hej, skvělé! Jděte do toho!“. Pustil jsem se do budování mobilního uživatelského rozhraní nad Cube Tutor.
V mnoha ohledech si myslím, že to byl zlomový okamžik, protože jsem se ze známého území chrlení malých vydání a oprav chyb dostal k něčemu mnohem většímu. Dokonce i v době, kdy jsem vyvíjel program Champion, jsem stále vydával pravidelné verze. To byl začátek úpadku mé komunikace, pro který prostě není omluva. Přesto jsem během těchto šesti měsíců tvrdě pracoval a na druhém konci jsem vyšel s mobilním uživatelským rozhraním pro draftování, které jsem v létě 2016 nabídl k betatestování. Zpětná vazba byla vesměs velmi pozitivní a já se vrátil k vývoji s cílem práci dokončit a vydat ji.
Co se pokazilo?
Pak přišla bomba. V následujících několika odstavcích budu mluvit trochu technicky, ale myslím, že je důležité, abych co nejjasněji popsal, co se stalo. Ze dne na den jsem se dozvěděl, že Apache Tapestry, framework, na kterém byl Cube Tutor postaven, skončil svůj život a zakladatel tohoto frameworku jej již nebude podporovat. Nemělo mě to překvapit, Tapestry byl framework ze starší doby. Nebyl ve skutečnosti vytvořen s ohledem na mobilní zařízení a vyhýbal se současnému trendu v oboru, kdy se na klientovi a serveru spouštějí skriptovací jazyky. Byl to pomalu se pohybující relikt, který do roku 2016 příliš nepatřil. Tapestry jsem si vybral v první řadě jen proto, že se na něm dalo rychle vyvíjet, byl známý a stejně jsem si myslel, že tento projekt nikdy nespatří světlo světa. Pokud bych na tom všem mohl nějaké rozhodnutí změnit, bylo by to právě toto, samozřejmě zpětný pohled je 20/20.
Do této chvíle měl Tapestry velmi aktivní komunitu vývojářů, kteří nejenže framework vylepšovali, ale také vytvářeli zásuvné moduly pro jeho rozšíření. Tyto zásuvné moduly jsem hojně využíval pro mnoho věcí, včetně widgetů pro nahrávání, integrace s jQuery a funkcí server-push, které se hojně využívají při návrhu a tvorbě mřížky. Tento framework a jeho zásuvné moduly byly základem Cube Tutor a bez jejich aktivní údržby jsem prostě nevěděl, jestli mám pokračovat v přepisování mobilního prostředí kvůli něčemu, co by bylo pravděpodobně nutné v krátké době přepsat znovu. Zjistil jsem, že se snažím modernizovat něco ze základu, který vlastně nikdy moderní nebyl a nyní by ani nebyl udržovaný a aktuální. Odvětví vývoje webových stránek se za posledních deset let rychle posunulo a jak bych mohl pokračovat s Tapestry bez podpory něčeho, co by Cube Tutor bezpečně dovedlo do dalších deseti let? Několik měsíců jsem se otáčel. Částečně jsem pokračoval v práci na mobilních zařízeních, částečně jsem vytvářel prototypy jiných frameworků, ale většinou jsem byl prostě ztracený a nevěděl jsem, co si tváří v tvář tomuto problému počít.
Uprostřed toho všeho udeřil další problém. Nejenže byl Cube Tutor postaven na umírajícím frameworku, ale také používal poněkud zastaralou verzi tohoto frameworku. Běžel (a stále běží) na verzi 5.3.X Tapestry kvůli své závislosti na některých dříve zmíněných zásuvných modulech, které nejsou kompatibilní s nejnovější verzí 5.4.X. V tomto případě se však jednalo o verzi 5.3.X, která není kompatibilní s nejnovější verzí Tapestry. Bohužel verze Tapestry 5.3.X používá starší verzi Javy, Javu 7, další relikt a můj sestavovací server se rozhodl přestat Javu 7 podporovat. To znamená, že jsem vlastně nemohl sestavit základ kódu pro vydání. Sám o sobě tento problém není nepřekonatelný. Mohl bych změnit sestavovací servery, sestavit web lokálně nebo se případně sám podívat na úpravu zásuvných modulů Tapestry, abych je uvedl do souladu s vydáním 5.4 Tapestry a Javy 8. To by mi pomohlo. V kombinaci se vším ostatním mi to však připadalo jako poslední hřebíček do rakve Cube Tutor na Tapestry.
Nemůžu přehánět, kolik práce by dalo vrátit se na začátek a napsat Cube Tutor znovu na novém frameworku. Trvalo mi nejlepší část dvou let práce na plný úvazek, než jsem ho dostal tam, kde je teď. Vzhledem k mým dalším pracovním závazkům a vyhlídce na brzké založení rodiny jsem prostě nemohl uvažovat o tom, že bych celou tu práci dělal znovu, nebylo to možné.
Moje největší škoda na tom všem je nedostatek transparentnosti v této věci. Přál bych si, abych měl odvahu prostě říct „podívejte se, lidi, tady jsem, jak na tom jsem“, ale nebyl jsem na to zvyklý. Byl jsem zvyklý řešit problémy a prezentovat pěkně dokončenou práci a vylepšení k obdivu komunity. Brad a Eric mi přečetli rozhovor v PM, který jsem s Bradem vedl minulý rok, kde mluvím o rozpacích, a to je jediné ospravedlnění, které mám. Nevím, co s tímto problémem dělat, a už dlouho se snažím najít cestu, jak z toho ven.
Kde jsme teď?“
Zjednodušeně řečeno, v současné době nemohu stránky aktualizovat, kromě věcí, které mohu měnit prostřednictvím databáze, jako jsou nové karty, doporučené kostky a průměrné kostky. Můj život už není plný volného času, který jsem si mohl dopřát v roce 2014, a já si prostě nemohu dovolit vrátit se do pozice příjmu pouze z Patreonu, abych se mohl živit na Cube Tutor na plný úvazek a přepisovat stránky, a i kdybych mohl, mám teď jiné dlouhodobé pracovní závazky, které si žádají můj čas. Z toho všeho vyplývá, že abych mohl Cube Tutor udržet v chodu, musím pokrýt provozní náklady, které se v současné době pohybují v průměru kolem 700-750 dolarů měsíčně. Kombinace těchto tří věcí mě nechává jen přešlapovat na místě, točit se a nevědět, co dělat.
Co se týče samotných peněz, na ty jsem nesáhl už více než rok. Mám samostatný účet pro všechny výdělky z Cube Tutor Patreonu a peníze navíc k tomu, co jsem musel zaplatit na nákladech a daních, tam z velké části jen tak leží. V době, kdy Patreon začínal a já na něm ještě aktivně pracoval, jsem peníze pravidelně vybíral, ale už nějakou dobu nemám pocit, že bych si je vydělal, a tak se tam nahromadil malý balík peněz, který by mohl přinejmenším na nějakou dobu pokrýt náklady na server, pokud by se podpora Patreonu po tomto příspěvku dramaticky snížila, což očekávám, že se může stát.
Takže kde to všechno nechává Cube Tutor? No, odpověď stále zní, že nevím. Brad a Eric se neustále vraceli k tomu, že už dlouho zmiňuji „chystaný příspěvek na blogu“, aniž bych ho kdy dodal, a asi jsem to odkládal, dokud nebudu moci nabídnout alespoň nějaké světlo na konci tunelu, ale teď prostě nevím, jaké je to předsevzetí. Jediné, co chci teď udělat, je být k situaci upřímný a otevřený, což jsem měl udělat už dávno. Není to fér vůči nikomu z vás a zejména vůči těm, kteří se rozhodují o podpoře Cube Tutoru na základě mých závazků na Patreonu.
Důležité je, že informace jsou konečně venku a že je pro mě zásadní a trochu katarzní krok tohle napsat. Beru tento příspěvek jako první krok zpět správným směrem k vypracování řešení problému, místo abych věděl, jaké to řešení vlastně je. Ještě jednou děkuji Bradovi a Ericovi za to, že se stali katalyzátorem. Je mi líto, že se věci dostaly tak daleko, že jste měli pocit, že musíte vytvořit tento podcast, a omlouvám se všem ostatním, že jsem vás zklamal a nenašel odvahu odepsat to ze svých vlastních zad už dávno.
Nejvíc ze všeho miluji tento web a tuto komunitu a jsem na ni velmi hrdý, ale ruku na srdce, nevím, jak najdu způsob, jak v tom pokračovat tváří v tvář překážkám, které mám před sebou. Jaké je mé ideální řešení? Najít z toho cestu ven, kde Cube Tutor zůstane tou nejúžasnější kostkovou platformou, která je na webu k dispozici, něčím, na co mohu být hrdý a co si vy opět zamilujete.
Reddit moc nepoužívám, ale jako vždy jsem k zastižení na e-mailu: [email protected].
Ben