Lueira va començar el març de 2023 com a motor de reserves per a escoles d'esports de muntanya. En un article anterior vaig escriure sobre l'aposta arquitectònica que vam fer des del primer dia: construir un únic sistema multi-tenant capaç de donar servei a moltes escoles sense bifurcar el codi cada vegada que algú demanava alguna cosa lleugerament diferent. Dos anys després, aquesta aposta s'ha posat a prova molt més enllà de l'esquí. Lueira gestiona ara reserves, personal i estoc en cinc sectors diferents, i aquest article tracta sobre el que va caldre de debò per estirar un sol producte al llarg de tantes activitats diferents: on va aguantar netament el mateix model central, i on va caldre feina real i gens trivial perquè deixés de trencar-se.
1. Cinc sectors, un mateix bucle
Si mires com descrivim Lueira avui a la web, s'hi llisten cinc sectors: esports d'hivern (classes, material, vendes en línia, tot sincronitzat), esports aquàtics (classes i campaments, calendari, instructors), centres de multiaventura (coordinant activitats i instructors mitjançant un motor de reserves connectat), busseig i esports submarins (organitzar immersions, vendre en línia, sincronitzar tot en temps real), i enoturisme (tastos, reserves, visitants, pagaments). Sobre el paper això semblen cinc negocis diferents. Però per sota, tots executen el mateix bucle que vam descriure a l'article del motor de reserves: un recurs, una franja horària i un límit de capacitat.
- Esports d'hivern: instructor → monitor d'esquí/snowboard; consumible → esquís, botes, forfets
- Esports aquàtics: instructor → monitor de surf/caiac/vela; consumible → taules, vestits de neoprè, caiacs
- Multiaventura: instructor → guia; consumible → arnesos, cascos, material específic del circuit
- Busseig: instructor → guia/instructor de busseig; consumible → ampolles, reguladors, vestits de neoprè, places al vaixell
- Enoturisme: instructor → amfitrió/sommelier; consumible → ampolles, copes de tast, places a la taula
2. On l'abstracció va aguantar
Les parts del model que van generalitzar bé són les parts que ja havíem fet genèriques a propòsit. Un instructor, a la base de dades, mai no va ser realment «un monitor d'esquí»: era una persona amb una qualificació, un horari i una capacitat per dirigir un grup. El material va seguir el mateix patró: ja estava modelat com un recurs limitat i rastrejable, amb una talla o variant i un recompte d'estoc, així que vestits de neoprè, caiacs i ampolles de vi hi van encaixar sense tocar les taules centrals. Fins i tot el flux de reserva amb prou feines va canviar entre una classe d'esquí i un tast de vi.
3. On no va aguantar
El temps meteorològic és el cas més clar. Una classe d'esquí i una immersió depenen de condicions en què un tast de vi mai no ha de pensar. El model central de reserves de Lueira no té cap concepte de «aquesta franja es podria cancel·lar per una tempesta»: això s'havia de construir com una capa d'extensió superposada a certs sectors, sense fondre-ho en el bucle genèric.
Les activitats de diversos dies i diverses etapes van ser el segon buit real. Un centre de multiaventura sovint ven un circuit: un matí de via ferrata seguit d'una tarda de barranquisme. El nostre model de reserves suposa un recurs, una franja, una capacitat. Un circuit és en realitat diverses reserves enganxades entre si amb dependències entre elles.
La dinàmica de grup va ser la tercera diferència, més discreta. Una classe d'esquí ha de tenir en compte nivells mixtos dins d'un mateix grup. Un grup de tast de vi es reserva d'una vegada i es queda fix.
4. La tensió que no desapareix
Dos anys després, el resum honest és que ampliar sectors no és un problema que vam resoldre una vegada: és una tensió que gestionem en cada sector nou que afegim. Cada vegada que un tipus de negoci nou demana funcionar sobre Lueira, hi ha una decisió real: això necessita un camp nou en un model genèric existent, o necessita la seva pròpia capa d'extensió? Ens hem decantat, la majoria de vegades, per deixar el bucle central intacte i empènyer la lògica específica de cada sector cap a capes que es recolzen a sobre. Això ha aguantat raonablement bé al llarg de cinc sectors. Encara no sé si aguantarà un sisè.
El que li diria a un altre equip fent el mateix: no donis per fet que l'abstracció que va funcionar per al teu primer pivot aguantarà gratis per al següent. El nivell correcte d'abstracció no és una propietat del model: és una aposta que has de continuar revisant cada vegada que afegeixes un sector genuïnament diferent dels que ja has gestionat.
