¿Cómo es trabajar en ingeniería de software para un contratista de defensa?

Hasta ahora, solo he trabajado en la industria de defensa (excepto durante un semestre como TA cuando estaba en la universidad), por lo que realmente no puedo compararlo con ninguna otra cosa. Puede consultar mi Perfil de Carreras de Desbordamiento de Pila para ver mis antecedentes, si está interesado. Un breve resumen es que he trabajado como pasante para tres grupos diferentes en la Dirección de Información del Laboratorio de Investigación de la Fuerza Aérea, una cooperativa que realiza desarrollo web para una base de conocimiento para la industria de defensa financiada por el Departamento de Defensa, y luego una cooperativa que se convirtió en un trabajo a tiempo completo haciendo ingeniería de software de sistemas para una empresa que fabrica sistemas de inteligencia, vigilancia y reconocimiento tanto para los gobiernos de los Estados Unidos como para los extranjeros.

Creo que lo primero que debe quedar claro es que depende mucho de la empresa e incluso de la división de la empresa. Si está trabajando para un grupo avanzado de I + D o proyectos, algo así como el famoso Lockheed Martin Skunk Works, será diferente a trabajar en el mantenimiento de los sistemas actualmente desplegados o incluso algo que se desplegará en el futuro cercano. Trabajar en prototipos o tipos de prueba de concepto en un laboratorio de investigación también será diferente a trabajar en sistemas desplegados. También dependerá del tipo de sistema y de lo crítico que sea. El software en el que trabajo es crítico para el éxito de la misión, pero el fracaso generalmente no resultará en lesiones o muerte de nadie.

Basado en hablar con personas en otras industrias, creo que una gran diferencia es el nivel de burocracia. Parte de esto es impulsado por los requisitos del cliente (gobierno, generalmente) en el cronograma y los informes de costos. Parte de esto es una necesidad de ingeniería para permitir que el número de personas que trabajan en estos sistemas complejos a lo largo del tiempo los comprendan (documentando los cambios a lo largo del tiempo, requisitos más detallados y especificaciones de diseño, manuales). Pero más burocracia no significa una carga demasiado pesada; es posible que tenga que hacer más cosas en el camino, pero algunos proyectos (dependiendo del producto y el cliente) pueden tener ciclos de lanzamiento de 6 a 12 meses e incluso entregas de pruebas internas de 2 a 3 semanas, al igual que lo que puede esperar de un equipo Scrum más tradicional (supongo que nuestra “definición de hecho” normalmente implicaría más papeleo, supongo).

Tecnológicamente, también tiendo a trabajar con tecnologías más probadas y verdaderas en lugar de lenguajes y marcos de vanguardia. En el mundo de los sistemas embebidos y en tiempo real, encontrará muchos C y C ++. En las aplicaciones de escritorio, tendemos a usar Java, pero otros amigos en la industria de la defensa pueden usar C #, y algunos incluso crean aplicaciones de Android o iOS. Sin embargo, en entornos seguros, puede haber limitaciones de versión según lo aprobado. Probablemente no esté ejecutando el último y mejor JDK que acaba de salir, y es posible que no tenga acceso a Ruby o Python, por lo que creará scripts en shell y Perl. Pero, de nuevo, depende de su cliente y el entorno de implementación. Algunos de nuestros sistemas antiguos ejecutan versiones antiguas de los sistemas operativos vxWorks, mientras que los sistemas más nuevos son Linux en tiempo real en i7s. Puede mantener un código de más de 10-20 años o escribir código nuevo y brillante, pero probablemente esté bien probado y probado en entornos de implementación antes de poder usarlo.

Si tiene preguntas específicas, siéntase libre de dejarlas en un comentario. Puedo editarlas para abordarlas. Hago una combinación de desarrollo de software (ingeniería de requisitos, diseño, prueba, documentación) y mejora de procesos (piense en CMMI, Lean Software Development, ISO 9001 / AS9100), con un poco de apoyo para los gerentes de proyecto.

Solo he hecho esto brevemente y en una capacidad muy limitada. El primero tenía capacidad de diseño, reunía requisitos, redactaba documentación y hacía demostraciones, y el segundo tenía una función de soporte.

Lo primero fue mucho más interesante, y la compañía para la que trabajé tenía una cantidad de personas extremadamente talentosas y dedicadas. Parte de esto fue una batalla cuesta arriba para detallar el software en sí, que en algunos casos tardó mucho más de lo que debería, pero en general la experiencia fue positiva.

Esto último era bastante aburrido, y el proceso para hacer realmente cualquier cosa era horrendo. Requeriría la aprobación de tres o más partes para hacer cualquier cosa, por ejemplo, necesitaba acceso a más información, por lo que esperaría tanto que terminé trabajando en otros proyectos distintos al que me asignaron originalmente. Como contratista, vi cuánto tiempo y dinero se desperdició en el proceso.