Francisco Airam Hernández Crosa

Backend Developer

Desarrollador enfocado en Spring Boot. Apasionado por la optimización de rendimiento y la construcción de sistemas modulares y mantenibles.

Scroll

About me

Desarrollador backend enfocado en Spring Boot y código limpio y escalable. Actualmente colaboro como Coordinador Digital de Proyecto Dubini, una organización juvenil centrada en el cambio climático y la sostenibilidad, donde gestiono la plataforma digital y los problemas relacionados con TI.

Me apasiona el desarrollo backend, la optimización del rendimiento y la construcción de sistemas modulares y mantenibles. Siempre curioso, siempre aprendiendo.

Empecé a programar a los 13 años utilizando plugins-frameworks de Minecraft Java. Mediante el despliegue de servidores basados en la nube con un número significativo de usuarios simultáneos, aprendí conceptos importantes como la depuración de errores, la gestión de recursos y cómo administrar y mantener un servicio de forma profesional.

Para maximizar la entrega de valor, aplico metodologías de AI-Augmented Software Engineering (CDD). Entendiendo que la IA te amplifica a ti, tanto tu velocidad como tus errores y huecos de conocimiento, el pilar innegociable de mi flujo de trabajo es establecer la arquitectura y la base del código al 100%. Al garantizar un contexto inicial perfecto y sin fisuras, evito que la IA alucine o arrastre errores. A partir de ahí, orquesto agentes para escalar el desarrollo, respaldados por Quality Gates automatizados.

📍 La Laguna, Santa Cruz de Tenerife

99%
Mejora de rendimiento de tareas pesadas
-98%
Reducción de tiempo de despliege
-89.7%
Reducción de ancho de banda
-78%
Reducción de tiempo de carga en cold-start
100%
Autonomía en desarrollo

Experience

Becario - Desarrollador backend (Java)

Atlantis Technology · Formación Profesional Dual Enero 2026 - Actualidad Híbrido
  • Modernización de la capa de persistencia en arquitectura monolítica en proyecto gubernamental legacy
  • Implementación de Criteria API, Batch Fetching y caché distribuida/L2 para optimizar el throughput
  • Refactorización avanzada de JPA/Hibernate y resolución de problemas N+1
  • Reducción de la complejidad de consultas de O(N) a O(1), eliminando cuellos de botella en base de datos
  • Disminución del 98% en la latencia de endpoints críticos (2.2s → 35ms)

Coordinador Digital

Asociación Juvenil Proyecto dubini Septiembre 2025 - Actualidad
  • Gestiono la plataforma digital y los problemas relacionados con TI
  • Desarrollo y mantengo la infraestructura web de backend y frontend
  • Colaboro con equipos multidisciplinarios para implementar soluciones tecnológicas
  • Colaboro con centros educativos para la implementación de soluciones tecnológicas, como un museo virtual con sistema de reservas.

Características destacadas:

  • Plataforma de Blog: Desarrollo de una plataforma de blog end-to-end con Spring Boot, enfocada en eficiencia y sostenibilidad, desplegada en su propio dominio próximamente.

Desarrollador Fullstack en Prestashop Legacy - Formación Profesional Dual

Sagrera Canarias Abril 2025 - Junio 2025 La Laguna
  • Diseñé, desarrollé e implementé funcionalidades en producción con completa autonomía
  • Optimicé procesos críticos con CTEs, reduciendo +5000 queries SQL → 5
  • Mejoré el rendimiento de tareas pesadas (1h → 15s)
  • Implementé 20+ mejoras UX/UI aumentando usabilidad y rendimiento móvil
  • Colaboré con equipos no técnicos

Características destacadas:

  • Sistema de Reseñas: flujo de feedback post-compra con emails automáticos y tokens únicos
  • Programa de Socios: sistema de fidelización con registro cruzado tienda física/online
  • Recuperación de Carritos Abandonados: herramienta de backoffice con links personalizados

Projects

Plataforma de Blog (Proyecto Dubini)

Desarrollo end-to-end de una plataforma de publicaciones con arquitectura distribuida. El sistema cuenta con un proveedor frontend que sirve archivos estáticos y cachea los contenidos, y un Backoffice para edición y administración de contenido.

