Full Stack Development: Qué significa y todos sus detalles

Los entornos de cultura agile actuales preconizan el trabajo en equipo donde la flexibilidad es tremendamente importante y en la que cualquier desarrollador debe poder adaptarse a entornos front-end y back-end cuando sea necesario. Esta es una tendencia global.  Podemos tomar como ejemplo  dos artículos: una oferta de trabajo de McKinsey y un artículo del Times of India.

En las aplicaciones de hoy el front-end y back-end están cada vez más separados; debido a la creciente complejidad, nuestras interfaces de usuario están ahora desacopladas de gran parte de la lógica detrás de ellas. Esto significa, grosso modo, que tenemos dos mundos de desarrollo especializados: front-end y back-end.

No obstante, existe una tercera opción: full stack o pila completa, que apuesta por una visión más holística del sistema.

Esta tendencia está en aumento y resulta muy interesante tanto para los profesionales como para las empresas, ya que aporta flexibilidad y rapidez de respuesta a las primeras y;  una visión más amplia del sistema, y por tanto más oportunidades, a los segundos.

Veamos en qué consiste.

Qué significa el fullstack development

Full stack significa poder comprometerse con todos los niveles de un sistema. Un desarrollador full stack entiende el “gran panorama”, no importa lo bien separados que estén los subsistemas. Hoy trabajas en un menú desplegable sofisticado; mañana, puede que tengas que ajustar la interfaz de la API para ese menú; al día siguiente, puede que tenga que ir más lejos, a la base de datos, para mejorar las consultas subyacentes que su API utiliza para obtener los datos que expone.

He hablado con mucha gente en cursos y eventos, y he notado cierto escepticismo hacia el desarrollo full stack. Los opositores tienen la idea que un desarrollador necesita estar altamente especializados en un sub-dominio específico para que sus habilidades sigan siendo valiosas.

Yo no estoy de acuerdo con esta visión. Creo que la tecnología está evolucionando de tal manera que el valor de un programador hoy en día es más relevante cuando este tiene el conjunto adecuado de habilidades que requiere la tecnología necesaria en cada momento. Esto significa gran flexibilidad por parte del programador, conocimiento del contexto global y capacidad de aprendizaje rápido. Esto es aún más patente cuando en la actualidad existe un trasvase de complejidad del back al front y; cuando tenemos tecnologías emergentes y disruptivas que han aparecido y evolucionan con gran rapidez (IoT, IA, VR, etc.) y están llamadas a impactar de manera significativa en el mercado.

Por otro lado, las empresas tienen cada vez más interés en programadores que son capaces de cubrir todo el ámbito de desarrollo de una aplicación, ya que les aporta un conjunto de beneficios como flexibilidad, robustez y rapidez de respuesta.

Desde que Carlos Bueno de Facebook escribió el artículo canónico sobre full stack , no ha habido escasez de mensajes tratando de definirlo. Algunos posts incluso colocan al desarrollador “full stack” en el centro del territorio Unicornio (término para referirse a start-ups con valoraciones de más de 1billón de dolares).

Laurence Gellert escribe en su blog  que un desarrollador full stack “va más allá de ser un ingeniero senior”, y detalla todo los conceptos con los que un full stack debe estar familiarizado, la mayoría de los cuales no implican solo codificación. Me permito reproducirlos aquí:

Servidor, Red y Entorno de Alojamiento.

    • Implica entender qué se puede romper y por qué, sin tomar ningún recurso por sentado.
    • Un uso adecuado del sistema de archivos, almacenamiento en la nube, recursos de red y una comprensión de la redundancia y disponibilidad de datos.
    • Cómo escala de aplicación teniendo en cuenta las restricciones de hardware.
    • ¿Qué pasa con las condiciones multi-hilo y race? Es algo que no se ve en los entornos de desarrollo, pero pueden suceder y suceden en el mundo real.
    • Los desarrolladores full stack pueden trabajar codo con codo con DevOps. El sistema debe proporcionar mensajes de error útiles y capacidades de logging. DevOps podrá responder a los mensajes antes y actuar.

Modelado de datos

    • Si el modelo de datos es defectuoso, la lógica de negocios y las capas superiores comienzan a necesitar código “extraño” para compensar casos no previstos que el modelo de datos no cubre.
    • Los desarrolladores full stack saben cómo crear un modelo relacional normalizado, completarlos con claves externas, índices, vistas, tablas de búsqueda, etc.
    • Están familiarizados con el concepto de almacenes de datos no-relacionales y entienden dónde “brillan” los almacenes de datos relacionales.

