Tots els articles

Construint NaturPark: gestionar espais naturals amb software modular

Publicat 10 de maig del 20214 min de lectura
  • Producte
  • Enginyeria
  • Muntanya
Construint NaturPark: gestionar espais naturals amb software modular

Idees clau

  • Un aiguamoll costaner i un parc d'alta muntanya no necessiten el mateix software, per això NaturPark es va construir com a mòduls independents i activables per espai, no com un conjunt fix de funcions.
  • El producte té tres cares: un dashboard web per a gestors, una app mòbil per al personal de camp i un panell d'administració per configurar quins mòduls fa servir cada espai.
  • La modularitat va donar flexibilitat, però també complexitat real en permisos, modelatge de dades i testing que avui abordaríem d'una altra manera.

NaturPark és un dels productes que construïm a Maladeta Studio, juntament amb Lueira i MeteoTrail, i es troba a la intersecció de dues àrees que ens interessen: la mobilitat en espais naturals i la gestió de residus. L'eslògan amb què ens vam quedar ho diu sense embuts: gestiona els espais naturals d'una forma innovadora i segura. Però l'interessant de construir NaturPark no va ser l'eslògan, sinó adonar-nos ben aviat que "un espai natural" no és una sola cosa, i un software que fingeix el contrari es trenca tan bon punt arriba el segon client.

1. Un espai, un reglament — fins que deixa de ser-ho

La primera versió de la idea al meu cap era senzilla: construir una plataforma per gestionar espais naturals, llançar-la, iterar. Va bastar una conversa real amb un gestor de parc per veure el problema. Un aiguamoll costaner es preocupa per finestres d'accés segons la marea, restriccions en època de nidificació i trànsit d'embarcacions. Una reserva alpina es preocupa per l'estat dels senders, el risc d'allaus i tancaments estacionals que no tenen res a veure amb marees ni nius. Tots dos necessiten gestionar visitants. Cap dels dos necessita les regles de l'altre.

És un parany habitual en el software vertical: construeixes per al primer client, generalitzes una mica per al segon, i al tercer estàs mantenint una pila de condicionals i feature flags amagats que ja ningú entén del tot. No volíem arribar-hi per accident, així que vam intentar decidir a propòsit, des del principi, fins on es flexionaria la plataforma — i on traçar una línia dura i dir "això és el nucli, ho tenen tots".

2. Dissenyar per a la modularitat

No tots els espais són iguals i cadascun té les seves pròpies necessitats — aquesta és tota la premissa, i per això vam dissenyar la plataforma d'una forma modular i escalable en lloc d'un paquet fix de funcions. A la pràctica això va significar separar un nucli petit (perfil de l'espai, comptes de personal, dades bàsiques de visitants) d'un conjunt de mòduls independents que es poden activar o desactivar per espai: coses com el recompte de visitants, el reporte d'incidències, l'estat dels senders o les rutes de recollida de residus, segons el que aquell espai realment gestioni.

Els mòduls anteriors són il·lustratius, no una llista exhaustiva del que es va arribar a implementar — són el tipus de cosa que l'arquitectura estava pensada per suportar, donada la feina en mobilitat i gestió de residus que fem. El que importava més que cap mòdul concret era el mecanisme: la configuració d'un espai decideix què mostra el seu dashboard, què li demana l'app mòbil registrar al personal de camp, i quin model de dades es proveeix per sota.

{
  "space_id": "aiguestortes-01",
  "name": "Aigüestortes",
  "modules": {
    "visitor_counting": true,
    "incident_reporting": true,
    "trail_status": true,
    "waste_collection_routes": false,
    "boat_traffic_control": false
  }
}

El panell d'administració és on aquesta configuració s'edita de veritat — qui dona d'alta un espai nou tria els mòduls que necessita, i tota la resta, des del dashboard del gestor fins a la llista de tasques que veu un guarda al mòbil, s'adapta a aquesta elecció en lloc de mostrar menús morts que ningú ha demanat.

3. Les tres cares del producte

NaturPark no és una interfície, en són tres, cadascuna pensada per a un tipus d'usuari i un context d'ús diferent. El dashboard web és on l'equip de gestió d'un espai té una visió general. El panell d'administració és on es configuren mòduls i ajustos per a un espai concret, normalment per qui el dona d'alta o per nosaltres durant la posada en marxa. I després hi ha l'app de camp.

L'app de camp és la que ha de funcionar sense cap de les comoditats d'una feina d'oficina: cobertura intermitent, guants, reflexos del sol a la pantalla, algú que vol registrar una incidència i tornar a caminar pel sender, no omplir un formulari. Dissenyar-la va significar empènyer constantment la complexitat cap al dashboard i el panell d'administració, i mantenir la cara de camp tan a prop com fos possible de "tocar dues coses i seguir" que els mòduls activats per aquell espai permetessin.

4. Què faríem diferent

La modularitat es ven fàcil en una presentació i es viu més difícil en el codi. Activar un mòdul per espai sona a un checkbox, però toca permisos, modelatge de dades i testing. Ens vam recolzar en el fet que els mòduls són independents més del que m'agradaria admetre en la primera versió, i en general va aguantar — però aquest "en general" fa força feina a la frase.

Si comencés NaturPark avui, voldria definir els límits dels mòduls amb el mateix rigor que vam donar a l'eslògan, des del primer dia, en lloc de descobrir els límits reals conversa de client rere conversa de client. NaturPark encara funciona sobre aquesta mateixa idea: espais diferents, necessitats diferents, una sola plataforma a sota. Del que no estic tan segur, anys després, és de si "un mòdul per funció" era la granularitat correcta, o si la unitat real de variació era alguna cosa més gruixuda que vam dividir en mòduls sobretot perquè era més fàcil construir-los d'un en un.