Gabriel Sánchez Micó

Retrato de Gabriel Sánchez Micó sonriendo, con gorro y sudadera naranjas

Software EngineerJava Backend · Spring · Oracle · Legacy Modernization

Más de cinco años modernizando y manteniendo aplicaciones Java críticas en producción. Diagnostico incidencias complejas, diseño el cambio mínimo necesario y evoluciono sistemas legacy sin comprometer su estabilidad.

Sobre mí

Software Engineer especializado en backend Java, mantenimiento evolutivo y modernización de aplicaciones empresariales, con más de cinco años trabajando sobre sistemas en producción dentro del ecosistema Java.

Mi trabajo se centra en comprender aplicaciones existentes, localizar incidencias con precisión, desarrollar nuevas funcionalidades y modernizar progresivamente sistemas legacy sin comprometer su estabilidad.

He trabajado con Java, Spring Framework, Spring Security, Hibernate/JPA, Oracle, Maven y Tomcat, además de tecnologías complementarias de frontend e integración.

Priorizo soluciones mantenibles sobre soluciones vistosas: reutilizo la arquitectura existente antes de introducir nuevas abstracciones y evito complejidad que no resuelve un problema real.

Experiencia

  1. Junio de 2023 – actualidad

    En remoto

    Nunegal ConsultingPuesto actual

    Software Engineer

    Evolución y mantenimiento del backend Java de aplicaciones de gestión y trazabilidad. Lideré la migración de Java 8/Tomcat 8 a Java 11/Tomcat 9, mejorando el rendimiento. Diseñé mecanismos de seguridad con Spring Security, auditoría con Hibernate Envers y generación documental desacoplada del dominio. Implementé la integración con servicios blockchain mediante smart contracts y colaboré con equipos NestJS/Angular.

    • Java 11
    • Spring Framework 5
    • Spring Security
    • Hibernate
    • JPA
    • Oracle
    • Maven
    • Tomcat 9
    • JUnit
    • Mockito
    • Git/GitLab
  2. Mayo de 2022 – junio de 2023

    En remoto

    Bilbomática, an Altia Company

    Software Engineer

    Evolución y mantenimiento de aplicaciones Java empresariales, integrándolas con otros sistemas. Participé en la migración de una web WordPress a Magnolia CMS. Asumí en solitario el mantenimiento y la evolución de una aplicación legacy en Java 6.

    • Java 8
    • Java 6
    • Spring 4
    • Magnolia CMS
    • WordPress
  3. Julio de 2021 – mayo de 2022

    Madrid, España

    Capgemini

    Software Engineer

    Mantenimiento correctivo y evolutivo de aplicaciones empresariales: investigación de incidencias, desarrollo de nuevas funcionalidades con Java 8/Spring 4 y JavaScript (jQuery), y resolución de problemas de integración entre sistemas.

    • Java 8
    • Spring 4
    • Oracle
    • SQL
    • JavaScript
    • jQuery
  4. Marzo de 2021 – mayo de 2021

    Valencia, España

    Health in Code

    Software Engineer

    Desarrollo de dos aplicaciones para el procesamiento y la escritura de archivos derivados de la secuenciación de ADN, con cliente web en Angular 11 para lectura y visualización de datos en tiempo real.

    • Java 8
    • Spring 4
    • Angular 11

Formación

2019 – 2021

Técnico Superior en Desarrollo de Aplicaciones Multiplataforma

Progresa Centro de Formación Profesional CIEEP

Especialización

Java Backend
Diseño y mantenimiento de servicios, controladores y repositorios con Java y Spring.
Modernización legacy
Migraciones progresivas (Java 6 → 8 → 11, Tomcat 8 → 9) preservando compatibilidad.
Debugging
Investigación de incidencias complejas hasta localizar la causa raíz.
Refactoring
Mejora de mantenibilidad y separación de responsabilidades cuando hay una razón técnica clara.
SQL / Oracle
Consultas, filtros complejos, agregaciones y optimización sobre Oracle.
Integración de sistemas
Integración entre aplicaciones Java y servicios externos, incluidos blockchain y smart contracts.
Seguridad de aplicaciones
Spring Security: autenticación, autorización y filtros de validación de peticiones.
Testing
Tests unitarios con JUnit y Mockito orientados a la calidad del código.

Logros

