devblog The CubeTutor Controversy
Piszę ten wpis w odpowiedzi na podcast, który ukazał się kilka dni temu na temat Cube Tutor i niektórych kwestii związanych z jego obecnym stanem rozwoju.
http://solelysingleton.libsyn.com/season-3-episode-1-the-cube-tutor-controvesy
Chciałbym podziękować Bradowi i Ericowi za wyprodukowanie tego odcinka. Podeszli do tematu, że mają wszystkie prawa na świecie, aby być krzyczy i krzyczy szalony o z dojrzałym, poziom-headed, jasne i uprzejmy ton. Jak zapewne możesz sobie wyobrazić, było to dla mnie naprawdę trudne do wysłuchania, usłyszeć stan Cube Tutor przedstawiony wprost przez dwóch najdłużej działających zwolenników, którzy mimo wszystko nadal wspierają stronę finansowo poprzez Patreon. Przedstawili oni informacje w jasny, rzeczowy sposób i nie mam żadnych problemów z żadną z kwestii, które zostały poruszone. Mają rację we wszystkim – nie dotrzymałem umowy i byłem żałośnie nieodpowiedni w oferowaniu jakiejkolwiek komunikacji, i za to was wszystkich naprawdę przepraszam.
Jak się tu znalazłem?
Jeśli nie jesteś zainteresowany historią Cube Tutora, to nie krępuj się przejść do tej sekcji: Co poszło nie tak?
W 2013 roku byłem programistą w dużym i odnoszącym sukcesy software house. Praca była dobra i patrząc wstecz nie mam do niej żadnych zastrzeżeń, ale nie ekscytowała mnie, nie dawała mi powodu do wstania z łóżka i rzucenia się w wir dnia. Grałem w Magica z przerwami przez ponad 10 lat i mniej więcej w tym czasie zacząłem interesować się cube’ami i chciałem zbudować swój własny. W wolnym czasie zacząłem rozwijać Cube Tutor, początkowo tylko dla własnych potrzeb. W miarę jak się rozrastał i stawał się coraz bardziej bogaty w funkcje, udostępniłem go w sieci, a kilku przyjaciół zaczęło przy nim majstrować. Stamtąd umieściłem post na MTGSalvation zapraszający innych do wypróbowania go i wiele osób to zrobiło.
Około jesieni 2013 zdałem sobie sprawę, że mam coś z Cube Tutor. Ludzie byli naprawdę zaangażowani w to i to czyniło mnie bardzo szczęśliwym, że mogłem pracować nad stroną, którą kochałem w moim wolnym czasie. Zostałem poproszony przez potencjalnego partnera biznesowego o możliwość stworzenia z Cube Tutor czegoś, co mogłoby mnie wesprzeć finansowo i pomysł ten brzmiał jak marzenie. Stałem się nieco zmęczony moją pracą i pomysł pracy nad czymś, co kochałem w pełnym wymiarze czasu był niezwykle pociągający. Złożyłem moje wypowiedzenie i rzuciłem się w to.
Pierwsze sześć miesięcy lub tak 2014 roku były świetne! Budziłem się każdego dnia, zmotywowany do ciężkiej pracy nad stroną, którą kochałem, aby zbudować ją w coś jeszcze większego. Podczas gdy nie otrzymywałem wynagrodzenia za robienie czegokolwiek w tym czasie, byłem w stanie utrzymać się dzięki pewnym oszczędnościom i z obietnicą zbudowania tej rzeczy w opłacalny biznes, z radością pracowałem daleko.
Nie pamiętam, kiedy to się stało, ale stopniowo stało się oczywiste, że partner biznesowy, z którym miałem nadzieję pracować, wyraźnie nie miał tej samej wizji co ja i po prostu nie był zainteresowany realizacją naszego pomysłu. Patrząc wstecz, byłem prawdopodobnie trochę naiwny i z jakiegoś powodu po prostu nie udało mi się tego połączyć. Moje oszczędności zaczęły się nieco wyczerpywać, a w obliczu rosnących kosztów eksploatacji stało się jasne, że dalsze oferowanie Cube Tutora jako całkowicie darmowej usługi nie będzie już działać. Mogłem albo wrócić do pracy i poprosić moich użytkowników o małą pomoc w pokryciu kosztów serwera i utrzymać go w ruchu, albo mogłem rzucić się w to jeszcze bardziej, pracować nad moim projektem pasji i spróbować coś z tego zrobić. Nie było dla mnie wyboru, chciałem, aby to się udało.
Wziąłem się za program Mistrz Cube Tutor. To był sposób dla was, aby wspierać Cube Tutor finansowo na obietnicy niektórych dodatkowych funkcji dla swojego konta, ale co ważniejsze, aby wziąć presję finansową off i pozwolić mi faktycznie pracować nad poprawą strony. W sumie pracowałem nad tym przez najlepszą część roku, zanim ujrzy światło dzienne, ale kiedy w końcu wystartował, czułem się świetnie. Nie tylko ludzie zaangażowali się w to, ale szybko osiągnąłem mój drugi poziom zaangażowania na Patreon, który pozwolił mi pracować w niepełnym wymiarze czasu na stronie, jako moja praca.
Do czasu uruchomienia programu, byłem w dość złym miejscu finansowo. Po 18 miesiącach bez wynagrodzenia, w połączeniu z tysiącami dolarów, które wydałem na koszty serwera, naprawdę potrzebowałem uzyskać jakiś dochód. Tak naprawdę tylko dzięki wsparciu bardzo kochającej i wyrozumiałej żony udało mi się dojść do etapu, w którym mogłem nawet uruchomić Program Champion i za to jestem bardzo szczęśliwy. Dziękuję Ci.
Jednakże nawet przy ogromnym wsparciu ze strony społeczności, to po prostu nie wystarczyło, aby utrzymać mnie przy życiu i musiałem podjąć inną pracę. Zaoferowano mi możliwość, która bardzo dobrze pasowałaby do mojego zaangażowania w Cube Tutor 1-2 dni w tygodniu i jest to praca, którą kontynuuję do dziś, na pół etatu. Jestem również bardzo wdzięczny za tę możliwość, jako że nie wiele tradycyjnych miejsc pracy byłoby tak przychylnych i wyrozumiałych dla czasu, który musiałem poświęcić na pracę nad Cube Tutor.
Podsumowując uruchomienie Programu Mistrzów, nadszedł zalew próśb o funkcje od użytkowników, którzy wiedzieli czego chcą od strony i przez pierwsze kilka miesięcy, aż do października 2015 roku, wszystko szło świetnie. Wydawałem regularne wersje, rozwiązywałem prośby o funkcje i generalnie dotrzymywałem obietnicy Patreonu. Informacje zwrotne, które otrzymywałem w tym czasie były na zasadzie „te funkcje są świetne, ale kiedy zamierzasz zająć się jedną z większych, jak na przykład uruchomienie strony na urządzeniach mobilnych?”. Na początku nigdy nie wyobrażałem sobie, że będę na etapie, na którym ludzie będą używać CT w taki sposób, w jaki używają, a on nie był zbudowany z myślą o urządzeniach mobilnych. To było ogromne przedsięwzięcie. Wróciłem do moich zwolenników z Patreonu i powiedziałem: „OK, mogę to zrobić, ale nie będę już w stanie nadążyć z 1-2 wydaniami funkcji miesięcznie, to jest 6 miesięcy ciężkiej pracy”. Byliście bardzo wspierający i powiedzieliście: „Hej, świetnie! Do dzieła!”. Wyruszyłem, aby zbudować mobilne UI na Cube Tutor.
Na wiele sposobów myślę, że to był punkt zwrotny, ponieważ wyszedłem ze znanego mi terytorium wypuszczania małych wydań i poprawek błędów do czegoś znacznie większego. Nawet w czasach, gdy rozwijałem Program Champion, wciąż wydawałem regularne wersje. To był początek spadku mojej komunikacji, coś, na co nie ma żadnego wytłumaczenia. Niemniej jednak ciężko pracowałem przez te sześć miesięcy i wyszedłem z drugiego końca z mobilnym UI do draftingu, czymś co zaoferowałem do Beta Testów latem 2016 roku. Opinie były ogólnie bardzo pozytywne i wróciłem do rozwoju z zamiarem ukończenia pracy i wydania jej.
Co poszło nie tak?
Wtedy uderzyła bomba. W następnych paragrafach będę mówił trochę technicznie, ale myślę, że ważne jest, aby jak najdokładniej wyjaśnić co się stało. Z dnia na dzień dowiedziałem się, że Apache Tapestry, framework, na którym zbudowany był Cube Tutor, dobiegł końca, a twórca tego frameworka nie będzie go już wspierał. Nie powinno to być dla mnie zaskoczeniem, Tapestry był frameworkiem z dawnych czasów. Nie był on tak naprawdę zbudowany z myślą o urządzeniach mobilnych i odrzucał obecny w branży trend uruchamiania języków skryptowych na kliencie i serwerze. Był to wolno poruszający się relikt, który tak naprawdę nie pasował do 2016 roku. Wybrałem Tapestry tylko dlatego, że było szybkie w rozwoju i znane, a nie sądziłem, że ten projekt kiedykolwiek ujrzy światło dzienne. Jeśli jest jedna decyzja, którą mógłbym zmienić w tym wszystkim, to byłaby to ta jedna, oczywiście z perspektywy czasu 20/20.
Do tego momentu Tapestry miało bardzo aktywną społeczność deweloperów, którzy nie tylko ulepszali framework, ale także produkowali wtyczki do jego rozszerzenia. Wykorzystywałem te wtyczki do wielu rzeczy, w tym do wgrywania widżetów, integracji jQuery i funkcji server-push, która jest mocno wykorzystywana w projektowaniu i tworzeniu siatek. Ten framework i jego wtyczki były podstawą Cube Tutor i bez ich aktywnego utrzymywania, nie wiedziałem, czy powinienem kontynuować przepisywanie aplikacji na urządzenia mobilne, dla czegoś, co prawdopodobnie będzie musiało być przepisane ponownie w krótkim czasie. Okazało się, że próbuję zmodernizować coś, co nigdy nie było tak naprawdę nowoczesne, a teraz nie byłoby nawet utrzymywane i aktualne. Przemysł tworzenia stron internetowych szybko się zmieniał w ciągu ostatnich dziesięciu lat i bez wsparcia czegoś, co mogłoby bezpiecznie wprowadzić Cube Tutor w następne dziesięć lat, jak mógłbym kontynuować pracę z Tapestry? Przez kilka miesięcy kręciłem się w kółko. Częściowo zajmowałem się pracą mobilną, częściowo prototypowaniem innych frameworków, ale głównie byłem po prostu zagubiony i niepewny co robić w obliczu tego problemu.
W środku tego wszystkiego uderzył kolejny problem. Cube Tutor nie tylko był zbudowany na umierającym frameworku, ale także używał nieco przestarzałej wersji tego frameworka. Był (i nadal jest) uruchomiony na wersji 5.3.X Tapestry z powodu zależności od niektórych z wcześniej wspomnianych wtyczek, które nie są kompatybilne z najnowszym wydaniem 5.4.X. Niestety wersja 5.3.X Tapestry używa starszej wersji Javy, Java 7, kolejnego reliktu, a mój serwer kompilacji postanowił przestać wspierać Java 7. Oznacza to, że nie byłem w stanie zbudować bazy kodu do wydania. Problem ten sam w sobie nie jest nie do pokonania. Mógłbym zmienić serwer budujący, zbudować stronę lokalnie lub potencjalnie przyjrzeć się modyfikacji wtyczek Tapestry, aby dostosować je do wydania 5.4 Tapestry i Javy 8. Jednakże, w połączeniu ze wszystkim innym, czułem się jak ostateczny gwóźdź do trumny Cube Tutor na Tapestry.
Nie mogę przesadzić jak wiele pracy wymagałby powrót do początku i napisanie Cube Tutor od nowa na nowym frameworku. Zajęło mi to najlepszą część dwóch lat pracy w pełnym wymiarze godzin, aby doprowadzić go do miejsca, w którym jest teraz. Z moimi innymi zobowiązaniami zawodowymi i perspektywą założenia rodziny wkrótce, po prostu nie mogłem rozważać wykonywania całej tej pracy ponownie, to nie było możliwe.
Moją największą szkodą w tym wszystkim jest brak przejrzystości w tej sprawie. Chciałbym mieć odwagę po prostu powiedzieć „słuchajcie chłopaki, oto gdzie jestem”, ale nie byłem do tego przyzwyczajony. Byłem przyzwyczajony do rozwiązywania problemów i prezentowania ładnie wykonanych prac i ulepszeń ku uwielbieniu społeczności. Brad i Eric przeczytali rozmowę w PM, którą miałem z Bradem w zeszłym roku, gdzie mówię o zakłopotaniu i to jest jedyne usprawiedliwienie jakie mam. Nie wiem co zrobić z tym problemem i od dłuższego czasu staram się znaleźć wyjście z niego.
Gdzie teraz jesteśmy?
Po prostu nie mogę obecnie aktualizować strony, poza rzeczami, które mogę zmienić poprzez bazę danych jak nowe karty, wyróżnione kostki i średnie kostki. Moje życie nie jest już pełne wolnego czasu, którego miałem luksus w 2014 roku i po prostu nie mogę sobie pozwolić na powrót do pozycji dochodu tylko z Patreona, aby wspierać się na Cube Tutor w pełnym wymiarze czasu, aby przepisać stronę, a nawet gdybym mógł, mam teraz inne długoterminowe zobowiązania zawodowe do utrzymania, które mają zapotrzebowanie na mój czas. Wszystko to powiedziawszy, aby utrzymać Cube Tutor muszę pokryć koszty bieżące, które obecnie wynoszą średnio około 700-750 dolarów miesięcznie. Kombinacja tych trzech rzeczy sprawiła, że nie wiem co robić, ale po prostu chodzę po wodzie, kręcę się i nie wiem co robić. Mam oddzielne konto dla wszystkich zarobków z Patreonu Cube Tutora i dodatkowe pieniądze, oprócz tego co musiałem zapłacić w kosztach i podatku, w większości po prostu tam siedzą. Kiedy Patreon wystartował, a ja wciąż aktywnie nad nim pracowałem, wypłacałem pieniądze regularnie, ale nie czuję, że zarobiłem je już jakiś czas temu i dlatego jest tam mała pula pieniędzy, która się nagromadziła, która mogłaby przynajmniej pokryć koszty serwera przez jakiś czas, jeśli wsparcie Patreonu drastycznie spadnie po tym poście, jak się spodziewam, że może.
Więc gdzie to wszystko pozostawia Cube Tutor? Cóż, odpowiedź jest nadal, że nie wiem. Brad i Eric ciągle wracali do tego punktu, że wspominałem o „nadchodzącym wpisie na blogu” przez długi czas, nigdy nie dostarczając go i chyba odkładałem go, dopóki nie będę mógł zaoferować przynajmniej jakiś rodzaj światła na końcu tunelu, ale teraz po prostu nie wiem, co to jest rozdzielczość. Wszystko, co chcę teraz zrobić, to być uczciwym i otwartym w tej sytuacji, co powinienem był zrobić już dawno temu. To nie jest w porządku wobec nikogo z was, a w szczególności wobec tych, którzy podejmują decyzje o wspieraniu Cube Tutor w oparciu o moje zobowiązania na Patreonie.
Najważniejsze jest to, że informacja jest w końcu dostępna i jest to dla mnie fundamentalny i nieco katarktyczny krok, aby to napisać. Traktuję ten post jako pierwszy krok we właściwym kierunku w kierunku wypracowania rozwiązania problemu, w miejsce wiedzy, co to rozwiązanie jest rzeczywiście. Jeszcze raz dziękuję Bradowi i Ericowi za bycie katalizatorem. Przykro mi, że sprawy przybrały tak zły obrót, że czułeś, że musisz wyprodukować ten podcast i przepraszam wszystkich innych za to, że cię zawiodłem i nie miałem odwagi, aby odpisać to z moich pleców dawno temu.
Najbardziej kocham tę stronę i tę społeczność i jestem z niej bardzo dumny, ale z ręką na sercu nie wiem, jak mogę znaleźć sposób, aby kontynuować to w obliczu przeszkód, które mam przed sobą. Jakie jest moje idealne rozwiązanie? Znaleźć sposób, aby Cube Tutor pozostał najbardziej niesamowitą platformą kostkową dostępną w sieci, czymś, z czego mogę być dumny i co wy pokochacie ponownie.
Nie używam Reddita zbyt często, ale jak zawsze jestem kontaktowy poprzez email: [email protected].
Ben