Ajuntaweb 2.0
La segunda generación de Ajuntaweb: mismo producto, reescrito desde cero con los 102 fallos de la primera versión delante y treinta y nueve criterios de diseño escritos antes de la primera línea de código.
Un ayuntamiento de quinientos habitantes no tiene departamento de informática. Quien mantiene el web es el secretario o el alcalde, sin formación técnica y entre otras veinte tareas. Cualquier gestor de contenidos genérico le pide que invente una estructura, y esa estructura no la va a inventar: va a dejar de actualizar el web.
Un gestor de contenidos de dominio, no genérico. El editor habitual nunca entra en el admin de Django ni decide taxonomías: abre «Avisos» y escribe un aviso. Se paga flexibilidad innecesaria a cambio de que el usuario no tenga que aprender nada, y se puede pagar porque el dominio es cerrado y lo fija la ley.
Un solo código y un despliegue por municipio: el código es compartido y los medios, los estáticos y la base de datos viven en el directorio del inquilino. Los módulos se declaran a sí mismos y el núcleo común no importa a ninguno.
- Un municipio es configuración, no un fork: la separación entre el directorio base y el del inquilino es lo que evita mantener veinte ramas.
- Los módulos se declaran a sí mismos y apps/common no importa ninguno: es la regla que elimina el ciclo de dependencias que tenía la 1.0.
- Releases inmutables con reversión atómica, y la comprobación de despliegue de Django como puerta obligatoria.
Lo que demuestra11
Tests en las veinte aplicaciones, más suites transversales de despliegue, documentación, i18n y plantillas.
- Documentar decisiones con su porqué, mientras se tomanDocumento · Verificable públicamente
- Diseñar multi-tenancyCódigo · Verificable públicamente
- Modularizar sin generar ciclos de dependenciaDecisión escrita · Verificable públicamente
- Desplegar de forma reversibleCódigo · Verificable públicamente
- Operar aplicaciones en la nubeDecisión escrita · Verificable públicamente
- Endurecer una aplicación web (CSP, cabeceras, comprobaciones de despliegue)Código · Verificable públicamente
- Acotar el alcance y argumentar el noDocumento · Verificable públicamente
- Construir interfaz renderizada en servidorDecisión escrita · Verificable públicamente
- Diseñar para quien no es técnico y no quiere aprenderDecisión escrita · Verificable públicamente
- Internacionalizar de verdad y verificarloDecisión escrita · Verificable públicamente
Principios que se ven aquí4
- PrincipioEl modelo de datos primero, la herramienta después
- CMS de dominio, no genérico: el editor abre «Avisos» y escribe un aviso. Sin taxonomías que inventarse
- PrincipioPrefiero lo que sobrevive diez años a lo que brilla seis meses
- ADR 024 versiones fijadas; ADR 021 solo SQLite; árbol sin librerías de terceros
- PrincipioUna decisión sin su porqué es una decisión que se va a repetir mal
- 33 ADRs numerados y 39 criterios de diseño escritos antes del código
- PrincipioEn producción, lo mínimo que resuelve el problema
- PWA descartada con argumento escrito, después de haberla implementado en otro proyecto donde sí tenía sentido