Hitos representativos de mi trayectoria.

  • Diseño de procesos periódicos, decidiendo entre tareas programadas simples o Spring Batch según el volumen de datos a procesar.
  • Mejora de la seguridad en la subida de ficheros mediante validación del contenido real por firma binaria, no solo por extensión.
  • Diseño de generación documental desacoplada del dominio, con soporte para documentos multipágina y colecciones variables de información.
  • Migración del flujo de trabajo de control de versiones desde SVN hacia Git/GitLab, adoptando ramas, releases y tags.
  • Mantenimiento simultáneo de aplicaciones sobre cuatro generaciones tecnológicas (Java 6/8/11, Spring 4/5, Tomcat 8/9) sin perder estabilidad.
  • Optimización de consultas SQL sobre Oracle para análisis de grandes volúmenes de información y consultas temporales.

Cómo trabajo

Cuando recibo una funcionalidad o una incidencia, intento no empezar directamente a escribir código.

CompletadoPipeline · como-trabajo.ymlSe lanza con cada incidencia o funcionalidad nueva
  1. stage 01

    Entender

    Entender el problema real y qué partes del sistema están implicadas antes de tocar código.

    • Entender el problema real
    • Localizar qué partes del sistema están implicadas
    • Revisar cómo resuelve el proyecto problemas similares
    • Identificar qué contratos deben conservarse
  2. stage 02

    Resolver

    Diseñar el cambio mínimo necesario, reutilizando lo existente y separando responsabilidades cuando aporta valor.

    • Valorar si existe código reutilizable
    • Diseñar la modificación mínima necesaria
    • Separar responsabilidades cuando el cambio lo justifica
    • Implementar
  3. stage 03

    Mejorar

    Probar el comportamiento normal y los casos límite, y mejorar solo lo que realmente lo necesita.

    • Probar comportamiento normal y casos límite
    • Revisar si la solución introduce complejidad innecesaria
  4. stage 04

    Desplegar

    El cambio llega a producción sin comprometer la estabilidad del sistema.

    • Estable en producción

De lo que me siento orgulloso

Entender antes de cambiar

Software que ya existe

Sé trabajar con software que ya existe: entender aplicaciones escritas por otras personas, localizar el origen de un problema y cambiar solo lo que realmente lo necesita.

  • Responsabilidad individual sobre el mantenimiento de una aplicación Java 6.
  • Liderazgo de la migración de Java 8 a Java 11 y de Tomcat 8 a Tomcat 9.
  • Continuidad operativa de aplicaciones legacy en producción sin comprometer su estabilidad.
  • Diseño de mecanismos de auditoría, trazabilidad y seguridad con Spring Security.
  • Integración de aplicaciones Java con blockchain y smart contracts.

Retos que busco

Me resultan especialmente interesantes problemas del tipo:

  • Esto funciona casi siempre, pero falla en determinadas situaciones
  • Tenemos un sistema antiguo y necesitamos añadir esta funcionalidad sin romper lo existente
  • Esta parte del código se ha vuelto difícil de mantener
  • No sabemos exactamente dónde se origina esta incidencia
  • Esta consulta funciona, pero empieza a tener problemas cuando aumenta el volumen de información
  • Necesitamos modernizar esta aplicación, pero no podemos reescribirla desde cero
  • Necesitamos integrar este sistema con otro sin acoplarlos por completo

Qué sigue

Áreas en las que sigo creciendo activamente:

Java moderno
Profundizar en versiones modernas del lenguaje tras trabajar con Java 6, 8 y 11.
Arquitectura
Decisiones arquitectónicas en sistemas grandes: monolitos modulares frente a servicios independientes.
Rendimiento
Profiling, optimización de JVM y análisis sistemático de cuellos de botella.
Concurrencia
Concurrencia, paralelismo y procesamiento asíncrono en el ecosistema Java.
Testing
Evolución hacia integration testing, contract testing y Testcontainers.
Docker / CI/CD
Contenedores, despliegues reproducibles y observabilidad.

Contrátame

Aporto más valor en proyectos de backend Java: mantenimiento evolutivo, modernización de aplicaciones legacy y resolución de problemas complejos.

Soft skills

Autonomía
Asumí en solitario el mantenimiento y la evolución de una aplicación Java 6.
Pensamiento analítico
Disfruto más descubriendo por qué algo no funciona que implementando una especificación cerrada.
Colaboración
He resuelto incidencias junto a perfiles técnicos distintos y he trabajado codo con codo con equipos NestJS y Angular.
Criterio
Si el problema se resuelve tocando un componente, no toco cinco. Cada abstracción tiene que resolver un problema real.
Apertura al feedback
Valoro el code review y la discusión técnica: las decisiones se justifican y todos aprendemos de todos.
Adaptabilidad
He trabajado sobre distintas generaciones tecnológicas (Java 6, 8 y 11; Spring 4 y 5) y me adapto a lo que pide cada proyecto.

Hablemos

Cuéntame en pocas líneas en qué consiste el proyecto o el puesto y te respondo por correo.