Construyo plataformas educativas desde la interfaz hasta los datos y la operación.

He construido aplicaciones, servicios, procesos e integraciones desde la interfaz hasta los datos y la operación. Esa experiencia me permite decidir la arquitectura conociendo sus consecuencias en cada una de esas capas.

Criterio profesional

Que una persona lo construya entero no significa que se pueda construir de cualquier manera.

Trabajar de un extremo al otro da una ventaja: se ve el efecto de cada decisión en el lado contrario. También da la tentación de saltarse los límites, y ahí es donde hay que tener disciplina.

Los límites se respetan aunque no haya nadie enfrente

Cuando el mismo desarrollador hace la interfaz y el servicio, es fácil colar lógica de negocio en la pantalla porque va más rápido. Va más rápido hoy y lo paga el siguiente que necesite esa regla en otro sitio.

El modelo de datos suele ser la decisión más cara de revertir

La interfaz y el servicio pueden sustituirse sin migrar todo el histórico, aunque el esfuerzo depende de su alcance y de los contratos existentes. Cambiar el modelo de datos suele exigir migraciones, compatibilidad, reconciliación y validación sobre información acumulada; por eso acostumbra a ser la decisión menos reversible. El plazo solo puede estimarse después de medir esos factores.

Lo que se ve también se prueba

El frontal acumula la lógica que nadie prueba porque «se ve enseguida si falla». Se ve enseguida el día que se mira, no el día que se rompe.

Elegir la herramienta que el equipo puede mantener

La tecnología más adecuada sobre el papel es la peor decisión si el equipo que se queda no la conoce y no hay presupuesto para que la aprenda.

Dónde se concentra la complejidad

Casi siempre aparece lo mismo: un proceso importante que no vive en ningún sistema.

Se gestiona entre correos y hojas de cálculo, o entre dos aplicaciones que no se hablan, o dentro de algo heredado que ya nadie toca. Funciona hasta que crece el volumen o se marcha quien lo llevaba.

01

La plataforma no llega y la hoja de cálculo tampoco

Un proceso se gestiona a mano entre correos y ficheros compartidos porque ningún sistema lo cubre. Funciona hasta que crece el volumen o se va la persona que lo llevaba.

02

Dos sistemas tienen que entenderse

Cada uno guarda una parte de la verdad y no se ha definido cuál manda sobre cada dato. Las discrepancias aparecen en el peor momento.

03

Hay que sacar los datos de donde están

La información existe pero vive dentro de una aplicación que no la deja salir de forma consultable, así que nadie puede analizarla.

04

El proyecto necesita a alguien que cubra todo

No hay equipo para separar frontal, servicio, datos y despliegue, y hace falta alguien que responda del conjunto sin dejar huecos entre capas.

05

La aplicación heredada ya no se puede tocar

Funciona, pero cualquier cambio rompe otra cosa. Hay que decidir si se estabiliza, se reescribe por partes o se sustituye.

06

Una prueba de concepto tiene que llegar a producción

Lo que se hizo para demostrar una idea ahora debe funcionar en producción, con seguridad, errores controlados y alguien que lo opere.

Qué miro y qué queda por escrito

Qué construyo fuera de la plataforma de aprendizaje.

Cuando la necesidad no cabe dentro del LMS, o no debe estar dentro, esto es lo que se acaba construyendo.

Aplicaciones de gestión a medida

Herramientas internas para procesos que ningún producto cubre: seguimiento, coordinación, revisión, aprobación. Con sus roles, sus estados y su registro de quién hizo qué.

  • Interfaz de gestión
  • Roles y permisos
  • Estados y flujos
  • Registro de actividad
  • Informes propios

Servicios y API entre sistemas

Servicios con contrato explícito, versión declarada y comportamiento definido cuando el otro extremo falla o tarda. Con autenticación y límites de uso donde hacen falta.

  • Contrato versionado
  • Autenticación
  • Reintentos y límites
  • Comportamiento ante fallo
  • Documentación de uso

Procesos automáticos y trabajos en cola

Lo que debe ocurrir sin que nadie lo lance: sincronizaciones, cálculos, envíos, cierres. Con estado visible, reintentos y capacidad para reanudar la ejecución desde el punto en que se interrumpió.

  • Ejecución programada
  • Colas y reintentos
  • Estado visible
  • Reanudación
  • Avisos ante fallo

Modelos de datos y extracciones

Estructuras pensadas para preguntar, no solo para guardar, con extracciones periódicas hacia donde se analiza y trazabilidad hasta el registro de origen.

  • Modelo consultable
  • Extracción periódica
  • Histórico y versiones
  • Trazabilidad
  • Calidad del dato

