Můj první zákazník zaplatil. Moje aplikace si toho nevšimla.

Před pár týdny jsem spustil malý Power-Up pro Trello. Plánuje komentáře na kartách, takže něco napíšete večer a na kartě se to objeví zítra v devět ráno. O tom, jak vznikal, jsem psal minule. Tenhle text je o tom, co se stalo, když za něj poprvé někdo opravdu zaplatil, a právě na tuhle část jsem myslel nejmíň.

Ve zkratce: zaplatil a Pro nedostal.

Platba prošla. Paddle byl spokojený, můj webhook odpověděl 200 a všechny přehledy svítily zeleně. Jenže platba nebyla navázaná na žádný účet. ID uživatele se ztratilo někde mezi webem a pokladnou, takže když webhook dorazil, můj kód viděl platbu, kterou nedokázal k nikomu přiřadit, pokrčil rameny a vrátil „ok“. Žádný nový pokus, nikde nic červeného. Přišel jsem na to jen proto, že jsem kód procházel z úplně jiného důvodu.

Tohle mi vadí nejvíc. Kdyby webhook spadl, věděl bych to ještě ten den. Protože problém „vyřešil“ potichu, mohl tam ležet týdny. První oprava tedy ani nebyla oprava té chyby. Nastavil jsem, aby mi kód poslal e-mail pokaždé, když přijde platba, kterou nedokáže spojit s uživatelem. Doufám, že ten e-mail nikdy nepřijde.

Pak jsem udělal, co jsem měl udělat před spuštěním: koupil jsem si vlastní produkt na druhém účtu se stoprocentní slevou a otevřel aplikaci, abych zjistil, jestli se Pro opravdu zapnulo.

Nezapnulo. Tentokrát jiná chyba. Do vlastních poznámek jsem si napsal zástupný text typu <your-id>, zkopíroval odkaz a ostré závorky šly s ID. Paddle ho uložil přesně tak, jak byl, můj server uložil Pro pod ID, které neexistuje, a aplikace mi dál ukazovala paywall. Trapné, ale přesně proto se testuje celý průchod, ne jen jednotlivé kousky. Pokladnu jsem testoval. Webhook jsem testoval s ukázkovými událostmi. Nikdy jsem ale v jednom kuse neprošel cestu od „kliknout na upgrade“ po „otevřít aplikaci a zkontrolovat“.

Při hledání chyby jsem se naučil ještě jednu věc: logy z hostingu z doby nákupu už byly pryč. Na bezplatném tarifu se dlouho nedrží. Zachránila mě historie notifikací v Paddle. Uchovává každý odeslaný webhook včetně celého obsahu a odpovědi mého serveru a dá se z ní webhook poslat znovu. Pokud něco prodáváte, zjistěte si, kde tuhle historii váš platební poskytovatel má, dřív než ji budete potřebovat.

Když už jsem v tom byl, našel jsem i pomalejší problém. Jako většina integrací má i ta moje týdenní úlohu, která maže data lidí, kteří aplikaci odpojí. Rozumné, až na to, že mazala i jejich placený plán. Kdo by se odpojil a znovu připojil, spadl by zpátky na bezplatnou verzi, a platit by dál musel každý měsíc. Nikdo na to zatím nenarazil. Upravil jsem to tak, aby Pro mohl odebrat jen platební systém.

Pak jsem si znovu přečetl vlastní web a i to bylo svým způsobem pokořující. Ceník sliboval něco jiného, než kód skutečně vynucoval. Bezplatný tarif, přes který by většina lidí produkt zkoušela, v ceníku vůbec nebyl. A technické omezení tam figurovalo, jako by šlo o výhodu Pro. Nic z toho nebylo schválně. Byly to texty z prvního konceptu, ke kterým jsem se po změnách produktu už nevrátil. Web navíc vypadal jako každá druhá AI generovaná SaaS stránka, tmavý s fialovou září, což není ideální, když po lidech chcete připojení jejich účtu v Trellu. Předělal jsem ho na klidnější a přidal svou fotku s větou, že e-maily na podporu chodí přímo mně. Když jste na všechno sami, je to asi to nejpřesvědčivější, co můžete ukázat.

A zákazník? Napsal jsem mu sám a přiznal, že chyba byla na mé straně. Původní platbu jsem mu vrátil a poslal slevový kód na první měsíc nového předplatného, tentokrát správně propojeného s jeho účtem. Zabralo to deset minut, a když máte přesně jednoho platícího zákazníka, je to dobře investovaný čas.

Kdybych to měl shrnout: než spustíte, kupte si vlastní produkt od začátku do konce s kupónem zdarma. Všechno, co souvisí s penězi, ať nahlas křičí, když nemůže udělat svou práci. Vězte, kde má váš platební poskytovatel historii událostí. A přečtěte si svůj ceník jako skeptický cizinec.

Budu upřímný, jak ten týden doopravdy vypadal. První prodej byl malý svátek a o pár dní později jsem zíral na platbu, kterou jsem nedokázal k nikomu přiřadit, a přemýšlel, co dalšího jsem pokazil. Myslím, že přesně tak vypadá, když něco stavíte sami. Nikdo vám nezreviduje webhook, nikdo si znovu nepřečte ceník, nikdo vám neřekne, že úklidová úloha potichu ruší lidem předplatné. Přijdete na to, až o to zakopnete.

Takže pokud jste na tom stejně, posíláte večer po práci ven svou první placenou věc, kontrolujete platební přehled častěji, než byste přiznali, a napůl tušíte, že je něco rozbité: jo, nejspíš něco rozbité je. To je v pořádku. U mě to bylo dvakrát za jeden týden. Dá se to opravit a vaši první zákazníci budou mnohem shovívavější, než čekáte, když jim to řeknete na rovinu.

Moc rád si přečtu vaši verzi. Co se rozbilo po vašem prvním prodeji? Napište mi.