Desarrollo de pila completa

Nov 25 2022
El término desarrollador de pila completa se usa cada vez con más frecuencia recientemente. Particularmente en discusiones sobre la estructura del equipo, los requisitos para el reclutamiento o para inferir la genialidad pura de un individuo.

El término desarrollador de pila completa se usa cada vez con más frecuencia recientemente. Particularmente en discusiones sobre la estructura del equipo, los requisitos para el reclutamiento o para inferir la genialidad pura de un individuo.

Foto de Mike Marrah en Unsplash

Cuando veo este tipo de declaración en un CV o escucho a alguien que se describe a sí mismo como full-stack, me vienen a la mente varias preguntas:

  • ¿A qué te refieres con desarrollo full-stack?
  • ¿Sobre qué pila reclamas dominio?
  • ¿Qué tan extenso es su conocimiento para cada uno de los elementos? ¿Qué tan lleno tiene que estar?
  • ¿Es real el desarrollador full-stack? ¿Realmente existen?
  • Si existen, ¿por qué son útiles?
  • ¿Es full-stack otra forma de decir experto en todos los oficios, maestro de nada?

Antecedentes

Antes de entrar en detalles, vale la pena definir lo que pretendemos desarrollar y ofrecer.

Podría decirse que afirmar ser un desarrollador de pila completa para un PoC que se ejecuta en su computadora portátil es una descripción justa, ya que usted es la única persona que desarrolla cada parte de esa solución. La escala es muy pequeña y el impacto de un diseño o desarrollo deficiente es muy limitado. Fundamentalmente, está probando un concepto que no brinda un servicio, siempre que pueda funcionar durante la hora de demostración al CIO, está bien.

Si definimos la solución como un sistema de producción que maneja datos de clientes en vivo y produce información / datos que impulsan la generación de valor comercial, la situación es diferente y el impacto de los errores de codificación o las malas prácticas es mucho mayor.

A los efectos de esta publicación, consideraremos un sistema que procesa grandes cantidades (10 GB por día) de datos reales de clientes (incluida la PII) y brinda servicios comerciales clave con al menos 2 9 de disponibilidad.

¿Por qué son valiosos los desarrolladores full-stack?

Dejando de lado la existencia de tales personas, los beneficios que brindan son evidentes. Pueden diseñar, construir y ejecutar una solución sin ningún soporte externo; Esto significa que todos esos talleres de diseño, integraciones de componentes, ciclos de prueba y transferencias de operaciones que consumen mucho tiempo y son propensos a errores se eliminan en gran medida. No es necesario programar una reunión, o peor aún, una serie de reuniones, entre la seguridad, la plataforma, la base de datos, las operaciones,... las pymes porque puede diseñar, construir y ejecutar la solución. Un pequeño número de estos desarrolladores tipo dios (g minúscula) son capaces de entregar el trabajo de un gran equipo interfuncional y, debido a que se eliminan los gastos generales de las transferencias, la entrega también es mucho más rápida y menos propensa a errores.

Entonces, en base a estos claros beneficios, ¿por qué no hay más equipos formados por estas personas en todas las organizaciones de TI? ¿Por qué las empresas no están reclutando y entrenando activamente para construir estos equipos ninja? ¿Es porque los equivalentes de desarrollo de Batman o Tony Stark realmente no existen?

Para responder a estas preguntas, debemos ver cómo se ve una pila (muy) simplificada.

Pila simplificada

Dejo fuera la infraestructura de la plataforma con el fin de simplificar.

Mirando los elementos anteriores, es obvio que ser un experto en cada capa será un desafío. Sin embargo, suponiendo que no necesito saber TODO en cada capa, ¿puedo reducir el conocimiento requerido y seguir siendo considerado full-stack? Tomando la aplicación front-end como un dominio de ejemplo, podríamos eliminar fácilmente Android e iOS y centrarnos solo en un canal web y tal vez refinar aún más y decir que se limita a React, ¿cómo ayuda eso?

