Por qué la tecnología sin servidor es una revolución en la gestión de productos

imagen
Las arquitecturas sin servidor afectan fundamentalmente los factores limitantes que limitan el desarrollo de productos.

Los gerentes de producto en la organizaci√≥n act√ļan en una variedad de roles. A veces se les llama la "voz del cliente", a veces desempe√Īan el papel de "peligro de gato corporativo" . Son hermanos de piel grasa, personas que inexorablemente lo llevan a entregar el producto, a pesar de cualquier √©tica o excusa. Un buen gerente de producto rara vez se convierte en el √≠dolo de alguien, pero es gracias al trabajo de tales personas que la mayor√≠a de las soluciones tecnol√≥gicas que alguna vez ha utilizado est√°n incorporadas.

PM siempre est√° buscando herramientas de la m√°s alta calidad para resolver el problema. Sabemos que los competidores pisan los talones constantemente, los clientes est√°n cansados ‚Äč‚Äčde esperar, por lo que constantemente tenemos que actuar de manera m√°s inteligente, r√°pida y eficiente. Con el advenimiento de las tecnolog√≠as sin servidor, no qued√≥ claro de inmediato c√≥mo encajar√≠an en la lista de deseos de gesti√≥n de productos. Sin embargo, despu√©s de trabajar con estas tecnolog√≠as durante un a√Īo, veo que resuelven algunos problemas de desarrollo de software que nos parecieron para siempre.

Paradoja: tama√Īo del equipo y rendimiento


La primera regla de gesti√≥n de productos dice: la cantidad de trabajo a realizar est√° en constante crecimiento. La acumulaci√≥n de pedidos contin√ļa aumentando y se desploma a cero en un solo caso: cuando se elimina el producto. Lo m√°s dif√≠cil es convertir los elementos m√°s importantes de su cartera de pedidos en un producto listo para su entrega. En igualdad de condiciones, se cree que se debe observar la siguiente relaci√≥n:

imagen

Si una excavadora puede reciclar 1 tonelada de tierra por día, se supone que 10 excavadoras pueden reciclar 10 toneladas. Como regla general, la gestión de recursos en las empresas se basa en este principio: si desea aumentar las ventas, contrate más personal de ventas. Cuando se desarrolla software, cuando crece la cartera de pedidos, la tentación es simplemente aumentar el equipo. Sin embargo, en casos con productos y servicios complejos, aproximadamente el siguiente cronograma generalmente se perfila con el tiempo:

imagen

Es raro ver c√≥mo funciona un gran equipo al ritmo de Stakhanov; pero a menudo sucede que un equipo peque√Īo con una constancia envidiable progresa a pasos agigantados.

Muchas startups tienen el siguiente error: tan pronto como el producto se vuelve exitoso, se agregan m√°s nuevos desarrolladores y gerentes al personal. Pronto, de repente resulta que la velocidad comienza a caer. Cual es el problema ¬ŅQue los primeros desarrolladores ten√≠an m√°s talento, que la burocracia creci√≥ en la empresa y c√≥mo se planific√≥ la arquitectura?

Creo que todos estos son solo síntomas, no la raíz del problema. El problema en sí se reduce a la interacción de tres factores críticos, de los cuales solo dos pueden controlarse directamente:

  • La fragilidad es el efecto de nuevos cambios. Si una nueva funci√≥n afecta solo a una parte de la m√°quina, entonces es f√°cil de probar e implementar. Si afecta a todos los elementos de la m√°quina, las pruebas se vuelven m√°s dif√≠ciles y al mismo tiempo m√°s importantes, y la implementaci√≥n requiere un orden de magnitud m√°s tiempo.
  • El volumen de trabajo es el trabajo m√°s peque√Īo que puede realizar un equipo y ofrece una caracter√≠stica productiva en la salida. Por ejemplo, el resultado es "Pagar con Alexa" en lugar de "reunirse y discutir c√≥mo hacer pagos con Alexa".
  • Complejidad: cu√°nto conocimiento se requiere para implementar una caracter√≠stica. ¬ŅEs un desarrollador que sabe c√≥mo escribir una funci√≥n capaz de hacer lo mismo dentro de la organizaci√≥n? ¬ŅQu√© cambios adicionales deben ocurrir para que el progreso se ralentice gradualmente y el producto deje de crecer con caracter√≠sticas que son valiosas desde el punto de vista del cliente?