Lógica de negocios

    • El core del valor que ofrece la aplicación.
    • Aquí son necesarias habilidades sólidas de análisis y desarrollo orientados a objetos.
    • Los frameworks de productividad pueden ser necesarios también aquí.

Capa de API / Action Layer / MVC

    • Cómo opera el mundo exterior contra la lógica de negocio y el modelo de datos.
    • Los frameworks a este nivel deben ser utilizados en gran medida.
    • Los desarrolladores full stack tienen la capacidad de escribir interfaces claras, consistentes y sencillas de usar.

Interfaz de usuario

    • Los desarrolladores de pila completa: (a) entienden cómo crear un diseño legible, o (b) reconocen que necesitan ayuda de diseñadores gráficos. En cualquier caso, la implementación de un buen diseño visual es clave.
    • Puede incluir tener dominio de HTML5 / CSS.
    • JavaScript es el lenguaje del ahora y del futuro. Un montón de desarrollos emocionantes se está haciendo en este mundo (Node, Angular, React, Express…)

Experiencia de usuario

    • Los desarrolladores full stack aprecian que los usuarios sólo quieren que las cosas funcionen (bien).
    • Un buen sistema no le ofrece a sus usuarios el “síndrome del túnel carpiano” u “ojos doloridos”. Un desarrollador full stack puede dar un paso atrás y observar un proceso que está necesitando 8 clics y 3 pasos, y mejorarlo a un solo clic.
    • Los desarrolladores full stack escriben mensajes de error útiles: Si algo se rompe en la app, se disculpan por ello. A veces los programadores escriben inadvertidamente mensajes de error que pueden hacer que la gente se sienta estúpida.

Comprender lo que el cliente y la empresa necesitan.

    • Los desarrolladores full stack tienen una comprensión de lo que está sucediendo en el campo cuando el cliente utiliza el software.
    • También tienen una perspectiva de qué va el negocio.

Otros pedazos del rompecabezas, incluyen:

    • Capacidad de escribir pruebas unitarias de calidad. Por cierto, en estos días, incluso JavaScript puede tener pruebas unitarias.
    • Comprensión de los procesos automatizados repetibles para construir la aplicación, probarla, documentarla y desplegarla a escala (despligue continuo).
    • Conciencia de los “concerns” de seguridad, ya que cada capa presenta sus propias vulnerabilidades.

Al mismo tiempo, añadiríamos varios elementos a la lista que Gellert sugiere, como: control de código fuente, infraestructura de datos, computación distribuida, craftmanship, etc.

Por tanto, el desarrollo full stack consiste en exponerse, como desarrollador, a una amplia gama de ideas, conceptos y tecnologías. Este es un aspecto que veremos repetirse en los próximos años conforme avancemos e integremos procesos y tecnologías, como afirma Forbes .

Es decir, ser un desarrollador full stack no consiste en saltar inmediatamente de trabajar en el clúster de Hadoop, al middleware de Java y, luego al JavaScript que se ejecuta en el navegador (la especialización existe por una razón).

Sino que es comprender que los desarrolladores que entienden la “pila completa” van a construir mejores aplicaciones y aportar mayor valor: Un desarrollador trabajando en el backend entenderá de fondo lo que están haciendo los desarrolladores front-end y podrá trabajar con ellos para que la aplicación no genere peticiones que conduzcan las incoherencias en la base de datos. Un desarrollador trabajando en el front-end que entiende el diseño será capaz de ayudar a los diseñadores a construir aplicaciones que son hermosas y pueden funcionar de manera eficiente en cualquier plataforma.

Full stack es interesante para desarrolladores y empresas

Un desarrollador de front-end es un programador que codifica y crea las características que son accesibles por el usuario final. Los desarrolladores de back-end construyen la lógica de negocio y las operaciones de la aplicación. Tradicionalmente, las empresas tenían equipos de desarrolladores dedicados para implementar de manera especializada cada parte de la aplicación.

No obstante, el enfoque full stack ofrece muchas ventajas, tanto a los desarrolladores como a las empresas.

Equipos full stack

Un desarrollador full stack, puede saltar de una parte de la aplicación a otra sin una sobrecarga significativa. Esto es una ventaja enorme al planificar hacia adelante o al diseñar nuevas características.

El verdadero valor del full stack surge cuando el desarrollador es capaz de entender los requisitos de negocio detrás de una característica y a continuación, tomar “responsabilidad plena” sobre la aplicación.

Tener un equipo de personas multidisciplinares significa para una empresa que puede adaptarse rápidamente, ramificando a su equipo cuando aparece una nueva oportunidad.