La comunicación entre servicios es asincrónica mediante WebFlux y está protegida con JWT.

Implementación de un sistema de caché inteligente con Caffeine (memoria + persistente en disco), circuit breaker e invalidación por evento. El servicio proveedor de frontend sirve contenido directamente desde caché y continúa operativo incluso si el servicio backoffice cae temporalmente.

Gracias a este caché de doble capa se redujo el consumo de ancho de banda una cantidad considerable, permitiendo operar dentro del plan gratuito del host sin comprometer la disponibilidad.

Despliegue automatizado mediante pipeline CI/CD, con compilación nativa de servicios, construcción de imágenes Docker optimizadas y despliegue en segundos, garantizando rapidez y eficiencia.

Incluye despliegue real en dominio propio, siguiendo buenas prácticas de arquitectura y DevOps.

Visita la web

Repositorio frontend provider // Repositorio backoffice

Java Spring Boot Spring Security WebFlux Spring Data JWT PostgreSQL Render Caching Microservicios Optimización Service Workers

Smart Economato API (Proyecto Final FP)

Plataforma de gestión de inventario predictiva para economatos educativos, con arquitectura de microservicios: backend transaccional en Spring Boot 4.0 / Java 25 (virtual threads, ZGC Generational, ScopedValue) y microservicio de forecasting en Python / FastAPI con Meta Prophet. Arquitectura hexagonal con CQRS: segregación lectura/escritura mediante PostgreSQL Primary + Replica con enrutamiento automático por AOP.

Lideré el desarrollo del equipo de 4 personas encargado del frontend en Angular, coordinando la implementación de funcionalidades clave y la integración con el backend.

Blockchain real para registro de stock inmutable, Merkle Trees con verificación O(log n) y encadenamiento HMAC-SHA256. Cada bloque agrupa transacciones del mempool, calcula su Merkle root y se sella en bloques encadenados (blockchain). Inmutabilidad reforzada con triggers PostgreSQL que impiden UPDATE/DELETE a nivel de base de datos. Analítica predictiva de consumo con Meta Prophet (forecasting a 14 días configurable) ejecutada en microservicio Python asíncrono, con Holt-Winters Triple Exponential Smoothing como fallback en Java.

Arquitectura event-driven con patrón Transactional Outbox y Kafka (modo KRaft) para entrega garantizada de eventos de auditoría. Caché multicapa (Redis + Caffeine) con degradación elegante y circuit breakers (Resilience4j) para PostgreSQL, Replica, Redis y Kafka, con alertas en tiempo real al frontend vía WebSocket.

Seguridad con JWT (HMAC SHA-256), blacklist con fallback Redis→DB, escalado temporal de roles y autorización a nivel de método. Generación de PDFs con iText 8, exportación Excel con Apache POI, internacionalización (i18n) y documentación interactiva con Swagger/OpenAPI y Scalar.

Observabilidad completa con Prometheus, Grafana y Micrometer. Dockerización de 10 servicios (PostgreSQL Primary/Replica, Redis, Kafka KRaft, Spring Boot, FastAPI Prophet, Prometheus, Grafana). Suite de 1000 tests: unitarios, integración con Testcontainers, concurrencia, resiliencia end-to-end y circuit breaker.

Repositorio aquí

Java 25 Spring Boot 4 Python / FastAPI Meta Prophet CQRS PostgreSQL (Primary/Replica) Redis Kafka (KRaft) Resilience4j JWT WebSocket Transactional Outbox iText 8 / Apache POI Prometheus / Grafana Swagger / Scalar Docker Testcontainers / JUnit 5 / Mockito MapStruct

Chat Seguro con Node.js

Proyecto de aprendizaje: plataforma de mensajería en tiempo real desarrollada con Node.js, con autenticación JWT, roles Admin/Usuario, hash de contraseñas con bcryptjs y rutas protegidas mediante middleware. Endpoints RESTful en Express.js y conexión a MySQL mediante connection pooling.