Según nuestro alcance reducido, ¿qué debo saber sobre las aplicaciones web de React?

Bueno, en primer lugar, necesitará comprender cómo funcionan las aplicaciones de una sola página, especialmente los principios básicos necesarios para crear, depurar y ejecutar una aplicación web y las herramientas asociadas, por ejemplo, npm, webpack, administración de contenido, herramientas de desarrollo de reacción, pautas de UX, …

También deberá estar muy familiarizado con la funcionalidad proporcionada por terceros, por ejemplo, material UI, redux, bootstrap, … y una solución de administración de paquetes como npm (incluida la administración de vulnerabilidades de seguridad, generalmente una consideración de DevOps, consulte las notas posteriores).

¿Qué pasa con el rendimiento, por ejemplo, el tiempo para la primera pintura con contenido, el tiempo para la interacción, el tiempo de bloqueo, ... ¿Debería adoptar una arquitectura de aplicación web progresiva y/o trabajadores de servicio para ayudar? Deberá comprender los factores de rendimiento y cómo los diversos patrones básicos pueden ayudar a utilizar herramientas para respaldar el análisis, por ejemplo, React DevTools o Lighthouse.

La accesibilidad es imprescindible para todas las aplicaciones, independientemente de si la aplicación se entrega interna o externamente. ¿Cómo aseguro el cumplimiento de las pautas de las WCAG?

En resumen, solo en la capa Front-End hay mucho que saber y podría decirse que esto lo mantiene ligero. Las capas restantes no son diferentes y en muchos casos la complejidad aumenta. Y para empeorar las cosas, los patrones y principios arquitectónicos, las mejores prácticas y los marcos NO SE SUPERPONEN .

Entonces, suponiendo que haya logrado meter en mi cabeza los patrones, estándares, mejores prácticas y habilidades prácticas para cada capa sin que explote, ¿qué más necesito saber? ¿Se requieren capacidades de apoyo?

Capacidades de apoyo

Junto a la pila de tecnología, hay una serie de capacidades de soporte que se necesitan para diseñar, construir, entregar y ejecutar todos los componentes de la solución.

Arquitectura e Ingeniería SW

Conjunto básico de habilidades para respaldar el diseño arquitectónico en todas las capas creando una buena implementación en cualquier lenguaje/marco

  • SOLID (Responsabilidad única, Abierto/Cerrado, Sustitución, Segregación de interfaz, Inversión de dependencia)
  • reutilización, mantenibilidad, portabilidad, extensibilidad, …
  • Escalado horizontal y vertical
  • Estructura de codificación
  • Inicio sesión
  • Revisiones de código

Cada una de las capas y componentes dentro de cada capa (ignorando el front-end desde la perspectiva del canal web, ya que está implementado por el navegador o, por lo general, está fuera de nuestro control, ya que es del lado del cliente) en la pila simplificada anterior requiere una cuidadosa consideración desde una perspectiva de seguridad p.ej

  • APIs : TLS, DDoS, autenticación y autorización, CORs, política de seguridad de contenidos,…
  • Microservicios : TLS (incl MA), controles de acceso, gestión de secretos, validación de entrada de usuario, …
  • Datos : controles de acceso, cifrado en reposo, gestión de claves, grupos de seguridad de red y subredes,…
  • Plataforma (adicional) : seguridad de red, configuraciones de componentes fijos, por ejemplo, ChefInspec

Todos los desarrolladores necesitan habilidades de prueba básicas, no hay excusa para no poder probar sus propias funciones. Y en un entorno de pila completa, eso significa todos los componentes del diagrama anterior.

Comprender y ser capaz de aplicar los diferentes tipos y fases de las pruebas (sin marcar su propia tarea):

  • Funcional y no funcional
  • caja negra vs caja blanca
  • Unidad, integración, sistema, aceptación del usuario, regresión, humo,…

Desarrollo y mantenimiento de canalizaciones de integración continua y despliegue continuo