Estoy especialmente interesado en por qué, en los albores de la existencia, todos estos factores están equilibrados de manera óptima: no hay nada frágil, la cantidad de trabajo no es particularmente grande (y generalmente puede estar de acuerdo con el cliente), y la complejidad está prácticamente ausente. Entonces, si un equipo necesita crear un sitio que cumpla con GDPR, entonces tendrá tiempo para estudiar este problema, se tomará una decisión rápidamente y el equipo se asegurará de que el sitio funcione exactamente como se planeó.

En las empresas m√°s grandes, estos factores se combinan, lo que resulta en un tama√Īo de equipo creciente y el volumen de trabajo realizado se reduce. Para crear un sitio web compatible con GDPR en dicha empresa, necesitar√° la firma de un abogado, la aprobaci√≥n de los especialistas en marketing, la aprobaci√≥n del proyecto a nivel de la junta directiva, las pruebas A / B de la implementaci√≥n menos disruptiva, la coordinaci√≥n de las interrupciones de desarrollo con el equipo de administradores, la coordinaci√≥n con los planes de implementaci√≥n adoptados por otros equipos - La lista contin√ļa. Incluso con esta cantidad de control y la cantidad de procesos, el equipo tiene mucha menos confianza en que tendr√° √©xito, debido a la fragilidad de todo el sistema y muchas inc√≥gnitas en el ecosistema.

Ampliando este ejemplo al tama√Īo de un proyecto real, en el que puede haber docenas de caracter√≠sticas y cientos de cambios, es f√°cil entender c√≥mo, debido a la influencia de estos factores, el gr√°fico de la relaci√≥n "tama√Īo del equipo / volumen de trabajo" cambia del primero al segundo. A medida que el equipo crece, est√°s condenado a hacer menos trabajo por unidad de tiempo, sin importar c√≥mo trates de burlar al coloso organizacional. O parece que s√≠, pero ¬Ņqu√© se debe hacer entonces?

Cómo hackear los tres factores


Este problema me ha perseguido durante muchos a√Īos, lo que me llev√≥ a estudiar sus posibles causas. ¬ŅEs posible que las startups progresen r√°pidamente? Por un tiempo, pens√© que s√≠, frente a las dificultades de la gesti√≥n de productos en grandes organizaciones. Sin embargo, luego mir√© los tres factores m√°s de cerca.

La fragilidad siempre es en detrimento de usted: provoca una deuda t√©cnica cada vez mayor en cualquier proyecto de cualquier tama√Īo. La situaci√≥n recuerda a la "vida media por el contrario": cualquier elemento del programa crece con el tiempo y debido a esto (durante el desarrollo) se vuelve m√°s fr√°gil, y todo esto se agrava con cada nueva l√≠nea de c√≥digo.