Interfaces de uso diario

Pantallas que usa gente que no eligió usarlas, así que tienen que ser rápidas, entendibles y accesibles. Con los estados de carga, error y vacío resueltos, que es donde se nota el oficio.

  • Accesibilidad
  • Estados de carga y error
  • Rendimiento percibido
  • Uso con teclado
  • Diseño coherente

Recuperación de aplicaciones heredadas

Entender qué hace algo que ya nadie toca, cubrirlo con pruebas antes de cambiarlo y sustituirlo por partes sin parar el servicio que presta.

  • Comprensión del código
  • Pruebas antes de tocar
  • Sustitución por partes
  • Con el menor impacto sobre el servicio

Responsabilidades concretas

Respondo del sistema entero, incluidos los huecos entre capas.

La interfaz, el servicio, el modelo de datos y el despliegue. Los fallos más difíciles de resolver no viven dentro de una capa: viven en el espacio que queda entre dos, donde nadie se siente responsable.

01

Diseñar el sistema completo

Qué hace el frontal, qué el servicio, qué la base de datos y qué queda fuera. Los fallos cuya responsabilidad queda sin asignar se cuelan en los huecos entre capas.

02

Construir los dos lados

Interfaz utilizable y accesible por delante, servicios y procesos por detrás, con la misma exigencia de calidad en ambas capas, algo que no siempre ocurre.

03

Modelar los datos para consultarlos

Pensar el modelo desde el principio para que alguien pueda hacerle preguntas después, en lugar de descubrir a los dos años que la información está pero no se puede extraer.

04

Definir los contratos con otros sistemas

Qué se expone, con qué versión, qué ocurre cuando el otro extremo no responde y quién se entera. Una integración sin contrato es una avería aplazada.

05

Llevarlo a producción y dejarlo operable

Despliegue repetible, errores que se ven, capacidad de volver atrás y suficiente información para diagnosticar sin adivinar.

06

Dejar el relevo preparado

Documentación, pruebas y decisiones explicadas para que el equipo que se queda pueda seguir sin depender de quien lo escribió.

Cómo trabajo

Del problema real a algo puesto en producción que el equipo puede operar sin mí.

Empiezo por lo que más riesgo tiene, porque dejar lo incierto para el final es la manera habitual de descubrir tarde que el diseño no servía.

  1. 01

    Entender el proceso, no la petición

    Lo que se pide suele ser una solución ya imaginada. Vuelvo al problema antes de aceptar la forma en que llega.

  2. 02

    Decidir los límites

    Qué hace cada capa, qué guarda cada sistema y por dónde se hablan. Antes de escribir código.

  3. 03

    Empezar por lo que entraña más riesgo

    Primero lo que puede invalidar el diseño. Dejar lo incierto para el final es la forma habitual de descubrir tarde que no funcionaba.

  4. 04

    Probar donde duele

    Las reglas de negocio y los recorridos completos, no solo las funciones fáciles de probar. Y comprobar que las pruebas fallan cuando deben.

  5. 05

    Poner en producción y quedarse

    El trabajo no termina con la entrega, sino cuando el sistema funciona con personas que lo usan y el equipo puede operarlo sin mí.

Experiencia y trabajo propio

Más de 22 años programando en los dos lados, eligiendo la herramienta por el problema y por quién la mantendrá.

Ver trayectoria y perfil
  • Más de veinte años programando, con PHP, Python, Node y JavaScript como herramientas habituales según el problema.
  • Trabajo en los dos lados: interfaces que usa gente cada día y servicios, procesos y modelos de datos por detrás.
  • Aplicaciones propias con colas de trabajo, eventos, trazas y pruebas, diseñadas para recuperar el estado y reanudar la ejecución después de un fallo.
  • Integraciones con sistemas de gestión comercial, de personal, de pago y de catálogo, con contratos explícitos entre ellos.
  • Puesta en producción en infraestructura de nube con entrega continua, observabilidad y capacidad de revertir.

Blog

En el blog escribo sobre construir y mantener software que dura.

Sobre cuándo conviene una aplicación propia y cuándo no, cómo se define un contrato entre sistemas que aguante el cambio, y qué hacer con el código heredado que funciona pero que nadie se atreve a tocar.

Ir a blog.albertolarah.com

Hablamos

Si tienes un proceso que no vive en ningún sistema, hablamos

Los procesos que se sostienen con hojas de cálculo y correos son los que más cuesta llevar a un sistema, y los que más se agradecen cuando se hace. Si tienes uno así, escríbeme.