Los habilitadores centrales para CICD a menudo son creados por un equipo centralizado/dedicado, pero todos deberían poder actualizar y mantener las canalizaciones como mínimo. (Sí, lo sé; si tiene un equipo de DevOps, no está haciendo DevOps, pero muchas organizaciones sí lo hacen)

Utilizando herramientas como:

  • Jenkins, TravisCI, Spinnaker
  • GitHub, Bitbucket
  • Sonarqube
  • Zaproxy
  • Veracode, Snyk
  • Estibador, Ancla, Puerto

Si ignoramos el enfoque de "usted lo construye, usted lo ejecuta", los requisitos en un desarrollador de pila completa en torno a las operaciones se simplifican significativamente

El enfoque debe estar en construir su aplicación para que sea operable. Incluyendo todos los enlaces de diagnóstico requeridos, registros de eventos y un libro de ejecución para que un equipo de ejecución pueda clasificar y potencialmente resolver problemas sin necesidad de obtener la ayuda del equipo de desarrollo.

Por supuesto, es probable que la responsabilidad de las capacidades anteriores se base en cómo se administra su organización; tal vez el desarrollo sea estrictamente solo una prueba de unidad, o todas las pruebas se realicen dentro del equipo Scrum, con la excepción de las pruebas de seguridad. Pero si puede asumir el desarrollo de la API y la administración de la canalización de CICD sin necesitar el apoyo de otros, ahorrará mucho tiempo.

Al igual que con las capas de la pila tecnológica, el alcance de las capacidades de soporte requeridas para reclamar el estado de pila completa es enorme.

Conclusión

Creo que el verdadero desarrollador de pila completa es un mito (en gran parte) y lo ha sido desde que la pila fue más allá de ejecutar ensamblador en un 6502 en la década de 1980. No se engañe pensando que tener una interfaz en funcionamiento hablando con algunas API escritas en el nodo que se ejecuta en el nodo K8 significa que usted es un desarrollador de pila completa.

Estos individuos son míticos no solo por la profundidad del conocimiento y la experiencia que deben tener en diferentes dominios técnicos, sino también porque este alcance es cada vez mayor: cada año hay grandes desarrollos en tecnologías y patrones en cada uno de los dominios, manteniéndose al día. hasta la fecha es muy, muy difícil.

Además, estas personas generalmente pedirán más dinero del que la mayoría de las organizaciones de TI pueden permitirse pagarles, pero si realmente son completos, valen la pena, como dice el anuncio.

Propongo que lo mejor que puede esperar lograr es el dominio de su dominio elegido (una capa específica con una pila de tecnología limitada dentro de esa capa) y, en el mejor de los casos, competencia y conciencia de su falta de conocimiento en otras áreas.

Una mejor manera para que un equipo tenga éxito es no intentar reclutar o capacitar a desarrolladores de pila completa, sino crear dominios, por ejemplo, front-end, back-end, base de datos, etc. y trabajar para lograr un conocimiento de nivel ninja dentro de un dominio determinado (nuevamente la pila será limitada) con conocimiento superpuesto/cruzado en los otros dominios con interfaces, estándares, mejores prácticas y marcos muy claros para apoyar el desarrollo de alta calidad. Si las personas pueden abarcar múltiples dominios a nivel de expertos, eso es genial, pero en mi experiencia, esta es realmente la excepción.

comentario de bonificación:

¿Qué necesita saber para tener "más" éxito como desarrollador de ciencia de datos (tenga en cuenta el uso de la palabra desarrollador allí en lugar del término científico de datos; supongo que ya es un buen científico de datos? Y si no lo es, ¡No puedo ayudarte allí!). Si definimos a este desarrollador como alguien que puede desarrollarse en cada una de estas áreas pero es un experto en la parte de ciencia de datos*, es decir, mi objetivo reducido anterior, la industrialización de la pila más amplia es algo que haría un ingeniero de aprendizaje automático... pero esa discusión es para otro momento

*en nuestra pila simplificada, podemos decir que el modelo va en la parte de los microservicios... un poco