Comunicación en tiempo real con WebSockets usando Socket.io, con persistencia básica de mensajes y seguimiento del estado en línea. Se aplicaron buenas prácticas de seguridad como validación de entradas con express-validator y manejo de errores asincrónico.

Repositorio aquí

Node.js Express.js MySQL JWT Bcryptjs Crypto Socket.io Express-validator EJS Dotenv Nodemon

Optimizations & Architecture

AI-Augmented SDLC & Automated Quality Gates

Diseño de un flujo de trabajo (workflow) híbrido impulsado por Inteligencia Artificial. Dado que los LLMs son sistemas probabilísticos, no determinísticos; generan la salida estadísticamente más probable, no necesariamente la más robusta o correcta, mi metodología exige una estricta intervención humana (Human-in-the-Loop). Yo diseño la base y prevengo vulnerabilidades, la IA escala el código, y un proceso automatizado valida la calidad final.

El Flujo de Trabajo (Agentic Workflow)

  • Foundation & Context Engineering (Manual): Desarrollo minucioso del esqueleto del proyecto, configuraciones core, interfaces y arquitectura de dominio. Esta base libre de errores es el ancla determinística que guía a la IA y previene su desviación probabilística.
  • Delegación de Lógica Compleja: Uso de DevinAI integrado en el repositorio. El agente consume mi diseño para programar hasta el 90% del sistema, implementando no solo infraestructura básica, sino flujos de negocio avanzados (ej. el sistema de Ledger inmutable en Smart Economato).
  • Automated PR Review (AI Quality Gate): El único paso 100% automatizado. Un LLM-as-a-Judge evalúa cada Pull Request generada por los agentes. Previene anti-patrones de Spring Boot (ej. N+1) y audita que la IA haya cubierto los edge cases críticos, compensando su tendencia estocástica a programar solo el "happy path".

Stack Técnico

Agentic Workflows Context-Driven Development (CDD) LLM-as-a-Judge Prompt Engineering Avanzado

Arquitectura de Resiliencia Auto-Reparable

Sistema de tolerancia a fallos para un backend con 4 servicios de infraestructura (PostgreSQL Primary, PostgreSQL Replica, Redis, Kafka). Diseñado para que la aplicación siga operativa aunque uno o varios servicios caigan, con detección proactiva, degradación elegante y notificación en tiempo real al frontend.

Desafío Técnico

Un backend con CQRS (escritura en Primary, lecturas en Replica), caché distribuida en Redis y eventos de auditoría via Kafka tiene múltiples puntos de fallo. Un timeout de Redis o una caída de la réplica no deberían provocar errores 500 al usuario.

Arquitectura del Sistema

4 Circuit Breakers independientes (Resilience4j) monitorizan cada servicio. Un HealthChecker proactivo testea las conexiones cada 3-5 segundos y abre el circuit breaker antes de que una petición real falle. Al detectar caída o recuperación, se publica un Spring Event que un WebSocketNotificationService traduce a alertas STOMP al frontend.

  • CQRS con fallback automático: si la réplica cae, un AOP Aspect redirige las lecturas al Primary vía ScopedValue (Java 25), sin cambiar una línea de código de negocio.
  • Caché circuit-breaker-aware: un CircuitBreakerAwareCacheManager envuelve cada operación Redis. Con el CB abierto, toda operación de caché se convierte en cache-miss: la app sigue funcionando sin caché.
  • Outbox resiliente: el procesador de Kafka comprueba el estado del CB antes de cada batch. Si Kafka está caído, los eventos quedan en la tabla Outbox (PostgreSQL) hasta la recuperación, con Gauge de Prometheus para monitorizar el lag.
  • JWT Blacklist con failover: Redis → DB automático. Si Redis cae, la verificación de tokens revocados se hace contra PostgreSQL sin interrupción.

Flujo de Detección y Recuperación

1
Health Check Proactivo

Cada 3-5s se testean DB, Replica, Redis y Kafka. Si falla, se abre el Circuit Breaker inmediatamente.

2
Transición de Estado → Spring Event

Resilience4j emite un evento de transición (CLOSED→OPEN). Un listener lo traduce a CircuitBreakerOpenEvent.

