Szalone i jednocześnie smutne czasy


Nieco niżej znajdziesz dokładniejszy opis tego, co wydarzyło się w związku z moim intensywnym korzystaniem z usługi Documentero, oraz jak ją zastąpiłem (chociaż nadal gorąco polecam!) i dlaczego.

Podsumowanie i wnioski

Przewrotnie zacznę jednak od tego, dlaczego właściwie o tym piszę.

Cały ten przydługi wpis jest po to, aby skonstatować, że żyjemy w czasach szalonych. Czasach, w których radość ze zbudowania czegoś takiego przez osobę nie będącą stricte programistą miesza się ze smutkiem, kiedy pomyślę sobie, ile biznesów w ten sposób może upaść.

Fakt, nie każdy użytkownik Documentero napisze sobie własny generator dokumentów, ale jest to w obecnych czasach dużo bardziej prawdopodobne niż kiedyś. Więc jeśli ktoś płaci obecne 300 dolarów za plan pozwalający generować kilka tysięcy dokumentów miesięcznie, to:

  • albo wynajmie w tej cenie programistę na jakimś Fiverr, płacąc (prawdopodobnie) mniej niż 2-miesięczny rachunek za taką usługę,
  • albo sam nauczy się budować takie rzeczy po przysłowiowym kursie Claude’a w Grudziądzu, płacąc swoim czasem i tokenami,
  • albo będzie dalej płacił, bo jego biznes generuje takie przychody, że kilkaset dolców to dla niego kropla w morzu kosztów i szkoda mu czasu na takie pierdoły (i takich klientów życzę twórcom Documentero z całego serca).

No to teraz już cała historia, czyli tło powyższych wynurzeń, które w sumie możecie sobie podarować bo zapewne takich przykładów znacie setki.

Dla mnie są one o tyle ważne, że nie jest to jakaś teoretyczna rzecz zasłyszana gdzieś tam w internetach, tylko realny przypadek mój i mojego klienta z ostatniego miesiąca.

Tło

Od kilku lat rozwijam aplikację dla klienta. Jej główną funkcjonalnością jest generowanie dokumentów w PDF i Word. Są to wielostronicowe protokoły przeglądów budowlanych z wprowadzonymi do aplikacji:

  • danymi obiektu,
  • zaleceniami,
  • uwagami inspektorów,
  • zdjęciami
  • itd., itp.

Szablon takiego dokumentu to plik word a w nim kilkadziesiąt specyficznie zapisanych zmiennych używanych w trakcie jego generowania. Wywołanie usługi polega na przekazaniu kilkuset linii JSON ze strukturą danych oraz linkami do pobrania zdjęć. Na tej podstawie usługa generowania dokumentów tworzy PDF albo Worda, w zależności od tego, co użytkownik wybierze w aplikacji.

Po lewej szablon po prawej wygenerowany protokół (fragment)

I teraz najciekawsze. Przez pierwsze 3 lata opierałem generowanie dokumentów o Documentero. Jest to świetna polska platforma, której wersję dożywotnią (z limitem na 2500 generacji miesięcznie) zakupiłem kiedyś na AppSumo.

Ponieważ klient jest moim przyjacielem, a ja i tak nie wykorzystywałem nawet 1% z limitu, jaki miałem dostępny, to po prostu aplikacja u klienta korzystała z tego serwisu przez cały ten czas.

Niestety ostatnio zaczęliśmy dochodzić do ściany. Limit 2,5 tys. generacji miesięcznie zaczął być regularnie osiągany, a nawet przekraczany.

Przez kilka miesięcy udawało mi się, dzięki kontaktom z wsparciem Documentero, resetować ten limit, aż w końcu postanowiłem, że muszę zbudować własną usługę do generowania tych dokumentów. I już pewnie domyślacie się, co będzie dalej.

Programistą nie jestem, ale coś tam o budowie usług i systemów wiem, więc przygotowałem dosyć dokładny opis tego, czego oczekuję. Przykładowe pliki z szablonami i wygenerowanymi dokumentami oraz przykładowe requesty i zawartość JSON wrzuciłem to wszystko na bęben do Claude i poszedłem na obiad.

Pierwsza wersja usługi była gotowa po około godzinie. Nie zażarła jakoś specjalnie dużo tokenów, wystarczył plan Pro, model Sonet 5 i 60 minut. Co najważniejsze usługa już po tym etapie działała zadowalająco (pierwszy mój szok).

Kolejne wersje to były tylko pewne poprawki architektoniczne oraz drobne korekty w obsłudze rozmiarów zdjęć. Tak naprawdę, gdybym usiadł do tego rano, to wieczorem wszystko byłoby gotowe, ale ponieważ standardowo robię 10 rzeczy na raz, to zajęło to może tydzień, a robota była rozbita na kilka sesji po 1-3 godzin.

Oczywiście w tym wszystkim liczę:

  • wygenerowanie usługi (wersja MVP z bardzo uproszczonym zarządzaniem szablonami), która respektuje część składni Documentero (tę używaną w moich szablonach - pętle, instrukcje warunkowe, zmienne, obsługa zdjęć, itd.)
  • budowa lokalnego środowiska dev
  • wdrożenie na testowy serwer,
  • aktualizację samej aplikacji Laravel, która używa tej usługi (do robienia dwóch backendów, które można łatwo przełączać do generowania dokumentów po nowemu i po staremu)
  • przygotowanie kontenerów i środowiska produkcyjnego
  • wstępne testy przez użytkowników
  • gotowość do wdrożenia na produkcję z możliwością szybkiego wycofania się, gdyby coś poszło nie tak,

Szalone czasy? Dla mnie (budującego aplikacje w zespołach od wielu lat) absolutnie szalone.