Vous êtes sur la page 1sur 6

FULL STACK DEVELOPMENT

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. Sirva como ejemplo estos dos artículos: una oferta de trabajo de McKinsey
(http://www.mckinsey.com/careers/search-jobs/jobs/full-stack-developer-0479) y un
artículo del Times of India (http://timesofindia.indiatimes.com/business/india-
business/companies-on-the-hunt-for-full-stack-
developers/articleshow/59007708.cms?from=mdr)

En las aplicaciones de hoy el front-end y el 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
(https://www.facebook.com/note.php?note_id=461505383919), 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 (https://www.laurencegellert.com/2012/08/what-is-


a-full-stack-developer/) 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
(https://www.forbes.com/sites/oreillymedia/2014/04/11/full-stack-developer-is-a-tall-
order-bordering-on-unicorn-territory/#40cf8448ab34).
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.

Vous aimerez peut-être aussi