La cantidad de trabajo no está asociada con una característica específica del producto ("Pagar con Alexa"), sino con diferencias en los contornos de la infraestructura, si comparamos los estados "antes" y "después". Cuanto más difícil se vuelve el "después", más se reduce la cantidad de trabajo realizado. Es por eso que en muchas empresas, cuando se planifica el trabajo, el énfasis se desplaza de las necesidades del cliente ("Pagar con Alexa") a las necesidades de la organización ("Conocer y discutir quién debe participar en la implementación de la función" Pagar con Alexa ").

La complejidad es una combinaci√≥n de factores sociales, organizativos y t√©cnicos que afectan directamente la duraci√≥n de la b√ļsqueda de un desarrollador adecuado, la capacidad de tratar a los programadores como personas multitarea a las que se les puede confiar cualquier trabajo. Adem√°s, es la complejidad, el aspecto que probablemente permanecer√° invisible, indocumentado e incomprendido. Un desarrollador puede escribir una aplicaci√≥n React en casa y lanzarla √©l mismo, pero en la organizaci√≥n tendr√° que tomar una docena de pasos adicionales que le tomar√°n su tiempo, y las caracter√≠sticas interesantes para el usuario no cambiar√°n en absoluto. El programador pasar√° la mayor parte del d√≠a en ellos.

Juntos, estos tres factores forman un c√≠rculo vicioso, de modo que la cantidad de trabajo realizado disminuye, la fragilidad aumenta, el desarrollador logra completar cada vez menos funciones, y su producto est√° cubierto de complejidad como un lodo invisible. En consecuencia, el crecimiento del equipo no ayuda, y la velocidad solo se puede aumentar conscientemente mediante la astucia con n√ļmeros e indicadores. Un s√≠ntoma cl√°sico: la posici√≥n de "reuni√≥n celebrada" aparece en los informes de sprint.

En las grandes empresas, tuve que observar un par de enfoques defectuosos dise√Īados para romper este ciclo. El primero es "√Āgil a gran escala", lo que resulta en grandes reuniones en las que participan absolutamente todos los participantes en el desarrollo de una caracter√≠stica particular y se hacen intentos para coordinar el trabajo. As√≠ que trate de coordinar el trabajo y comprenda la complejidad. Tal enfoque es bueno para las empresas de distribuci√≥n de alimentos que ofrecen almuerzos encantadores, pero en nuestro caso no funciona. El hecho es que a medida que aumenta el tama√Īo del grupo de proyectos prioritarios, se vuelve m√°s y m√°s, y ellos mismos disminuyen. Por lo tanto, no es posible resolver fundamentalmente los problemas de fragilidad y complejidad. Con el tiempo, Agile a gran escala ofrece una lista t√°ctica de tareas que se asemeja a una lista de compras, y se parece cada vez menos a un camino hol√≠stico de una caracter√≠stica reflexiva a otra.

En segundo lugar, los "grupos de innovaci√≥n" corporativos internos a menudo intentan impulsar cambios perif√©ricos con la esperanza de que este trabajo arraigue en una m√°quina fr√°gil y que toda la estructura cambie para mejor. Este enfoque tiene un efecto secundario extra√Īo: se consolida la creencia de que solo esos "grupos de innovadores" tienen derecho a realizar cambios en el proceso. Por lo tanto, un m√©todo similar tampoco resuelve problemas con la complejidad organizacional.

Despu√©s de haber visto muchos a√Īos de varios fracasos, llegu√© a la conclusi√≥n de que es necesario piratear los tres factores para evitar su efecto combinado en el trabajo realizado y hacer frente a la inercia:

  • La fragilidad no debe aumentar en futuras versiones o a medida que el producto envejece.
  • El trabajo no debe ser inferior al requerido para crear una caracter√≠stica significativa desde el punto de vista del usuario.
  • La complejidad no deber√≠a afectar el trabajo de un solo desarrollador.
    Si logra adoptar estas ideas, estar√° protegido contra el rock, que busca todos los productos de software en la historia de la humanidad. Suena genial, pero ¬Ņc√≥mo se puede lograr esto?

Si logra adoptar estas ideas, estar√° protegido contra el rock, que busca todos los productos de software en la historia de la humanidad. Suena genial, pero ¬Ņc√≥mo se puede lograr esto?

Limitaciones de ruptura de tecnologías sin servidor


Gracias al advenimiento de la tecnología en la nube, fue posible pavimentar senderos importantes hacia un nuevo estado "pirateado". En general, con la llegada de las nubes, el proceso de entrega de un producto de software se hizo más compacto, ya que un proveedor comenzó a hacer muchas cosas de rutina por usted. Antes de que aparecieran las nubes, si necesitaba implementar una nueva función de usuario, tenía que pedir un servidor, instalar equipos en bastidores, ponerse de acuerdo en instalar redes en un centro de datos y luego mantener este equipo, que se desgasta con el tiempo. En la nube, todo esto se puede alquilar, eliminando así docenas de elementos organizativos y ahorrando meses completos.

Además, al eliminar la necesidad de actualizar el equipo en un centro de datos y proporcionar acceso al hardware a pedido, reducimos la fragilidad y la complejidad. Poner programas en uso es mucho más fácil que en los viejos tiempos. Sin embargo, con el tiempo, la carga de administrar una infraestructura virtual extensa ha aumentado significativamente, y muchos métodos de entrega obsoletos no han cambiado. Al usar las nubes, el equipo puede aumentar significativamente antes de que el trabajo comience a disminuir, sin embargo, comienza a disminuir, de una forma u otra.

Las tecnolog√≠as sin servidor cambian radicalmente esta din√°mica. La aplicaci√≥n sin servidor consta de peque√Īas piezas de c√≥digo escritas por su equipo (el llamado "pegamento") y "cuadros negros" funcionales que son administrados por el proveedor de la nube. El cuadro negro simplemente acepta una configuraci√≥n y reacciona a los cambios. En una aplicaci√≥n con una arquitectura de alta calidad, una parte est√°ndar del trabajo operativo asociado con el funcionamiento de la aplicaci√≥n recae en las cajas negras est√°ndar. La aplicaci√≥n en s√≠ ya no es una funci√≥n monol√≠tica, sino una estructura federal de funciones y cuadros negros.

En la práctica, esto afecta dramáticamente los tres factores que mencioné anteriormente:

  • La fragilidad se reduce debido a los costos de administraci√≥n de infraestructura cero y la uni√≥n d√©bil. En nuestros propios proyectos, se observ√≥ que la base del c√≥digo como resultado de tales cambios a veces se puede reducir diez veces.
  • El tama√Īo de la "pieza de trabajo" generalmente es comparable al costo de crear una nueva caracter√≠stica, ya que resulta trivial crear nuevas versiones de funciones o funciones completamente nuevas que no se requer√≠an previamente.
  • La complejidad no afecta al desarrollador: si puede escribir una funci√≥n que procese pagos con tarjeta de cr√©dito, entonces pr√°cticamente no hay nada que hacer adem√°s de este c√≥digo en la aplicaci√≥n sin servidor, sin envoltorios organizacionales y sin consideraci√≥n del ecosistema, por lo que el trabajo podr√≠a ralentizarse.

Al administrar incluso aplicaciones sin servidor muy grandes, es fácil para el gerente de producto observar más de cerca los muy pocos elementos que se vieron afectados por los cambios realizados. Además, es fácil lanzar dos versiones de manera competitiva colocando banderas de características. Además, generalmente ni siquiera es necesario demoler versiones antiguas de código.

En aplicaciones sin servidor, la infraestructura siempre se construye en la periferia, y usted escribe solo el código mínimo necesario que combina servicios totalmente administrados. Nunca tiene que pensar en ellos desde un punto de vista operativo. No estamos tratando de controlar el monolito, limpiar el código antiguo o ver todo el sistema desde una vista de pájaro.

¬ŅPor qu√© es inmensamente importante?


A medida que aumenta el ritmo del cambio, se hace cada vez m√°s dif√≠cil predecir c√≥mo se ver√° su programa en el futuro o qu√© querr√°n los usuarios de usted. Por lo tanto, los intentos de escribir c√≥digo "durante siglos", de modo que debe funcionar en el futuro, a pesar de cualquier cambio, se vuelven cada vez m√°s in√ļtiles. Hemos visto cu√°n mala es la reutilizaci√≥n de c√≥digo en la mayor√≠a de las empresas y c√≥mo la adherencia a plataformas obsoletas ralentiza el progreso.

Ahora todo est√° organizado para que el sistema antiguo se desarrolle y se mantenga durante el mayor tiempo posible, hasta que su soporte comience a quitarle al programador casi todo el tiempo. Despu√©s de eso, la compa√Ī√≠a comienza de nuevo con el nuevo sistema, prometiendo solemnemente no repetir los errores cometidos en el anterior. Cuando tres factores tarde o temprano estrangulan el nuevo sistema, hay un "incendio forestal" tecnol√≥gico, despu√©s del cual nuevamente debe comenzar de nuevo.

Nos enfocamos en la lucha contra los síntomas de la complejidad, razón por la cual tantos paradigmas van y vienen, sin dejar rastro significativo en la historia de la gestión de productos. El desarrollo sin servidor, a su vez, permite al equipo minimizar el aumento de la complejidad y continuar entregando un producto valioso a un ritmo bastante uniforme, sin caer en trampas clásicas que durante décadas han sido el azote de cualquier desarrollo de software.

El paradigma sin servidor apenas comienza a desarrollarse, pero ya parece extremadamente prometedor. En un momento en que el cliente requiere que tenga nuevas funciones como nunca antes, los gerentes de producto finalmente pueden adquirir una plataforma que le permite pensar con precisión basándose en la preparación de nuevas funciones. Este proceso no se ve obstaculizado por el aumento de la complejidad organizacional, y tampoco se detiene debido a la fragilidad excesiva.

Source: https://habr.com/ru/post/444730/


All Articles