02Blog

La documentació que falta

Notes del que anem aprenent. Gairebé tot surt d'un problema concret que ens va costar més del que esperàvem.

Totes
  1. ProductoLa web de un pintor solo tiene que hacer una cosa: que le llamenHice la web y la app de trabajo de Mamu, un pintor de Valencia, en cuatro días sueltos. Lo que más mejoró la web fue borrar las páginas de precios y de por qué elegirnos.
  2. IACómo construimos Zenbu, un buscador de anime que busca por lo que cuentasCatorce mil animes, un vector por serie y un LLM que reordena al final. Lo que más nos costó no fue la búsqueda semántica: fueron las secuelas con sinopsis de una línea.
  3. ArquitecturaHe migrat de proveïdor d'auth quatre vegadesQuatre proveïdors gestionats en any i mig, i el mateix destí en tots: middleware propi. El que trenca cada transició i què miro ara abans d'escriure una línia d'auth.
  4. OperacióStripe m'ha trencat el build cinc vegades i ja ho tinc a l'agendaPujar la versió de l'API de Stripe no és un incident. És manteniment recurrent, amb danys col·laterals força predictibles, i convé pressupostar-lo.
  5. ProducteCrèdits, saldo, límits de despesaEn cinc productes he muntat el cobrament per ús igual: començo amb crèdits, acabo amb saldo en cèntims i límits per clau. Ja sé en quina etapa començar.
  6. Bases de dadesPer què he tret RLS de Postgres les dues vegades que l'he fet servirRow Level Security sembla la pràctica correcta per defecte. Amb Drizzle, server actions i auth pròpia, la lògica de permisos ja viu en un altre lloc i mantenir-ne les dues dol.
  7. CriteriMai no començo de zero: el que sempre m'enduc i el que sempre retalloDeu projectes sobre el mateix boilerplate. El primer commit de cadascun s'assembla més a l'últim de l'anterior que a un projecte nou, i el segon commit gairebé sempre esborra alguna cosa.
  8. CriteriEl primer que trec de qualsevol plantilla és StripeArrenco gairebé tots els projectes esborrant el checkout, el portal i el webhook. No és despistament: és separar la infraestructura que sempre necessitaré de la que encara no toca.
  9. ArquitecturaEl mateix bug de concurrència m'ha aparegut en tres projectes diferentsUn comptador que suma sota càrrega perd increments, i un que resta pot cobrar dues vegades el mateix. Quan el comptador és diners, això no és un detall que s'arregli després.
  10. IACada model nou em trenca una cosa diferentSis migracions de model en any i mig. Cap no va ser canviar una cadena de text, encara que totes ho semblaven al principi.
  11. Bases de dadesVaig reescriure el mateix model de contractes més de deu vegadesUn model de domini complicat no surt bé a la primera. S'hi convergeix reescrivint-lo amb les dades reals al davant, i això inclou revertir decisions que semblaven correctes.
  12. Bases de dadesEls meus primers esquemes de dades gairebé mai no sobreviuen al primer mesL'esquema del dia 1 és una hipòtesi sobre un domini que encara no entens. Assumir-ho canvia com l'escrius i quant dol canviar-lo.
  13. SeguretatPer què els accessos de convidat els faig amb token de sessió i no amb codisUn codi de sis dígits sembla la manera simple de deixar entrar algú sense compte. Ho és fins que l'has de revocar, i llavors descobreixes que no saps qui estàs fent fora.
  14. OperacióPer què "funciona en local" ja no em diu resLes diferències entre la teva màquina i producció no són mala sort: són quatre categories concretes que fallen sempre i que el build en verd no pot veure.
  15. EnginyeriaEl test que deia verd i mentiaSis SCRIPT ERROR dins d'un test que imprimia TOTS ELS TESTS OK i sortia amb codi 0. Com es descobreix que un verd és fals i què faig ara abans de fiar-me'n.
  16. RendimentEls llistats d'admin són el primer que cauEl panell intern s'escriu sense límits perquè al principi hi ha quatre files. És justament el lloc on peta tot quan el producte creix.
  17. SeguretatEl que vaig aprendre auditant el meu propi codi com si fos d'un altreUn ACL buit que retornava el corpus sencer, una injecció de CSS sense una línia de JavaScript i una API key que encara valia després de donar de baixa l'amo. Tot en un dia, tot en codi que havia escrit jo.
  18. ArquitecturaPer què exigeixo login en apps que no el necessitenSense identitat no hi ha quota, ni límit de despesa, ni manera de tallar qui abusa. La fricció del registre és barata comparada amb el que costa no tenir-la.
  19. CriteriEl que sempre acaba passant quan començo una cosa a màHe construït editors a mà quatre vegades. Tres van acabar reescrits amb una llibreria. La quarta no va arribar als dos dies.
  20. FrontendQuan un store global es guanya el seu llocL'estat global no es justifica per comoditat. Es justifica quan un component intermedi rep props que no fa servir, només per passar-les cap avall.
  21. CriteriCinc migracions d'ESLint a Biome: la decisió ja està presaQuan fas la mateixa migració en cinc projectes sense aturar-te a pensar-hi, deixa de ser una preferència i passa a ser criteri. El que es trenca pel camí i el que es perd.
  22. CriteriDocumentar abans de programar: la meva regla per a integracions que no controloEn una integració amb una API aliena, els quatre primers commits no toquen codi. Escriure el document abans obliga a mesurar els límits que després et rebenten en producció.