3
WebSocket → Frontend

El servicio de notificaciones envía un código de alerta (DB_FAILURE, REDIS_FAILURE...) vía STOMP a /topic/alerts. Al reconectar, el frontend recibe el estado actual de todos los CBs.

4
Recuperación Automática

Cada 10-15s se testea la recuperación del servicio caído. Si responde, se cierra el CB y se envía *_RECOVERED al frontend.

Degradación por Servicio

  • Replica caída: lecturas redirigidas al Primary. Impacto: mayor carga en Primary, 0 errores visibles.
  • Redis caído: cache-miss universal, consultas van directo a DB. Blacklist JWT cae a PostgreSQL.
  • Kafka caído: eventos de auditoría acumulados en tabla Outbox. Se envían cuando Kafka vuelve (entrega garantizada).
  • Primary caído: operaciones de escritura fallan con error controlado. Lecturas siguen via Replica si está sana.

Stack Técnico

Resilience4j (4 CBs) WebSocket STOMP Spring AOP ScopedValue (Java 25) CQRS PostgreSQL Primary/Replica Redis + Caffeine Kafka (Transactional Outbox) Prometheus / Micrometer

Cobertura de Testing

  • Tests de integración que abren cada CB y verifican que se envía la alerta WebSocket correcta (DB_FAILURE, REDIS_RECOVERED, etc.).
  • Test end-to-end de resiliencia: confirma que @Cacheable no lanza excepción con Redis CB abierto.
  • Test de failover JWT: verifica que con Redis caído la blacklist cae a PostgreSQL sin interrupción.
  • Test de notificación a nueva conexión WebSocket: usuario que conecta recibe el estado actual de CBs abiertos.

Conclusión

Arquitectura diseñada para zero-downtime parcial: cualquier servicio auxiliar puede caer sin producir errores al usuario. La detección proactiva (health checks cada 3s) reduce el tiempo medio de detección frente al enfoque reactivo tradicional, y el WebSocket permite al frontend mostrar banners informativos en vez de errores genéricos.

Sistema de caché Inteligente

Sistema de caché multicapa diseñado para minimizar peticiones al backend, reducir ancho de banda y mantener la experiencia del usuario durante caídas o mantenimiento del backoffice. Pensado para Proyecto Dubini (Asociación medioambiental juvenil): menor tráfico → menor consumo energético.

Arquitectura del Sistema

Doble capa de caché: Caffeine en memoria para acceso inmediato y una caché persistente en disco como respaldo. El frontend provider precarga contenido crítico al arranque para operar de forma autónoma si el backoffice no está disponible.

  • Arranque inteligente: precarga inicial de noticias en memoria desde el backoffice.
  • Circuit Breaker: evita bloqueos y activa fallbacks.
  • Reintentos automáticos: para asegurar consistencia eventual tras fallos.

Flujo de Resolución de Datos

1
Caché en Memoria

Primera consulta a Caffeine para acceso inmediato.

2
Backoffice (si necesario)

Solicitud al backoffice y almacenamiento en caché cuando no existe el dato en memoria.

3
Caché Persistente

Fallback desde disco si la memoria y el backoffice no responden.

Verificación Ligera con ETag (200 bytes)

El endpoint api/news/last compara ETags precalculadas para indicar si hay cambios. Respuestas mínimas: 304 Not Modified (sin transferencia) o 200 OK si hay contenido nuevo. Las ETags se almacenan localmente para evitar latencia de cálculo.

Capa de caché del Navegador

Service Worker que cachea recursos estáticos (HTML, CSS, JS) y datos esenciales, habilitando funcionamiento offline y reduciendo peticiones repetidas.

Caso de Uso: 30k usuarios × 10 visitas

El sistema reduce drásticamente el consumo de ancho de banda gracias a que el contenido se sirve casi siempre desde caché. El cálculo es el siguiente:

Peso primera carga: 60 KB.
Peso cargas posteriores: 200 B.

Para 30 000 usuarios, cada uno realizando 10 visitas:

  • Primera visita: 30 000 × 60 KB = 1 800 000 KB ≈ 1.8 GB
  • Visitas restantes (9 × 200 B): 30 000 × 9 × 200 B = 54 000 000 B ≈ 51.5 MB

