Full stack developer
Cómo escribo el software: pruebas primero y piezas que se pueden cambiar.
TDD, SOLID, integración continua y unas cuantas reglas más que no negocio. Aquí está cada una con su motivo, un caso donde se aplica y el texto público donde está definida.
- Pruebas TDD, pirámide de pruebas
- Diseño SOLID, hexagonal, KISS y YAGNI
- Entrega CI/CD, versionado semántico, doce factores
Las reglas que no negocio
No son manías: cada una se paga sola la primera vez que hay que cambiar algo con el programa ya funcionando y gente dentro.
Un encargo pequeño y uno grande se escriben igual. La diferencia está en cuántas veces vas a volver: el software que resuelve un proceso de una empresa se toca cada pocos meses porque el proceso cambia, y lo que decide si eso es barato o carísimo se decidió el primer día, cuando se eligió dónde poner cada frontera.
- Una prueba antes que el código Si no sé escribir la prueba, todavía no sé qué le estoy pidiendo al programa. Escribirla primero es la forma más corta de averiguarlo.
- Cada pieza, un solo motivo para cambiar Responsabilidad única y dependencias hacia dentro: el caso de uso no sabe si detrás hay PostgreSQL, un fichero o la API de un tercero.
- Lo aburrido gana Ninguna dependencia entra sin explicar qué problema resuelve hoy. Lo que no hace falta, no se escribe.
- El error se dice, no se esconde Una API contesta el fallo en un formato que la otra parte puede leer, con su código y su motivo, no con un 200 y un texto suelto.
- La entrega se repite igual Configuración fuera del código, despliegue repetible y versión numerada: el servidor de producción no es una pieza artesanal.
- La seguridad se revisa con lista Antes de dar algo por bueno, el repaso de siempre: autenticación, permisos, entrada del usuario, dependencias y registros.
Lo que no hago
Casi todo el trabajo de mantener algo barato consiste en lo que se decidió no meter.
No empiezo eligiendo framework. Primero está el proceso que hay que resolver y el dato que hay que guardar; la herramienta se elige después, y a veces la respuesta es que no hace falta ninguna. Esta misma web es el ejemplo: PHP plano, sin base de datos, sin dependencias y sin paso de compilación, porque nada de lo que hace lo pedía. Se puede leer entera y se sirve con un servidor web y nada más.
No escribo código «para cuando haga falta». Una capa de abstracción que todavía no tiene dos implementaciones no es flexibilidad: es una pieza más que mantener y una indirección más que leer. Cuando aparece la segunda, se extrae, y para entonces las pruebas ya están escritas y el cambio es mecánico.
Y no dejo la interfaz para el final. Lo que se ve tiene su propio método, sus propias reglas de contraste y de foco, y no se improvisa la tarde antes de entregar.
Glosario del oficio.
Los términos tal como se usan, con un caso donde aplico cada uno y el texto público que lo define. Así no hay que creerme: se puede comprobar.
Preguntas.
¿Escribir las pruebas primero no va más lento?
El primer día, sí. El cálculo cambia en cuanto hay que tocar algo que ya está en producción: sin pruebas, cada cambio obliga a repasar a mano lo que antes funcionaba, y eso se paga cada vez. Con pruebas se paga una.
¿Se puede aplicar SOLID sin framework, en PHP plano?
SOLID no es una biblioteca, es dónde se ponen las fronteras. Se puede hacer mal con el framework más moderno y bien con un puñado de ficheros: lo que importa es que la lógica no sepa de dónde viene el dato ni a qué pantalla va.
¿Qué cobertura de pruebas buscas?
No persigo un porcentaje. Un número alto con pruebas que no comprueban nada da falsa tranquilidad. Lo que busco es que lo que duele si se rompe —el cálculo, el permiso, el dinero— esté cubierto, y que un fallo en producción deje siempre una prueba nueva detrás.
¿Y si el proyecto ya existe y no tiene nada de esto?
Se empieza por donde se va a tocar. Antes de cambiar una pieza, se le escriben pruebas que fijen lo que hace hoy —aunque lo que haga hoy sea raro—; con esa red, el cambio deja de ser una apuesta. Reescribir entero casi nunca es la respuesta.
¿Quién decide cuándo algo está terminado?
Lo decide una lista escrita antes de empezar, no la sensación de que ya va: las pruebas pasan, el error está contado en su formato, la pantalla se puede usar con teclado y con lector, la versión está numerada y el despliegue se ha hecho con el mismo guion de siempre.
Fuentes.
Todo lo que se afirma aquí está descrito en un texto público. Estos son, con su organismo y su fecha.
- ISO/IEC 25010:2023 · Modelo de calidad de producto ISO/IEC JTC 1/SC 7 · 2023-11
- RFC 9110 · HTTP Semantics IETF · 2022-06
- RFC 9457 · Problem Details for HTTP APIs IETF · 2023-07
- OWASP Top 10 OWASP Foundation · 2021
- OWASP Application Security Verification Standard OWASP Foundation
- Semantic Versioning 2.0.0 semver.org
- The Twelve-Factor App Heroku
- Conventional Commits 1.0.0 Conventional Commits
- Continuous Integration Martin Fowler
- Hexagonal Architecture Alistair Cockburn
- DORA · investigación sobre entrega de software DORA (Google Cloud)
Adónde seguir.
- El stack, herramienta por herramienta Qué hace cada lenguaje, cada base de datos y cada pieza de sistemas, y con qué criterio se elige.
- Las aplicaciones que he construido Dónde se ve todo esto funcionando, con enlace para probarlo.
- Y el método del otro lado Interfaz, accesibilidad y sistema de marca: las reglas de lo que se ve.
¿Hablamos?
¿Te cuadra esta forma de trabajar?
Cuéntame qué tienes entre manos y te digo por dónde empezaría.

