Entonces eso es escalando el equipo. Ahora, ¿cómo escalas la tecnología? No pienses demasiado en la tecnología. La tecnología es en realidad la parte más fácil de escalando un negocio. En su mayor parte, solo estás resolviendo problemas conocidos con soluciones conocidas.
Esto se encuentra en el libro Cómo se Hacen las Grandes Cosas. Es un libro realmente bueno. No se trata de ingeniería de software, pero trata sobre proyectos de ingeniería a gran escala. Habla sobre cómo China puede construir un montón de puentes y plantas de energía al año, mientras que Estados Unidos no puede. El factor principal del que hablan es que en China tienen como diez diseños estándar para todo, y luego los ingenieros llegan, analizan la situación y simplemente eligen el diseño más apropiado para aplicarlo a esa situación, y aquí está la cosa.
Ajustan la situación para que se adapte al design. No ajustan el design de un componente listo para usar para que se adapte a la situación. Es al revés. Cambian el problema para que se ajuste a la solución que ya tienen, y de esa manera pueden construir mucho más rápido y están guardando sus fichas de innovation para las cosas que son realmente nuevas y diferenciadoras en su empresa. Lo que nos lleva a simplemente resolver el problema, no un problema diferente y más difícil. Lo más difícil de hacer en ingeniería de software es construir una solución genérica, especialmente cuando todo lo que tienes es un problema específico.
En general, es una buena idea, o más bien lo diré de esta manera. Cuanto más viejo me hago, más se parece mi code a un proceso muy simple paso a paso. No impresiona a nadie. Es súper aburrido de ver, y personalmente, creo que el mayor cumplido que puedes recibir sobre tu code es cuando alguien lo ve y dice, espera, ¿eso es todo? Así es, eso es todo. Es simple, fácil de entender y fácil de mantener. Porque siempre tienes que rechazar la complejidad. La ingeniería es una lucha interminable contra la complejidad, y a veces eso significa decir no a un architecture astronauta que intenta construir un framework genérico para resolver un problema para siempre cuando solo necesitas, ya sabes, necesitamos lanzar este code mañana, ni siquiera sabemos qué estaremos construyendo en diez días, y estás tratando de construir un framework.
Solo soluciona el problema, resuélvelo y continúa. Y esto también significa que, nuevamente, porque comprendes tu dominio, porque tienes propiedad a largo plazo de las cosas que estás construyendo, también puedes resistirte a tu producto, a tus gerentes de producto. Muy a menudo, tienes un requisito que arruina toda la historia y la hace mucho más difícil de lo necesario. Por lo general, puedes resistirte a tu PM y decir, oye, esta cosa está dificultando mucho nuestro trabajo, y ellos dirán, oh, sí, mierda, en realidad no necesitamos eso, no nos importa. Simplemente elimina ese requisito y ahora puedes usar una solución muy simple. Y de dónde proviene la mayor complejidad en un proyecto de ingeniería de software no es realmente el code que estás escribiendo, es la architecture que estás creando. Si piensas en tu code como una serie de cajas interconectadas, las cajas son como tu code, esas son clases, modules, servicios, como quieras llamarlos, y las líneas son cómo se comunican entre sí. Cuanto más conectadas estén estas líneas, cuanto más entrelazado esté todo, más complejo será.
Comments