devblog The CubeTutor Controversy
Jeg skriver dette blogindlæg som svar på en podcast, der blev udsendt for et par dage siden om Cube Tutor og nogle af de problemer, der omgiver den nuværende udviklingstilstand.
http://solelysingleton.libsyn.com/season-3-episode-1-the-cube-tutor-controvesy
Jeg vil gerne takke Brad og Eric for at producere denne episode. De nærmede sig et emne, som de har al ret i verden til at skrige og råbe vredt op om, med en moden, besindig, klar og høflig tone. Som du sikkert kan forestille dig, var det en virkelig svær ting for mig at lytte til, at høre Cube Tutor’s tilstand blive beskrevet klart og tydeligt af to af dets længstlevende støtter, som trods alt stadig fortsætter med at støtte siden økonomisk via Patreon. De præsenterede oplysningerne på en klar og saglig måde, og jeg har ingen problemer med nogen af de punkter, der blev fremført. De har ret i alt – jeg har ikke overholdt min del af aftalen, og jeg har været sørgeligt utilstrækkelig til at tilbyde nogen form for kommunikation, og det beklager jeg virkelig over for jer alle.
Så hvordan kom jeg hertil?
Hvis du ikke er interesseret i Cube Tutor’s historie, er du velkommen til at springe over til afsnittet: Hvad gik galt?
Tilbage i 2013 var jeg udvikler hos et stort og succesfuldt softwarehus. Jobbet var godt, og set i bakspejlet har jeg ingen klager over det, men det begejstrede mig ikke, det gav mig ikke en grund til at komme ud af sengen og kaste mig ud i dagen. Jeg havde været Magic-spiller on and off i over 10 år, og omkring det tidspunkt var jeg virkelig ved at komme ind på cube og var ivrig efter at bygge min egen. I min fritid begyndte jeg at udvikle Cube Tutor, i første omgang egentlig bare for mit eget behov. Efterhånden som det voksede og blev mere funktionsrigt, lagde jeg det ud online, og et par venner begyndte at pille ved det. Derfra lagde jeg et indlæg på MTGSalvation og opfordrede andre til at prøve det, og det var der mange, der gjorde.
Omkring efteråret 2013 gik det op for mig, at jeg havde noget med Cube Tutor. Folk var virkelig engagerede i det, og det gjorde mig meget glad at kunne arbejde på et websted, som jeg elskede i min fritid. Jeg blev kontaktet af en potentiel forretningspartner om muligheden for at opbygge Cube Tutor til noget, der kunne støtte mig økonomisk, og idéen lød som en drøm. Jeg var blevet lidt træt af mit job, og tanken om at arbejde på noget, som jeg elskede på fuld tid, var enormt tiltrækkende. Jeg afleverede min opsigelse og kastede mig ud i det.
De første seks måneder eller deromkring i 2014 var fantastiske! Jeg vågnede op hver dag og var motiveret til at arbejde hårdt på et websted, som jeg elskede, for at bygge det op til noget endnu større. Mens jeg ikke blev betalt for at gøre noget på det tidspunkt, var jeg i stand til at forsørge mig selv gennem nogle opsparinger, og med løftet om at bygge denne ting til en levedygtig forretning arbejdede jeg lykkeligt væk.
Jeg kan ikke rigtig huske, hvornår det skete, men det blev gradvist klart, at den forretningspartner, jeg havde håbet at arbejde sammen med, tydeligvis ikke havde den samme vision som mig og simpelthen ikke var interesseret i at forfølge vores idé. Set i bakspejlet var jeg nok lidt naiv, og af en eller anden grund blev det bare ikke til noget. Mine opsparinger var begyndt at blive lidt små, og i lyset af de stigende driftsomkostninger blev det klart, at det ikke længere ville fungere at fortsætte med at tilbyde Cube Tutor som en helt gratis tjeneste. Jeg kunne enten gå tilbage til arbejdet og bede mine brugere om lidt hjælp til serveromkostningerne og holde det kørende, eller jeg kunne kaste mig endnu mere ud i det, arbejde på mit passionsprojekt og forsøge at få noget ud af det. Der var intet valg for mig, jeg ville have succes med det.
Jeg gik i gang med Cube Tutor Champion-programmet. Det var en måde for jer at støtte Cube Tutor økonomisk på med løfte om nogle ekstra funktioner til jeres konto, men endnu vigtigere at tage det økonomiske pres af og give mig mulighed for rent faktisk at arbejde på at forbedre webstedet. Alt i alt arbejdede jeg på dette i den bedste del af et år, før det ville se dagens lys, men da det endelig blev lanceret, føltes det fantastisk. Ikke alene engagerede folk sig i det, men jeg opnåede hurtigt mit andet niveau engagement på Patreon, hvilket gjorde det muligt for mig at arbejde på deltid på webstedet, som mit job.
Da programmet blev lanceret, var jeg i et ret dårligt sted økonomisk set. Efter at have taget 18 måneder uden løn, kombineret med de tusindvis af dollars, jeg havde brugt på serveromkostninger, havde jeg virkelig brug for at få nogle indtægter. Det er virkelig kun med støtte fra en meget kærlig og forstående kone, at det lykkedes mig at komme til det stadie, hvor jeg overhovedet kunne lancere Champion-programmet, og det er jeg meget heldig for. Tak.
Men selv med den overvældende støtte fra fællesskabet var det bare ikke nok til at holde mig i gang, og jeg var nødt til at tage et andet job. Jeg fik tilbudt en mulighed, der passede meget godt sammen med mit engagement på Cube Tutor 1-2 dage om ugen, og det er et job, som jeg fortsætter med den dag i dag, på deltid. Jeg er også meget taknemmelig for den mulighed, da ikke mange traditionelle job ville være så imødekommende og have så stor forståelse for den tid, jeg skulle bruge på at arbejde på Cube Tutor.
Sammen med lanceringen af Champion-programmet kom der et væld af anmodninger om funktioner fra brugere, der vidste, hvad de ville have ud af webstedet, og i de første par måneder frem til oktober 2015 gik det godt. Jeg udsendte regelmæssige udgivelser, løste anmodninger om funktioner og holdt generelt mit Patreon-løfte. Den feedback, jeg fik omkring dette tidspunkt, var i stil med “disse funktioner er fantastiske, men hvornår vil du tage fat på en af de større, som f.eks. at få siden til at fungere på mobilen?”. I begyndelsen havde jeg aldrig forestillet mig, at jeg ville være på det stadie, hvor folk ville bruge CT på den måde, som de gør, og det var ikke rigtig blevet bygget med mobile enheder i tankerne. Det var en stor opgave. Jeg gik tilbage til mine Patreon-tilhængere og sagde: “Okay, jeg kan gøre det her, men jeg kan ikke længere følge med 1-2 Feature Releases om måneden, det er 6 måneders hårdt arbejde i sig selv”. I var meget støttende og sagde: “Hey, fedt! Gør det bare!”. Jeg gik i gang med at bygge et mobilt brugergrænsefladeinterface oven på Cube Tutor.
På mange måder tror jeg, at dette var et vendepunkt, da jeg var gået fra mit velkendte område, hvor jeg udgav små udgivelser og fejlrettelser, til noget meget større. Selv i de dage, hvor jeg udviklede Champion-programmet, udsendte jeg stadig regelmæssige udgivelser. Dette var starten på nedgangen i min kommunikation, noget som der bare ikke er nogen undskyldning for. Ikke desto mindre arbejdede jeg hårdt i de seks måneder og kom ud i den anden ende med et mobilt UI til udarbejdelse af udkast, noget som jeg tilbød til betatest i sommeren 2016. Feedbacken var generelt meget positiv, og jeg gik tilbage til udviklingen med henblik på at færdiggøre arbejdet og få det udgivet.
Hvad gik galt?
Så slog en bombe ned. Jeg kommer til at tale lidt teknisk i løbet af de næste par afsnit, men jeg synes, det er vigtigt at være så klar som muligt om, hvad der skete. Jeg erfarede fra den ene dag til den anden, at Apache Tapestry, den ramme, som Cube Tutor var bygget på, var kommet til slutningen af sin levetid, og at grundlæggeren af denne ramme ikke længere ville støtte den. Dette burde ikke have overrasket mig, da Tapestry var en ramme fra en ældre tid. Det var ikke rigtig blevet bygget med mobilen i tankerne og undgik den nuværende industritrend med at køre scriptingsprog på klienten og serveren. Det var et langsomt bevægende levn, der ikke rigtig hørte hjemme i 2016. Jeg havde kun valgt Tapestry i første omgang, fordi det var hurtigt at udvikle på og velkendt, og jeg troede alligevel ikke, at dette projekt nogensinde ville se dagens lys. Hvis der er én beslutning, som jeg kunne ændre i alt dette, ville det være den, men selvfølgelig er bagklogskab 20/20.
Da Tapestry indtil dette tidspunkt havde et meget aktivt fællesskab af udviklere, som ikke kun forbedrede rammen, men også producerede plugins til at udvide den. Jeg gjorde stor brug af disse plugins til mange ting, herunder upload-widgets, jQuery-integration og server-push-funktionalitet, som udnyttes meget i tegning og grid-tegning. Denne ramme og dens plugins var grundlaget for Cube Tutor, og uden at de blev aktivt vedligeholdt, vidste jeg bare ikke, om jeg skulle fortsætte med den mobile omskrivning, for noget, der sandsynligvis ville skulle omskrives igen inden for kort tid. Jeg fandt mig selv i at forsøge at modernisere noget fra et fundament, der aldrig rigtig var moderne i første omgang, og som nu ikke engang ville blive vedligeholdt og opdateret. Webudviklingsbranchen har bevæget sig hurtigt i løbet af de sidste ti år, og uden støtte fra noget, der kunne føre Cube Tutor sikkert ind i de næste ti år, hvordan kunne jeg så fortsætte med Tapestry? I et par måneder snurrede jeg rundt. Jeg fortsatte dels med det mobile arbejde, dels udarbejdede jeg prototyper til andre frameworks, men for det meste var jeg bare fortabt og usikker på, hvad jeg skulle gøre i lyset af dette problem.
Midt i alt dette ramte et andet problem mig. Ikke alene var Cube Tutor bygget på en døende ramme, men den brugte også en lidt forældet version af denne ramme. Den kørte (og kører stadig) på 5.3.X-versionen af Tapestry på grund af dens afhængighed af nogle af de tidligere nævnte plugins, som ikke er kompatible med den seneste 5.4.X-udgave. Desværre bruger 5.3.X-versionen af Tapestry en ældre version af Java, Java 7, et andet levn, og min build-server besluttede at holde op med at understøtte Java 7. Det betyder, at jeg faktisk ikke kunne bygge kodebasen til udgivelse. I sig selv er dette problem ikke uoverkommeligt. Jeg kunne skifte build-server, bygge webstedet lokalt eller eventuelt se på at ændre Tapestry-plugins selv for at bringe dem i overensstemmelse med Tapestry 5.4-udgaven af Tapestry og Java 8. Men sammen med alt det andet føltes det som det sidste søm i kisten for Cube Tutor på Tapestry.
Jeg kan ikke overdrive, hvor meget arbejde det ville være at gå tilbage til begyndelsen og omskrive Cube Tutor igen på en ny ramme. Det tog mig det meste af to år at arbejde på fuld tid for at få det derhen, hvor det er nu. Med mine andre professionelle forpligtelser og udsigten til snart at stifte familie kunne jeg simpelthen ikke overveje at gøre alt det arbejde igen, det var ikke muligt.
Min største skam i alt dette er den manglende gennemsigtighed i denne sag. Jeg ville ønske, at jeg havde haft modet til bare at sige “se gutter, her er hvor jeg er”, men det var jeg ikke vant til. Jeg var vant til at løse problemer og præsentere flot færdigt arbejde og forbedringer til fællesskabets beundring. Brad og Eric læste en PM-samtale op, som jeg havde haft med Brad sidste år, hvor jeg taler om forlegenhed, og det er den eneste begrundelse, jeg har. Jeg ved ikke, hvad jeg skal gøre ved dette problem og har kæmpet for at se en vej ud af det i lang tid nu.
Hvor er vi nu?
Simpelt sagt kan jeg i øjeblikket ikke opdatere siden, udover de ting jeg kan ændre via databasen som nye kort, featured cubes og average cubes. Mit liv er ikke længere fyldt med den fritid, som jeg havde den luksus, jeg havde i 2014, og jeg har simpelthen ikke råd til at gå tilbage til en stilling med en Patreon-indtægt kun for at forsørge mig selv på Cube Tutor på fuld tid for at omskrive webstedet, og selv hvis jeg kunne, har jeg nu andre langsigtede professionelle forpligtelser at overholde, der har krav på min tid. Alt dette sagt, for at holde Cube Tutor oppe er jeg nødt til at dække de løbende omkostninger, som i øjeblikket ligger i gennemsnit på omkring 700-750 dollars om måneden. En kombination af disse tre ting har gjort, at jeg bare træder på vandet, snurrer rundt og ikke ved, hvad jeg skal gøre.
Men hvad angår selve pengene, har jeg ikke rørt dem i over et år. Jeg har en separat konto til alle Cube Tutor’s Patreon-indtægter, og de ekstra penge oven i det, jeg har skullet betale i omkostninger og skat, ligger for det meste bare der. Dengang Patreon startede, og jeg stadig arbejdede aktivt på det, hævede jeg pengene regelmæssigt, men jeg føler ikke, at jeg har tjent dem i et stykke tid nu, og derfor er der en lille pulje penge, der er akkumuleret, som i det mindste kunne dække serveromkostningerne i et stykke tid, hvis Patreon-støtten reduceres dramatisk efter dette indlæg, som jeg forventer, at den kan.
Så hvor efterlader alt dette Cube Tutor? Tja, svaret er stadig, at jeg ikke ved det. Brad og Eric blev ved med at vende tilbage til dette punkt, at jeg havde nævnt “et kommende blogindlæg” i lang tid uden nogensinde at levere på det, og jeg gætter på, at jeg udsatte det, indtil jeg kunne tilbyde i det mindste en slags lys for enden af tunnelen, men lige nu ved jeg bare ikke, hvad den beslutning er. Det eneste, jeg ønsker at gøre lige nu, er at være ærlig og åben omkring situationen, hvilket jeg burde have gjort for længe siden. Det er ikke fair over for nogen af jer, og især ikke over for dem, der træffer beslutninger om at støtte Cube Tutor på baggrund af mine Patreon-forpligtelser.
Det vigtigste er, at oplysningerne endelig er ude, og det er et grundlæggende og lidt katartisk skridt for mig at tage at skrive dette. Jeg behandler dette indlæg som det første skridt tilbage i den rigtige retning mod at udarbejde en løsning på problemet, i stedet for at vide, hvad denne løsning egentlig er. Endnu en gang tak til Brad og Eric for at være katalysatoren. Jeg er ked af, at tingene blev så slemme, at I følte, at I var nødt til at producere denne podcast, og jeg er ked af det til alle andre, fordi jeg har svigtet jer og ikke havde modet til at skrive dette af på min egen ryg for længe siden.
Mere end noget andet elsker jeg dette site og dette fællesskab, og jeg er meget stolt af det, men hånden på hjertet ved jeg ikke, hvordan jeg kan finde en måde at fortsætte med det på i lyset af de forhindringer, jeg har foran mig. Hvad er min ideelle løsning? At finde en vej ud af dette, hvor Cube Tutor fortsat er den mest fantastiske terningplatform, der findes på nettet, noget jeg kan være stolt af, og som I vil elske igen.
Jeg bruger ikke rigtig Reddit særlig meget, men som altid kan jeg kontaktes via e-mail: [email protected].
Ben