Dirijo cómo se construye, se revisa y se entrega una plataforma Moodle™ crítica.
Lidero la evolución técnica desde la arquitectura hasta el código. Convierto las necesidades funcionales en decisiones ejecutables, ordeno el trabajo y reviso el desarrollo, las integraciones, los despliegues y la operación con un criterio técnico común. Creo las condiciones para que el equipo entregue y mantenga la plataforma por su cuenta.
Lo que distingue a un equipo que avanza de otro que solo entrega.
Cuatro diferencias que he encontrado tanto en equipos internos como en equipos de proveedores.
El código funciona y aun así está mal
Una revisión que solo comprueba que la funcionalidad responde deja fuera lo esencial: qué interfaces del núcleo utiliza, cómo se comporta bajo carga, si sobrevive a una actualización y qué ocurre al restaurar una copia.
El proveedor decide la arquitectura tarea a tarea
Cuando nadie del lado de la organización puede juzgar si lo entregado encaja en la plataforma completa, la arquitectura acaba siendo la suma de decisiones locales que nadie tomó a propósito.
Todo es prioritario porque nada está clasificado
Cuando incidencias, deuda técnica, mejora funcional y cambio estructural comparten una misma lista, lo estructural queda siempre pospuesto frente a lo urgente.
El criterio que no se transfiere se pierde
Si la plataforma funciona porque una sola persona conoce su funcionamiento, falta liderazgo técnico. El trabajo consiste en repartir ese criterio mediante revisiones explicadas, automatización y decisiones documentadas.
Dónde se concentra la complejidad
Cuándo se nota que falta liderazgo técnico.
No suele nombrarse así. Se presenta como despliegues que dan miedo, actualizaciones bloqueadas o una propuesta de proveedor que el equipo no puede valorar.
01
Hay desarrolladores, pero no hay dirección común
Cada uno resuelve su tarea de forma razonable y aparecen patrones distintos, dependencias duplicadas y decisiones incompatibles entre sí.
02
Cada despliegue produce incertidumbre
No hay una definición de terminado, ni pruebas suficientes, ni trazabilidad entre cambios, ni forma de volver atrás, ni nada que observar después.
03
Actualizar Moodle bloquea al equipo durante meses
El desarrollo diario no se gobernó pensando en las interfaces públicas ni en la evolución de versión, y ahora la actualización es una reconstrucción parcial.
04
Los incidentes se resuelven y vuelven
Se corrige la consecuencia inmediata sin análisis de causa, sin acción preventiva y sin cambiar el criterio de desarrollo que lo permitió.
05
Hay que juzgar la propuesta de un proveedor
Llega una estimación, una arquitectura o un desarrollo terminado y hace falta alguien capaz de revisarlo con criterio técnico y traducir el riesgo a coste y plazo.
06
La plataforma depende de una persona
Funciona mientras esa persona esté disponible. Nadie más conoce las decisiones, los atajos ni los sitios donde no hay que tocar.
Responsabilidades
De qué me ocupo cuando lidero técnicamente una plataforma Moodle.
Ocho responsabilidades. Ninguna consiste en programarlo todo yo, y ninguna consiste en repartir tareas y esperar.
Convertir necesidades en decisiones técnicas
Con producto, formación y operación, separar qué se configura, qué necesita desarrollo, qué corresponde a una integración, qué debe resolverse fuera de Moodle y qué no merece construirse. Descartar con argumentos lo que no merece construirse suele evitar una parte importante del coste y del mantenimiento futuros.
Configurar o desarrollar
Dentro o fuera del LMS
Criterios de aceptación
Lo que no se construye
Mantener la coherencia de la arquitectura
Que lo que se construye respete las interfaces públicas del núcleo, el modelo de extensiones, los contratos de integración, los límites entre sistemas, el modelo de datos y la compatibilidad con las actualizaciones. Una arquitectura se mantiene si alguien la aplica en cada revisión.
Interfaces públicas del núcleo
Modelo de extensiones
Límites entre sistemas
Compatibilidad futura
Dirigir la calidad de ingeniería
Revisión de código, análisis estático, estándares de la plataforma, pruebas unitarias y funcionales, pruebas de integración, seguridad, rendimiento, accesibilidad y comportamiento ante copia y restauración. Los criterios de calidad se acuerdan antes de escribir el código.
Revisión con reglas explícitas
Análisis estático
Pruebas unitarias y funcionales
Seguridad y rendimiento
Ordenar la entrega
Trabajo técnico pendiente, dependencias, riesgos, definición de preparado y de terminado, versionado, estrategia de ramas, integración continua, entornos, despliegue, vuelta atrás y estabilización. El objetivo es que desplegar deje de ser un acontecimiento excepcional.
Definición de terminado
Estrategia de ramas
Integración y despliegue continuos
Vuelta atrás
Liderar las integraciones
Contratos versionados, quién responde de cada dato, gestión de errores, reintentos, idempotencia, reconciliación, auditoría y observabilidad. Es el origen de buena parte de los incidentes y la capa que menos se revisa hasta que aparece uno.
Contratos versionados
Idempotencia
Reconciliación
Registro de operaciones
Acompañar al equipo
Revisiones explicadas en vez de correcciones secas, programar juntos cuando hace falta, decisiones escritas, mentoría y reparto del conocimiento. Mido el resultado por lo que el equipo puede resolver de forma autónoma.
Revisiones explicadas
Decisiones escritas
Mentoría
Menos dependencia individual
Coordinar con dirección y con proveedores
Traducir riesgo técnico a coste, plazo y consecuencia operativa. Validar estimaciones, revisar propuestas, fijar criterios de aceptación y escalar lo que está bloqueado antes de que sea tarde.
Riesgo traducido a coste
Validación de estimaciones
Revisión de propuestas
Criterios de aceptación
Separar la deuda técnica del resto del trabajo
Incidencias, deuda acumulada, mejora funcional y cambio estructural compiten en la misma lista, y lo urgente desplaza siempre a lo estructural. Separarlos, ponerles consecuencia y defender un hueco fijo para lo estructural es lo que evita que dentro de tres años la plataforma vuelva a estar bloqueada.
Deuda con consecuencia asociada
Hueco fijo por entrega
Riesgo frente a urgencia
Qué se retira
Responsabilidades concretas
De lo que respondo cuando lidero técnicamente.
De que exista un criterio común y aplicado, de que lo entregado se pueda mantener y de que el conocimiento deje de vivir en una sola cabeza. No de escribir yo todo el código.
01
Que exista una dirección técnica y se note
Un criterio común, conocido y aplicado, en lugar de tantas arquitecturas implícitas como personas haya en el equipo.
02
Que lo entregado se pueda mantener
Reviso pensando en quien mantendrá el código dentro de dos años y en la actualización de versión que llegará, no solo en que la demostración funcione.
03
Que desplegar sea aburrido
Pruebas, trazabilidad, vuelta atrás y observación posterior. La desconfianza ante un despliegue señala una carencia concreta que se puede corregir.
04
Que los incidentes enseñen algo
Causa, acción preventiva y cambio en el criterio de desarrollo. Cuando el mismo incidente se repite, reviso si el análisis identificó la causa correcta, si las acciones se ejecutaron y si los controles resultaron eficaces.
05
Que el criterio se quede en el equipo
Documento las decisiones y explico las revisiones para que el conocimiento no dependa de mi disponibilidad.
Casos de uso
Casos de código y entrega
Lo que encontré revisando extensiones propias y de terceros, y qué cambió al gobernarlas como un conjunto.
Caso
Cuarenta extensiones repetían los mismos fallos porque nadie gobernaba sus puntos de integración
En una plataforma con alrededor de 40 extensiones propias mantenidas por equipos y proveedores distintos, cada entrega podía introducir regresiones y cada actualización de Moodle abría un ciclo largo de revisión. El inventario interno mostraba ciclos de regresión prolongados, incidencias atribuibles a las extensiones y componentes sin un responsable claro. Parecía un problema de calidad de determinados desarrolladores, y lo descarté porque los fallos reaparecían en los mismos puntos de integración con independencia del equipo. La causa era la ausencia de estándares de extensión, propiedad definida, matriz de compatibilidad, pruebas comunes y presupuestos de rendimiento. Implanté un ciclo de vida para las extensiones, componentes compartidos, integración continua con pruebas de compatibilidad, análisis de rendimiento y criterios de retirada. Tras implantar el ciclo común se redujeron tanto el tiempo de regresión como las incidencias atribuibles a las extensiones; no publico aquí la serie, el volumen de entregas y el criterio de clasificación necesarios para cuantificar esa comparación.
Caso
La memoria crecía con cada registro porque el proceso conservaba referencias a objetos ya utilizados
En una plataforma corporativa, las sincronizaciones nocturnas con el ERP fallaban por agotamiento de memoria alrededor del 40 % del catálogo procesado. Medí el pico de memoria, el comportamiento del recolector de basura de PHP y la asignación de objetos durante la ejecución. Parecía que el límite de memoria del entorno de línea de comandos era demasiado bajo, y lo descarté porque el consumo crecía de forma lineal con cada registro y la memoria de los bloques terminados nunca se liberaba. La causa era una fuga en plugins de sincronización de terceros: el código mantenía referencias circulares a objetos globales de Moodle dentro del bucle masivo. Perfilé la ejecución hasta localizar la función responsable, reescribí el proceso para trabajar en lotes pequeños y liberé explícitamente los objetos entre ellos. También sustituí la carga completa de resultados por un cursor, que los recorría fila a fila. La tarea pasó de fallar con más de 4 GB a ejecutarse de forma estable por debajo de 128 MB y en la mitad de tiempo.
Cómo trabajo
Cómo ordeno el trabajo técnico de un equipo.
Entiendo el punto de partida antes de proponer reglas, porque el equipo solo puede aplicar criterios ajustados a su capacidad y a sus restricciones.
01
Entender el objetivo y las restricciones
Qué tiene que conseguir la organización, con qué equipo, en qué plazo y con qué no se puede contar.
02
Levantar arquitectura, código, integraciones y operación
Reviso la arquitectura, el código, las integraciones y la operación para ajustar las reglas a la capacidad y las restricciones reales del equipo.
03
Hacer explícitas las decisiones técnicas
Lo que solo conocían tres personas queda documentado, con la alternativa descartada y su motivo.
04
Convertirlas en reglas que se puedan comprobar
Una regla que no se puede verificar en una revisión o en la integración continua se queda en recomendación, y las recomendaciones acaban ignorándose.
05
Automatizar lo repetible y observar lo desplegado
Automatizo las comprobaciones repetibles para reservar la revisión humana a los fallos, las excepciones y las decisiones que exigen criterio. El equipo mantiene las reglas y sus umbrales, y observa lo desplegado en lugar de darlo por bueno.
06
Transferir el criterio, no repartir tareas
El trabajo termina cuando el equipo toma por su cuenta las decisiones que al principio tomaba yo.
En el blog documento las reglas con las que reviso.
Análisis sobre calidad de extensiones, pruebas, despliegue, revisión de proveedores y evolución de plataformas, con las fuentes y los límites de cada afirmación.