Consumo total ≈ 1.85 GB.

En un sistema sin caché inteligente, cada visita costaría 60 KB:

  • 30 000 × 10 × 60 KB = 18 000 000 KB ≈ 18 GB

Reducción: 18 GB → 1.85 GB (≈ −89.7%).

Esto justifica matemáticamente la mejora reportada en las métricas.

Stack Técnico

Spring WebFlux (reactivo) Caffeine Cache Circuit Breaker ETag Service Workers Persistencia en Disco

Resultados y Métricas

−89.7%
Reducción de ancho de banda
En el caso de uso de 30k usuarios
−99.99%
Comunicaciones
Backoffice↔Frontend Provider
Canal libre para admin y métricas
100-150ms
Tiempo de carga web
Primera carga optimizada
−99%
Peso requests posteriores
60 KB → 500 B
<30ms
Carga desde caché
Respuesta prácticamente instantánea

Conclusión

Arquitectura diseñada para desacoplamiento y eficiencia: el frontend puede funcionar con contenido cargado previamente y el frontend provider opera independientemente del backoffice. Prioriza resiliencia, simplicidad y reducción de huella energética.

Optimización de Deploy y Cold-Start

Mejoré significativamente los tiempos de despliegue y arranque en frío de un servicio Spring Boot mediante técnicas avanzadas de compilación nativa y automatización de pipelines.

Desafío Técnico

Inicialmente, el proyecto tenía tiempos de deploy de 5 minutos y cold-start de 1,5 minutos, causando errores por timeout y una experiencia de despliegue poco eficiente.

Solución Implementada

  • Compilación Nativa con GraalVM: Redujo el tiempo de inicio a milisegundos, optimizando el servicio para producción.
  • Compatibilidad Spring Boot: Identifiqué y resolví conflictos con Hibernate/ByteBuddy y procesamiento de imágenes, delegando tareas al frontend cuando era necesario.
  • Pipeline CI/CD: Construcción y despliegue automático mediante GitHub Actions, creando imágenes Docker optimizadas y publicándolas en Docker Hub.

Resultados y Métricas

−98%
Tiempo de Deploy
5 min → 5 s
−78%
Cold-Start
1,5 min → 20 s

Stack Técnico

Spring Boot Native GraalVM Docker GitHub Actions CI/CD

Referencias

Workflow de CI/CD: GitHub Actions .

Imagen Docker optimizada: Docker Hub .

Dockerfile utilizado: Dockerfile.native-simple .

(Este es uno de los servicios optimizados; ambos tienen configuraciones idénticas.)

Conclusión

La combinación de compilación nativa, ajustes de compatibilidad y pipeline automatizado permitió despliegues en segundos y cold-starts prácticamente instantáneos. Esta optimización demuestra capacidad para diseñar soluciones que integran rendimiento, DevOps y arquitectura de servicios de manera eficiente.

Skills & Technologies

Tecnologías

  • Java (Spring Boot, Data, Security & Cloud)
  • TypeScript (Angular)
  • JavaScript (Node.js, Express.js)
  • PHP (Prestashop modules)
  • HTML5 & CSS3
  • MySQL, PostgreSQL & MongoDB
  • Redis
  • Kafka
  • Git & GitHub
  • Docker
  • Prometheus & Grafana
  • OpenAPI/Swagger
  • JUnit 5, Mockito & Testcontainers

Habilidades Personales

  • Autonomía / Proactividad
  • Curiosidad y aprendizaje continuo
  • Comunicación técnica
  • Organización y planificación
  • Adaptabilidad
  • Trabajo en equipo
  • Resolución de problemas

Educación e Idiomas

  • Desarrollo de Aplicaciones Web (DAW)
    IES Domingo Pérez Minik (2024-2026)
  • Bachillerato Científico-tecnológico IES San Benito (2022-2024)
  • Español - Nativo
  • Inglés - Certificación B2

Let's Connect!

No dudes en contactarme a través de mis redes sociales.