¿Por qué necesitamos tantos ingenieros?

Mucha gente que nunca ha trabajado en proyectos de software a gran escala parece tener poca comprensión de cuán colaborativo es el proceso. La analogía que me gusta usar es hacer películas. Claro, puedes filmar una película con poco presupuesto, solo con unas pocas personas. Pero si la historia requiere secuencias de acción, efectos especiales, trabajo de ubicación, una gran cantidad de extras, etc., la cantidad de personas involucradas puede crecer hasta los cientos. El desarrollo de software es muy parecido a eso. Existen roles especializados para muchos tipos de trabajo, incluyendo pruebas, codificación, arquitectura, localización, globalización, gestión de productos, interfaces de usuario, compilaciones de software, etc. Muchos de estos roles se cuentan como roles de “ingeniería” cuando se resumen en recursos humanos o departamentos de finanzas, estén o no estrictamente reconocidos como tales en otros contextos.

Cuanto más software construyas, más tienes que mantener. Por lo tanto, muchos ingenieros de Google trabajarán para respaldar, mantener y evolucionar el software existente. Solo una fracción de ellos trabajará en productos completamente nuevos.

Cuantos más ingenieros tenga en desarrollo de código, mayor será la infraestructura de soporte que necesita para ellos. Eso significa sistemas de control de origen, sistemas de gestión de tareas, sistemas de seguimiento de errores, etc. Estos sistemas necesitan sus propios ingenieros para mantenerlos y adaptarlos a nuevos proyectos.

Ve a un moderno astillero e intenta encontrar un constructor naval. No hay ninguno. Encontrará soldadores, electricistas, ingenieros mecánicos, arquitectos navales, instaladores de vapor, etc., pero no encontrará un constructor de barcos. Los barcos modernos son grandes sistemas creados por el esfuerzo de colaboración de muchos roles de especialidades diferentes, todos trabajando juntos dentro de un conjunto de procesos. Es un sistema humano. El sistema construye la nave.

Lo mismo es cierto para el desarrollo de software a gran escala. Es por eso que Google emplea a tantos ingenieros.

Millones de líneas de código para escribir, probar, mantener y reemplazar en un ciclo sin fin para garantizar la seguridad, la confiabilidad, la facilidad de uso, etc. Y no se hace por sí solo. La mayoría de los equipos de ingeniería están orientados a productos, orientados a funciones u orientados a funciones. Algunos son arquitectos de sistemas, otros son especialistas en aplicaciones, otros son evaluadores y otros son simplemente jugadores, que intentan romper el sistema. Y, están diseminados geográficamente y utilizan múltiples sitios, y toda la bola de cera se basa en una interconectividad perfecta. Y, por cierto, muchos se van en medio de proyectos o se encuentran con problemas personales, o simplemente no les gusta el entorno y quieren hacer otra cosa. Podemos llamarlos ingenieros, pero en realidad son arquitectos, analistas, programadores, programadores, probadores, implementadores … bueno, entiendes la idea. Las grandes empresas tienen grandes demandas de mano de obra calificada.

¿Sabes qué es mejor que un genio? Un genio cuyas ideas se implementan más rápido de lo que ella podría por su cuenta.

Hay un montón de trabajo involucrado para cualquier proyecto significativamente complicado. Si puede contratar a buenos ingenieros que trabajan bien con la dirección, el genio que contrató no se quedará atascado con estas cosas y podrá concentrar sus esfuerzos en las ideas y el diseño.

Cuando contrates a un arquitecto para diseñar un edificio, sería una pérdida de tiempo y talento hacer que ella también lo construya por su cuenta.

(Estoy usando la “ella” real aquí; no es mi intención marginar a los hombres u otros géneros).