devblog The CubeTutor Controversy
Ezt a blogbejegyzést egy néhány napja megjelent podcastra válaszul írom, amely a Cube Tutorról és a fejlesztés jelenlegi állapotával kapcsolatos problémákról szólt.
http://solelysingleton.libsyn.com/season-3-episode-1-the-cube-tutor-controvesy
Szeretnék köszönetet mondani Bradnek és Ericnek az epizód elkészítéséért. Érett, higgadt, tiszta és udvarias hangnemben közelítettek meg egy olyan témát, amihez minden joguk megvan, hogy őrjöngve kiabáljanak és ordítozzanak. Ahogy valószínűleg el tudjátok képzelni, nagyon nehéz volt számomra hallgatni, hogy a Cube Tutor helyzetét a két legrégebbi támogatója, akik mindezek ellenére továbbra is támogatják az oldalt anyagilag a Patreonon keresztül. Világos, tényszerű módon adták elő az információkat, és nincs kifogásom az elhangzottakkal kapcsolatban. Mindenben igazuk van – nem tartottam be az alku rám eső részét, és szánalmasan alkalmatlan voltam bármiféle kommunikáció nyújtásában, és ezért őszintén sajnálom mindannyiótoktól.
Hogyan kerültem ide?
Ha nem érdekel a Cube Tutor története, akkor nyugodtan ugorj a részhez: Mi ment rosszul?
Még 2013-ban egy nagy és sikeres szoftverház fejlesztője voltam. A munka jó volt, és visszatekintve nincs rá panaszom, de nem izgatott, nem adott okot arra, hogy felkeljek az ágyból és belevessem magam a napba. Több mint 10 éven keresztül Magic-játékos voltam, és ez idő tájt kezdtem belejönni a kockákba, és szerettem volna sajátot építeni. A szabadidőmben elkezdtem fejleszteni a Cube Tutort, kezdetben tényleg csak a saját igényeimre. Ahogy nőtt és egyre több funkcióval bővült, feltettem az internetre, és néhány barátom is elkezdett vele bütykölni. Onnan tettem fel egy posztot az MTGSalvationre, amelyben meghívtam másokat is, hogy próbálják ki, és sokan meg is tették.
2013 ősze körül rájöttem, hogy van valamim a Cube Tutorral. Az emberek nagyon foglalkoztak vele, és nagyon boldoggá tett, hogy egy olyan oldalon dolgozhattam, amit szerettem a szabadidőmben. Egy potenciális üzleti partner keresett meg azzal a lehetőséggel, hogy a Cube Tutorból valami olyat csinálhatnék, ami anyagilag is támogathatna, és az ötlet álomszerűen hangzott. Kissé belefáradtam a munkámba, és az ötlet, hogy teljes munkaidőben olyasvalamin dolgozhassak, amit szeretek, rendkívül vonzó volt. Beadtam a felmondásomat, és belevetettem magam a munkába.
2014 első hat hónapja nagyszerű volt! Minden nap motiváltan ébredtem, hogy keményen dolgozzak egy olyan weboldalon, amit szerettem, hogy valami még nagyobbat építsek belőle. Bár abban az időben nem kaptam fizetést semmiért, némi megtakarítással el tudtam tartani magam, és azzal az ígérettel, hogy ezt a dolgot életképes vállalkozássá építem, boldogan dolgoztam.
Nem igazán emlékszem, mikor történt, de fokozatosan nyilvánvalóvá vált, hogy az üzleti partner, akivel együtt akartam dolgozni, egyértelműen nem ugyanazt az elképzelést vallotta, mint én, és egyszerűen nem volt érdekelt az ötletünk megvalósításában. Visszatekintve valószínűleg kissé naiv voltam, és valamilyen oknál fogva egyszerűen nem jött össze a dolog. A megtakarításaim kezdtek kissé megcsappanni, és a növekvő működési költségek mellett világossá vált, hogy a Cube Tutor teljesen ingyenes szolgáltatásként való folytatása már nem fog működni. Vagy visszamegyek dolgozni, és a felhasználóimtól kérek egy kis segítséget a szerverköltségek fedezésére, vagy pedig még jobban belevetem magam a munkába, dolgozom a szenvedélyes projektemen, és megpróbálok valamit kihozni belőle. Nem volt más választásom, sikerre akartam vinni ezt az egészet.
Belevágtam a Cube Tutor Champion programba. Ez egy lehetőség volt számotokra, hogy anyagilag támogassátok a Cube Tutort, néhány extra funkciót ígérve a fiókotokhoz, de ami még fontosabb, hogy levegyétek rólam a pénzügyi nyomást, és lehetővé tegyétek, hogy ténylegesen az oldal fejlesztésén dolgozzak. Mindent egybevetve, egy évig dolgoztam rajta, mielőtt napvilágot látott volna, de amikor végre elindult, nagyszerű érzés volt. Nemcsak az emberek foglalkoztak vele, hanem gyorsan elértem a második szintű elkötelezettségemet a Patreonon, ami lehetővé tette, hogy részmunkaidőben dolgozzak az oldalon, mint a munkámon.
Mire a program elindult, anyagilag elég rosszul álltam. Miután 18 hónapot fizetés nélkül töltöttem, párosulva a több ezer dollárral, amit a szerver költségeire költöttem, nagy szükségem volt némi bevételre. Valójában csak egy nagyon szerető és megértő feleségem támogatásával sikerült eljutnom abba a szakaszba, hogy egyáltalán elindíthattam a Bajnok Programot, és ezért nagyon szerencsés vagyok. Köszönöm.
Mindenesetre még a közösség elsöprő támogatása ellenére sem volt elég ahhoz, hogy folytassam, és el kellett vállalnom egy másik munkát. Felajánlottak egy olyan lehetőséget, amely nagyon jól illeszkedett a heti 1-2 napos Cube Tutorral kapcsolatos elkötelezettségem mellé, és ezt a munkát a mai napig folytatom, részmunkaidőben. Nagyon hálás vagyok ezért a lehetőségért, mivel nem sok hagyományos munkahely lenne ennyire előzékeny és megértő azzal az idővel kapcsolatban, amit a Cube Tutorral való munkámra kellett fordítanom.
A Champion Program elindításával egy időben rengeteg kérés érkezett a felhasználóktól, akik tudták, hogy mit szeretnének az oldaltól, és az első néhány hónapban, egészen 2015 októberéig a dolgok remekül mentek. Rendszeresen adtam ki kiadványokat, megoldottam a funkciókéréseket, és általában betartottam a Patreon-ígéretemet. A visszajelzések, amiket ez idő tájt kaptam, a következők voltak: “ezek a funkciók nagyszerűek, de mikor fogsz nekilátni a nagyobbaknak, például, hogy az oldal mobilon is működjön?”. Kezdetben nem gondoltam volna, hogy eljutok abba a szakaszba, amikor az emberek úgy fogják használni a CT-t, ahogyan most használják, és nem igazán a mobileszközök figyelembevételével készült. Ez hatalmas vállalkozás volt. Visszamentem a Patreon támogatóimhoz, és azt mondtam: “Oké, ezt meg tudom csinálni, de már nem fogom tudni tartani a havi 1-2 Feature Release-t, ez önmagában 6 hónap kemény munka”. Ti nagyon támogatóak voltatok, és azt mondtátok: “Hé, nagyszerű! Hajrá!”. Elkezdtem egy mobil felhasználói felületet építeni a Cube Tutor tetejére.
Sok szempontból úgy gondolom, hogy ez volt a fordulópont, mivel a megszokott területemről, ahol kis kiadásokat és hibajavításokat adtam ki, valami sokkal nagyobbra váltottam. Még azokban a napokban is, amikor a Champion Programot fejlesztettem, még mindig rendszeresen adtam ki kiadványokat. Ez volt a kommunikációm hanyatlásának kezdete, amire egyszerűen nincs mentség. Ennek ellenére keményen dolgoztam ez alatt a hat hónap alatt, és a másik végén egy mobil felhasználói felülettel jöttem ki a szerkesztéshez, amit 2016 nyarán bétatesztelésre ajánlottam fel. A visszajelzések általában nagyon pozitívak voltak, és visszatértem a fejlesztésbe azzal a céllal, hogy befejezzem a munkát és kiadjam.
Mi ment rosszul?
Akkor becsapódott egy bomba. A következő néhány bekezdésben egy kicsit technikailag fogok beszélni, de úgy gondolom, fontos, hogy a lehető legvilágosabban elmondjam, mi történt. Egyik napról a másikra tudtam meg, hogy az Apache Tapestry, a keretrendszer, amelyre a Cube Tutor épült, életének végére ért, és a keretrendszer alapítója nem támogatja tovább. Ennek nem kellett volna meglepőnek lennie számomra, a Tapestry egy régebbi időkből származó keretrendszer volt. Nem igazán a mobilok számára készült, és elkerülte a jelenlegi iparági trendet, miszerint a szkriptnyelvek a kliensen és a szerveren is futnak. Ez egy lassan mozgó reliktum volt, amely nem igazán tartozott 2016-ba. Eleve csak azért választottam a Tapestry-t, mert gyorsan fejleszthető és ismerős volt, és nem gondoltam, hogy ez a projekt valaha is napvilágot látna. Ha van egy döntés, amit meg tudnék változtatni az egészben, az ez az egy lenne, persze utólag 20/20.
Addig a pontig a Tapestrynek volt egy nagyon aktív fejlesztői közössége, akik nem csak a keretrendszert fejlesztették, hanem pluginokat is készítettek a bővítéséhez. Ezeket a pluginokat sok mindenre használtam, beleértve a feltöltési widgeteket, a jQuery integrációt és a szerver-push funkcionalitást, amelyet nagymértékben kihasználnak a vázlatkészítésben és a rácsos vázlatkészítésben. Ez a keretrendszer és annak pluginjai képezték a Cube Tutor alapját, és anélkül, hogy aktívan karbantartották volna őket, nem tudtam, hogy folytassam-e a mobilos átírást, valami olyasmiért, amit valószínűleg rövid időn belül újra át kell írni. Azon kaptam magam, hogy megpróbálok modernizálni valamit egy olyan alapról, ami eleve nem volt igazán modern, és most már nem is lenne karbantartva és aktuális. A webfejlesztő ipar az elmúlt tíz évben gyorsan fejlődött, és ha nem állt rendelkezésemre valami, ami a Cube Tutort a következő tíz évben is biztonságban tartotta volna, hogyan tudtam volna folytatni a Tapestry-t? Néhány hónapig pörögtem. Részben folytattam a mobilos munkát, részben más keretrendszerek prototípusait készítettem, de leginkább csak elveszett voltam, és nem tudtam, mit tegyek ezzel a problémával szemben.
Mindezek közepette egy újabb probléma merült fel. A Cube Tutor nem csak egy haldokló keretrendszerre épült, hanem annak egy kissé elavult verzióját is használta. A Tapestry 5.3.X-es verzióján futott (és fut még mindig), mivel függött néhány korábban említett plugintól, amelyek nem kompatibilisek a legújabb 5.4.X-es kiadással. Sajnos a Tapestry 5.3.X verziója a Java egy régebbi verzióját, a Java 7-et, egy másik relikviát használja, és a build szerverem úgy döntött, hogy nem támogatja tovább a Java 7-et. Ez azt jelenti, hogy valójában nem tudtam elkészíteni a kiadásra szánt kódbázist. Önmagában ez a probléma nem megoldhatatlan. Változtathatnék build szervert, építhetném az oldalt helyben, vagy esetleg magam is módosíthatnám a Tapestry pluginokat, hogy összhangba hozzam őket a Tapestry 5.4-es kiadásával és a Java 8-cal. Minden mással együtt azonban úgy éreztem, hogy ez az utolsó szög a Cube Tutor koporsójába a Tapestryn.
Nem tudom eltúlozni, hogy mennyi munka lenne visszamenni a kezdetekhez és újraírni a Cube Tutort egy új keretrendszerre. Két évig dolgoztam teljes munkaidőben, hogy eljussak oda, ahol most van. Az egyéb szakmai kötelezettségeim és a családalapítás kilátásba helyezése miatt egyszerűen nem tudtam volna elgondolkodni azon, hogy újra elvégezzem ezt a sok munkát, ez nem volt lehetséges.
A legnagyobb szégyenem ebben az egészben az átláthatóság hiánya az ügyben. Bárcsak lett volna bátorságom azt mondani, hogy “nézzétek srácok, itt tartok”, de nem voltam ehhez szokva. Hozzászoktam ahhoz, hogy problémákat oldjak meg, és szépen elkészült munkákat és fejlesztéseket mutassak be a közösség imádatára. Brad és Eric felolvastak egy PM beszélgetést, amit tavaly folytattam Braddel, ahol a szégyenérzetről beszéltem, és ez az egyetlen indok, amire hivatkozhatok. Nem tudom, mit tegyek ezzel a problémával, és már régóta küzdök azzal, hogy kiutat lássak belőle.
Hol tartunk most?
Egyszerűen fogalmazva jelenleg nem tudom frissíteni az oldalt, kivéve azokat a dolgokat, amiket az adatbázison keresztül tudok megváltoztatni, mint az új kártyák, a kiemelt kockák és az átlagos kockák. Az életemben már nincs annyi szabadidőm, mint amennyit 2014-ben megengedhettem magamnak, és egyszerűen nem engedhetem meg magamnak, hogy visszamenjek a kizárólag Patreonból származó jövedelemhez, hogy teljes munkaidőben támogassam magam a Cube Tutoron, hogy átírjam az oldalt, és még ha tudnám is, most más hosszú távú szakmai kötelezettségeim vannak, amelyeket be kell tartanom, és amelyek igényt tartanak az időmre. Mindez azt jelenti, hogy a Cube Tutor fenntartásához fedeznem kell a működési költségeket, amelyek jelenleg átlagosan 700-750 dollár körül mozognak havonta. E három dolog kombinációja miatt csak taposom a vizet, pörgök, és nem tudom, mit tegyek.
Ami magát a pénzt illeti, ahhoz már több mint egy éve nem nyúltam. Van egy külön számlám a Cube Tutor összes Patreon bevételének, és a plusz pénz azon felül, amit költségként és adóként kellett fizetnem, nagyrészt csak ott ül. Amikor a Patreon elindult, és még aktívan dolgoztam rajta, rendszeresen felvettem a pénzt, de már egy ideje nem érzem úgy, hogy megdolgoztam volna érte, és így felhalmozódott egy kis pénzalap, amely legalább a szerver költségeit fedezhetné egy kis ideig, ha a Patreon támogatása drámaian csökkenne e poszt után, ahogy arra számítok.
Hát akkor hol marad mindez a Cube Tutor? Nos a válasz még mindig az, hogy nem tudom. Brad és Eric folyamatosan visszatérnek erre a pontra, hogy már régóta emlegettem “egy közelgő blogbejegyzést” anélkül, hogy valaha is teljesítettem volna, és azt hiszem, addig halogattam, amíg legalább valamiféle fényt tudok nyújtani az alagút végén, de most egyszerűen nem tudom, mi ez az elhatározás. Most csak annyit akarok tenni, hogy őszintén és nyíltan beszélek a helyzetről, amit már régen meg kellett volna tennem. Ez nem fair egyikőtökkel szemben sem, és különösen azokkal szemben, akik a Patreon vállalásaim alapján döntenek a Cube Tutor támogatásáról.
A legfontosabb dolog az, hogy az információ végre nyilvánosságra került, és alapvető és némileg katartikus lépés számomra, hogy ezt megírtam. Úgy kezelem ezt a bejegyzést, mint az első lépést vissza a helyes irányba a probléma megoldásának kidolgozása felé, ahelyett, hogy tudnám, mi is ez a megoldás valójában. Még egyszer köszönöm Bradnek és Ericnek a katalizátor szerepét. Sajnálom, hogy a dolgok annyira elfajultak, hogy úgy éreztétek, hogy ezt a podcastot kell produkálnotok, és sajnálom mindenki mástól, hogy cserben hagytalak benneteket, és nem volt bátorságom, hogy ezt már régen leírtam a saját hátamról.
Mindenekelőtt szeretem ezt az oldalt és ezt a közösséget, és nagyon büszke vagyok rá, de kezem a szívemen, nem tudom, hogyan tudnám megtalálni a módját, hogy folytassam az előttem álló akadályokkal szemben. Mi az ideális megoldásom? Hogy megtaláljam a kiutat, ahol a Cube Tutor továbbra is a legfantasztikusabb kocka platform marad a weben, amire büszke lehetek, és amit ti is újra szeretni fogtok.
A Redditet nem nagyon használom, de mint mindig, most is elérhető vagyok e-mailben: [email protected].
Ben