Jose Ignacio Andrés bio photo

Jose Ignacio Andrés

CTO y full stack developer

Email Twitter LinkedIn Instagram Github Stackoverflow Last.fm

Hasta hace muy poco, nunca había tenido ninguna duda sobre qué significaba ser un desarrollador full-stack. Hasta ahora, para mí, en el contexto del desarrollo web, una definición podría ser ésta:

Un programador que esté familiarizado tanto con el entorno backend como con el frontend y se mueva con soltura en la parte de sistemas.

Sé que decir que se está “familiarizado” puede sonar un poco vago, se podría matizar en muchos aspectos, como en el nivel de conocimientos en cada área, pero creo que en general se entiende a qué nos referimos.

Vale, ¿Y qué ha cambiado?

Realmente no ha habido un cambio repentino, y seguramente para muchos este post esté ya hasta desfasado, pero la realidad es que en los últimos años han cambiado muchas cosas.

En mi caso, desde hace unos meses estoy en un nuevo proyecto (del que espero poder comentar más dentro de poco) y hemos tenido que redactar las ofertas de empleo para montar el equipo técnico. La manera de plantearlo no es compleja, simplemente decidimos describir los roles que vamos a necesitar y posteriormente veremos cómo los podemos cubrir con diferentes perfiles.

En nuestro caso, vamos a necesitar resolver tareas de devops y/o sysadmin, también parece obvio que necesitaremos programar nuestra API, así que backend seguro. Tanto para la web como para la aplicación será necesario contar con diseño gráfico, maquetación y programación frontend. Habrá que dedicar tiempo a QA y claro, no nos podemos olvidar de la UX, esencial hoy por hoy.

Esto para mi ha significado ponerme al día de muchas tecnologías con las que no estoy familiarizado, sobre todo en frontend, para poder redactar las ofertas. Esto me ha enseñado cómo está el panorama actual. He procurado informarme, hablar con gente que considero referente en cada área y aún así, os aseguro que hay perfiles para los que aún no tenemos ni nombre, al menos no de manera generalizada. Es curioso tratar de poner título a una oferta y no saber cuál poner.

Nuestra profesión ha evoluciona rápido, y los roles se van especializando. Cada día los soportes y los estándares mejoran, eso permite hacer muchas más cosas y conseguir un resultado mejor para el software que hacemos y eso es genial.

Hablar de backend y frontend hace 2 o 3 años era concretar mucho más de lo que puede ser hoy. El nivel de ambigüedad del término, al menos para mí, ha aumentado muchísimo.

Por ejemplo, ¿Qué hace exactamente un front-end developer? ¿Debería saber consumir una API Rest y al mismo tiempo hacer un juego en JS? Tampoco se queda atrás la parte de sistemas, ¿Cuáles son las tareas que debes saber de sistemas para considerarte un full-stack? Incluso desde hace unos años tenemos el término devops. Por lo tanto ¿Qué debes saber para considerarte full-stack developer?

El antes y el después

Es una gran generalización, claro, pero de unos años hasta ahora, creo que se podría resumir así:

Antes era parecido a algo como:

Graphic Designer
  |
Frontend
  |
Backend
  |	
SysAdmin

Ahora es más bien:

UX Designer
  |
UI Designer
  |
Frontend Designer
  |
Frontend Developer
  |
Backend Developer
  |
Dev Ops

¿Y el full-stack?

En mi opinión quedará como un término más que como una realidad, aunque en cierto modo ya lo sea. Siempre habrá gente unicornios que sean capaces de cubrir muchos de estos roles a un nivel muy bueno, hay gente muy crack, pero la tendencia claramente indica que cada vez nos especializaremos más, por lo que creo que al final nadie podrá ser un full-stack, no de manera literal.

Pero en esencia, el valor del programador full-stack es que al conocer todo el stack podrá facilitar el trabajo a sus compañeros. No es necesario trabajar a diario con una tecnología para conocer sus conceptos básicos, sin embargo, esto sí nos permitirá mejorar el rendimiento del resto del equipo. Y esto sí que se puede conseguir, require mucho esfuerzo, formación y dedicación, pero ese será para mi el full-stack developer de ahora en adelante.

El principal valor de un full-stack es poder simplificar el trabajo a los demás miembros del equipo.

Dicho todo esto, para poder desarrollar software de calidad, tu equipo sí debe ser un equipo full-stack.