También es algo que ayuda a crear química dentro de un equipo. Los desarrolladores trabajan juntos más tiempo. Incluso si un proyecto comienza con la construcción de una API, luego se mueve a clientes móviles y web, las mismas personas pueden hacer ese viaje juntos.

División del trabajo

Un desarrollador full stack debe dividir su trabajo de acuerdo a las necesidades del proyecto. Todo es contextual, y debe ser tratado caso a caso.

Se necesita poder zambullirse y realizar tareas en cualquier momento, en cualquier parte de la aplicación (y buscar la oportunidad). Esto es especialmente importante en el entorno actual de desarrollo de software agile.

Full stack no termina con el código

Las empresas y los propios desarrolladores tienden a ver  el conjunto de habilidades de un programador desde el punto de vista de los lenguajes de programación con los que es capaz de trabajar, o las herramientas que conocen y usan.

Una mejor manera de enfocar estas habilidades -el enfoque full stack– es determinar las responsabilidades que son capaces de asumir como parte de su trabajo.

¿Puede realizar tareas básicas de interfaz de usuario, configuración de infraestructura y análisis de datos? ¿Puede participar en el proceso de desarrollo de productos?

En el enfoque agile, los equipos trabajan en estrecha colaboración con los clientes. Es muy positivo y útil para los propios desarrolladores integrarse en el proceso empresarial. Una vez que los desarrolladores entienden los problemas de los clientes, comienzan a proponer soluciones para ellos.

De esta manera, un desarrollador puede proporcionar una solución para un problema de negocio existente sin la sobrecarga de un enfoque de silo tradicional.

No estamos diciendo que debemos reemplazar todos los roles de equipo con desarrolladores. Si no que capacitar a los desarrolladores para que sean responsables de algo más que el código que producen puede ser tremendamente beneficioso para el producto final.

Esto también ayuda en el cambio de mentalidad de alto nivel: de un enfoque centrado en soluciones a un enfoque centrados en problemas. Comienza identificando el problema raíz, no sólo los síntomas, para que se pueda diseñar una solución óptima para resolverlo.

Esto lleva a generar mejores soluciones y procesos más efectivos de implementación de proyectos

El camino del fullstack: Mantenerse al día entre tantas tecnologías y frameworks

Yo diría que incluso mantenerse al día en el front-end o en el back-end es imposible hoy en día, dada la velocidad con que avanzan las tecnologías y aparecen nuevos frameworks. Por tanto dejemos esto fuera de la mesa de discusión (por ahora), y centrémonos en lo que se puede hacer en la realidad.

Cualquier buen desarrollador full stack debe comenzar con un conjunto básico de habilidades bien desarrolladas. Estas deben estar orientadas a integrarse en los procesos de negocio de la empresa, entenderlos y aportar valor en el conjunto, recorriendo el camino de lo más básico –tecnológicamente- a los más complejo, según haya oportunidad.

Por ejemplo, debe ser capaz de realizar tareas básicas: escribir una cookie, conectarse a un endpoint REST, realizar una consulta en la base de datos, etc. Un siguiente paso sería, poder construir nuevas habilidades sobre las anteriores mediante la adición de nuevas herramientas y nuevas abstracciones con el tiempo.

Mantenerse al día con la última tecnología no es un buen indicador de rendimiento para un desarrollador. Lo que importa es su capacidad para ponerse al día rápidamente, según sea necesario y, contribuir al proyecto y la empresa.

Mis conclusiones finales:

En el entorno actual apostar por el full stack es en realidad una oportunidad para enriquecer nuestra visión como  desarrolladores. Full stack propone un viaje motivante y necesario para adaptarse a la evolución constante del mundo, la tecnología y el mercado. Adquirir una visión holística y más acorde con nuestra propia naturaleza del desarrollo.

Cuanto más te expongas a diferentes tipos de pensamiento, cuanto más sabes sobre otras disciplinas que no son las tuyas, más eficaz serás – tanto porque comprenderás cómo colaborar con tus colegas, como porque tendrás un amplio repertorio de ideas y conceptos para ayudar en tu propio trabajo.

Como empresa, potenciar y motivar esta opción es una gran oportunidad de ser más óptimo y competitivo; generar mejores y más valiosos productos; así como aportar una opción motivante y más humana a los miembros de tu equipo.

Ahí es donde nos dirigimos.

Únete a nuestra comunidad

#AlwaysLearning

Formación

  • Sensibilización en la importancia de las e-Competences
  • Capacitación Técnica y en Gestión de la Tecnología
  • Formación a medida
  • Adaptación de contenidos propios a formación presencial y online
Buscar

Solicitar Información

Request Information