devblog The CubeTutor Controversy
Jag skriver det här blogginlägget som svar på en podcast som släpptes för några dagar sedan om Cube Tutor och några av de problem som omger dess nuvarande utvecklingsläge.
http://solelysingleton.libsyn.com/season-3-episode-1-the-cube-tutor-controvesy
Jag vill tacka Brad och Eric för att de producerade detta avsnitt. De närmade sig ett ämne som de har all rätt i världen att skrika och skrika sig galna om med en mogen, sansad, klar och artig ton. Som ni säkert kan föreställa er var det en mycket svår sak för mig att lyssna på, att höra hur Cube Tutor ser ut av två av dess längsta anhängare, som trots allt fortfarande fortsätter att stödja webbplatsen ekonomiskt genom Patreon. De presenterade informationen på ett tydligt och sakligt sätt och jag har inga invändningar mot någon av de punkter som togs upp. De har rätt i allt – jag har inte hållit min del av avtalet och jag har varit bedrövligt otillräcklig när det gäller att erbjuda någon form av kommunikation, och för det är jag verkligen ledsen till er alla.
Så hur hamnade jag här?
Om du inte är intresserad av Cube Tutors historia är du välkommen att hoppa över avsnittet: Vad gick fel?
Under 2013 var jag utvecklare på ett stort och framgångsrikt programvaruhus. Jobbet var bra och när jag ser tillbaka har jag inget att klaga på det, men det var inte spännande, det gav mig ingen anledning att gå upp ur sängen och kasta mig in i dagen. Jag hade spelat Magic till och från i över tio år och vid den tiden började jag verkligen gilla kuben och var angelägen om att bygga min egen. På min fritid började jag utveckla Cube Tutor, egentligen bara för mina egna behov till en början. När det växte och blev mer funktionsrikt lade jag ut det på nätet och ett par vänner började pyssla med det. Därifrån lade jag ut ett inlägg på MTGSalvation där jag bjöd in andra att prova det och många gjorde det.
Under hösten 2013 insåg jag att jag hade något med Cube Tutor. Folk engagerade sig verkligen i den och det gjorde mig väldigt glad att kunna arbeta på en webbplats som jag älskade på min fritid. Jag blev kontaktad av en potentiell affärspartner om möjligheten att bygga upp Cube Tutor till något som skulle kunna försörja mig ekonomiskt och idén lät som en dröm. Jag hade blivit lite trött på mitt jobb och tanken på att arbeta med något som jag älskade på heltid var enormt lockande. Jag lämnade in min uppsägning och kastade mig in i det.
De första sex månaderna eller så av 2014 var fantastiska! Jag vaknade varje dag och var motiverad att arbeta hårt på en webbplats som jag älskade, för att bygga upp den till något ännu större. Även om jag inte fick betalt för att göra något vid den tidpunkten kunde jag försörja mig själv genom några besparingar och med löftet om att bygga den här saken till ett livskraftigt företag arbetade jag glatt.
Jag minns inte riktigt när det hände, men det blev gradvis uppenbart att affärspartnern som jag hade hoppats på att arbeta med uppenbarligen inte hade samma vision som jag och helt enkelt inte var intresserad av att fullfölja vår idé. När jag ser tillbaka var jag förmodligen lite naiv och av någon anledning gick det helt enkelt inte ihop. Mina besparingar började bli lite små och med tanke på de ökande driftskostnaderna stod det klart att det inte längre skulle fungera att fortsätta att erbjuda Cube Tutor som en helt gratis tjänst. Jag kunde antingen gå tillbaka till jobbet och be mina användare om lite hjälp med serverkostnaderna och hålla den igång eller så kunde jag kasta mig in i detta ännu mer, arbeta på mitt passionsprojekt och försöka göra något av det. Det fanns inget val för mig, jag ville lyckas med detta.
Jag påbörjade Cube Tutor Champion-programmet. Detta var ett sätt för er att stödja Cube Tutor ekonomiskt med löfte om några extra funktioner för ert konto, men framför allt för att ta bort den ekonomiska pressen och ge mig möjlighet att faktiskt arbeta med att förbättra webbplatsen. Allt som allt arbetade jag med detta i nästan ett år innan det skulle se dagens ljus, men när det äntligen lanserades kändes det fantastiskt. Det var inte bara så att folk engagerade sig i det, utan jag uppnådde snabbt mitt andra nivå åtagande på Patreon vilket gjorde det möjligt för mig att arbeta deltid med sajten, som mitt jobb.
När programmet lanserades var jag på en ganska dålig plats ekonomiskt sett. Efter att ha tagit 18 månader utan lön, tillsammans med de tusentals dollar som jag hade spenderat på serverkostnader, behövde jag verkligen få en inkomst. Det är egentligen bara med stöd av en mycket kärleksfull och förstående fru som jag lyckades komma till det stadium där jag ens kunde lansera Championprogrammet och för det är jag väldigt lyckligt lottad. Tack.
Men även med det överväldigande stödet från gemenskapen räckte det inte till för att hålla mig igång och jag var tvungen att ta ett annat jobb. Jag erbjöds en möjlighet som skulle passa mycket bra vid sidan av mitt engagemang på Cube Tutor 1-2 dagar i veckan och det är ett jobb som jag fortsätter med än i dag, på deltid. Jag är också mycket tacksam för den möjligheten eftersom inte många traditionella jobb skulle vara så tillmötesgående och ha så stor förståelse för den tid som jag behövde tillbringa för att arbeta med Cube Tutor.
I samband med lanseringen av mästarprogrammet kom en uppsjö av förfrågningar om funktioner från användare som visste vad de ville ha ut av webbplatsen, och under de första månaderna fram till oktober 2015 gick allting jättebra. Jag släppte regelbundna utgåvor, löste funktionsförfrågningar och höll i allmänhet mitt Patreon-löfte. Den feedback jag fick vid den här tiden var i stil med ”de här funktionerna är jättebra, men när ska du ta itu med en av de större funktionerna, som att få webbplatsen att fungera i mobilen?”. I början hade jag aldrig kunnat föreställa mig att jag skulle vara i det skede då folk skulle använda CT på det sätt som de gör och den hade inte riktigt byggts med mobila enheter i åtanke. Detta var ett stort åtagande. Jag gick tillbaka till mina Patreon-anhängare och sa: ”Okej, jag kan göra det här, men jag kommer inte längre att kunna hålla jämna steg med 1-2 funktionsreleaser i månaden, det här är sex månaders hårt arbete i sig självt”. Ni var mycket stöttande och sa: ”Hej, toppen! Gör det!”. Jag började bygga ett mobilt användargränssnitt ovanpå Cube Tutor.
På många sätt tror jag att detta var en vändpunkt eftersom jag hade gått från mitt välbekanta område med att slänga ut små releaser och buggfixar till något mycket större. Till och med under de dagar då jag utvecklade Champion-programmet gav jag fortfarande ut regelbundna versioner. Detta var början på nedgången i min kommunikation, något som det helt enkelt inte finns någon ursäkt för. Icke desto mindre arbetade jag hårt under dessa sex månader och kom ut i andra änden med ett mobilt användargränssnitt för utarbetande, något som jag erbjöd för betatestning sommaren 2016. Feedbacken var generellt sett mycket positiv och jag gick tillbaka till utvecklingen i syfte att slutföra arbetet och få det släppt.
Vad gick fel?
Då slog en bomb ner. Jag kommer att prata lite tekniskt under de kommande styckena, men jag tror att det är viktigt att vara så tydlig som möjligt om vad som hände. Jag fick veta över en natt att Apache Tapestry, det ramverk som Cube Tutor byggdes på, hade nått slutet av sitt liv och att grundaren av ramverket inte längre skulle stödja det. Detta borde inte ha kommit som en överraskning för mig, Tapestry var ett ramverk från en äldre tid. Det hade inte riktigt byggts med mobilen i åtanke och undvek den nuvarande industritrenden att köra skriptspråk på klienten och servern. Det var en långsam relik som inte riktigt hörde hemma 2016. Jag hade bara valt Tapestry i första hand för att det var snabbt att utveckla på och välbekant och jag trodde ändå inte att det här projektet någonsin skulle få se dagens ljus. Om det finns ett beslut som jag skulle kunna ändra i allt detta så skulle det vara det beslutet, men efterklokhet är förstås 20/20.
Fram till dess hade Tapestry en mycket aktiv gemenskap av utvecklare som inte bara förbättrade ramverket utan även producerade plugins för att utöka det. Jag använde mig flitigt av dessa plugins för många saker, bland annat uppladdningswidgetar, jQuery-integration och server-push-funktionalitet som utnyttjas flitigt vid ritning och gridritning. Detta ramverk och dess plugins var grunden för Cube Tutor och utan att de underhålls aktivt visste jag helt enkelt inte om jag skulle fortsätta med omskrivningen av mobilen, för något som förmodligen skulle behöva skrivas om igen inom kort. Jag fann mig själv försöka modernisera något från en grund som aldrig var riktigt modern från början och som nu inte ens skulle underhållas och vara aktuell. Webbutvecklingsbranschen har rört sig snabbt under de senaste tio åren och hur skulle jag kunna fortsätta med Tapestry om jag inte hade stöd av något som skulle se Cube Tutor säkert in i de kommande tio åren? I några månader snurrade jag runt. Delvis fortsatte jag med det mobila arbetet, delvis tog jag fram prototyper för andra ramverk, men mestadels var jag bara vilsen och osäker på vad jag skulle göra inför detta problem.
Mitten i allt detta slog ett annat problem till. Cube Tutor byggde inte bara på ett döende ramverk utan använde också en något föråldrad version av det ramverket. Den körde (och kör fortfarande) på 5.3.X-versionen av Tapestry på grund av att den är beroende av några av de tidigare nämnda plugins som inte är kompatibla med den senaste 5.4.X-versionen. Tyvärr använder 5.3.X-versionen av Tapestry en äldre version av Java, Java 7, en annan relik och min byggserver har beslutat att sluta stödja Java 7. Detta innebär att jag faktiskt inte kunde bygga kodbasen för release. I sig är detta problem inte oöverstigligt. Jag skulle kunna byta byggservrar, bygga webbplatsen lokalt eller eventuellt undersöka om jag kan ändra Tapestry-plugins själv för att anpassa dem till version 5.4 av Tapestry och Java 8. Men tillsammans med allt annat kändes det som den sista spiken i kistan för Cube Tutor på Tapestry.
Jag kan inte överdriva hur mycket arbete det skulle vara att gå tillbaka till början och skriva om Cube Tutor igen på ett nytt ramverk. Det tog det mesta av två år att arbeta heltid för att få det till där det är nu. Med mina andra yrkesmässiga åtaganden och utsikten att snart bilda familj kunde jag helt enkelt inte tänka mig att göra allt det arbetet igen, det var inte möjligt.
Min största skam i allt detta är bristen på öppenhet i frågan. Jag önskar att jag hade haft modet att bara säga ”titta killar, så här ligger jag till” men jag var inte van vid det. Jag var van vid att lösa problem och presentera snygga färdiga arbeten och förbättringar till samhällets beundran. Brad och Eric läste upp en PM-konversation som jag hade haft med Brad förra året där jag talar om förlägenhet och det är den enda motivering jag har. Jag vet inte vad jag ska göra åt det här problemet och har kämpat länge för att se en väg ut ur det.
Var är vi nu?
Simpelt uttryckt kan jag för närvarande inte uppdatera webbplatsen, förutom de saker som jag kan ändra via databasen som nya kort, presenterade kuber och genomsnittliga kuber. Mitt liv är inte längre fullt av den fritid som jag hade lyxen av 2014 och jag har helt enkelt inte råd att gå tillbaka till en position med enbart Patreon-inkomster för att försörja mig själv på Cube Tutor på heltid för att skriva om sajten och även om jag skulle kunna det så har jag nu andra långsiktiga yrkesmässiga åtaganden att hålla som har ett krav på min tid. Allt detta sagt, för att hålla Cube Tutor igång måste jag täcka de löpande kostnaderna som för närvarande ligger på i genomsnitt runt 700-750 dollar i månaden. En kombination av dessa tre saker har gjort att jag bara trampar på vattnet, snurrar och inte vet vad jag ska göra.
När det gäller själva pengarna har jag inte rört dem på över ett år. Jag har ett separat konto för alla Cube Tutor’s Patreon-intäkter och de extra pengarna utöver vad jag har varit tvungen att betala i kostnader och skatt ligger för det mesta bara där. När Patreon startade och jag fortfarande arbetade aktivt med det tog jag ut pengarna regelbundet, men jag känner inte att jag har förtjänat dem på ett tag nu och därför finns det en liten pott med pengar som har ackumulerats och som åtminstone skulle kunna täcka serverkostnaderna ett tag om Patreon-stödet minskar dramatiskt efter det här inlägget, vilket jag förväntar mig att det kommer att göra.
Så, var lämnar allt det här Cube Tutor? Svaret är fortfarande att jag inte vet. Brad och Eric återkom hela tiden till att jag hade nämnt ”ett kommande blogginlägg” under en lång tid utan att någonsin leverera det och jag antar att jag sköt upp det tills jag kunde erbjuda åtminstone något slags ljus i slutet av tunneln, men just nu vet jag helt enkelt inte vad den resolutionen är. Allt jag vill göra just nu är att vara ärlig och öppen om situationen, något som jag borde ha gjort för länge sedan. Det är inte rättvist mot någon av er och särskilt inte mot dem som fattar beslut om att stödja Cube Tutor baserat på mina Patreon-åtaganden.
Det viktigaste är att informationen äntligen finns där ute och det är ett grundläggande och något katartiskt steg för mig att ta för att skriva detta. Jag behandlar det här inlägget som det första steget tillbaka i rätt riktning mot att arbeta fram en lösning på problemet, i stället för att veta vad den lösningen faktiskt är. Tack återigen till Brad och Eric för att ni var katalysatorn. Jag är ledsen att det gick så illa att ni kände att ni var tvungna att producera den här podcasten och jag är ledsen till alla andra för att jag har svikit er och inte haft modet att skriva bort det här från min egen rygg för länge sedan.
Mer än något annat älskar jag den här sajten och den här gemenskapen och jag är mycket stolt över den, men med handen på hjärtat vet jag inte hur jag ska kunna hitta ett sätt att fortsätta med den inför de hinder som jag har framför mig. Vad är min idealiska lösning? Att hitta en väg ut ur detta där Cube Tutor förblir den häftigaste kubplattformen som finns på webben, något som jag kan vara stolt över och som ni kommer att älska igen.
Jag använder egentligen inte Reddit särskilt mycket, men som alltid kan jag kontaktas via e-post: [email protected].
Ben