¿Existen roles de ingeniero de software centrados completamente en el desarrollo de nuevos productos?

A todos les encanta embarcarse en los llamados proyectos de “campo verde”. Ahora tengo alrededor de un año en uno. Anteriormente en este trabajo había hecho algunos otros, aunque tenían vidas limitadas y desde entonces han sido retirados.

(Normalmente, una vida útil de uno o dos años para una pieza de software es una señal de que algo salió mal. En este caso, ese fue solo parcialmente el caso. Algunos de estos programas tenían, por definición, una vida limitada, una cantidad limitada de trabajo hacer después de lo cual ya no eran necesarios. Otros mostraron los signos de mi propia inexperiencia con algunas de las herramientas y bibliotecas particulares que utilicé y no fueron un buen ejemplo de diseño de software. Fueron reemplazadas por mejores sistemas).

Otro proyecto mucho más grande y abierto comenzó hace unos años y el nuevo desarrollo continúa a buen ritmo incluso hoy. Es un “marco” para construir tareas de automatización fuera de línea y, por lo tanto, tiene porciones que cambian raramente y porciones que continúan evolucionando y creciendo. Este programa ahora bastante grande es un poco extraño en nuestra arquitectura de servicios de fondo. Se ejecuta principalmente de forma autónoma en lugar de bajo demanda por otros sistemas de clientes. Una implicación de su papel en nuestro ecosistema de back-end es que solo tuve que tratar con otros ingenieros para definirlo y diseñarlo. Un buen concierto, cuando puedes conseguirlo.

El proyecto más reciente, el que ahora tiene aproximadamente un año, es diferente. Si bien no tiene interacciones orientadas al cliente, es de interés para las ramas del negocio que no son de ingeniería. Por lo tanto, se ha enfrentado a algunos de los desafíos clásicos de “requisitos cambiantes” que son tan comunes y similares a los descritos en la respuesta de Alan Mellor.

Esto todavía califica como un proyecto pequeño con solo dos ingenieros que realizan la mayor parte del trabajo de diseño e implementación. (Por cierto, considero que dos o tres personas tienen un tamaño de equipo óptimo si el proyecto se puede hacer con esas pocas personas).

De todos modos, recibimos muchas solicitudes para cambiar las capacidades del sistema a medida que avanzaba el diseño y la implementación. Debido a que ambos somos desarrolladores muy experimentados, hemos creado una arquitectura que podría acomodar fácilmente estas solicitudes. Uno de ellos, sin duda aparentemente simple para los departamentos que lo solicitaron, resultó tener consecuencias algo más significativas. Considero que es un testimonio para mis colegas en otras ramas del negocio, así como nuestra capacidad para explicar por qué ese cambio tendría que diferirse una cuarta parte para que pudiéramos posponer la satisfacción de esa solicitud en particular.

Entonces, sí, a menudo la diversión de la “hoja en blanco” puede ser estropeada por intrusos jugando con su diseño finamente diseñado. Pero ese no es siempre el caso. En cualquier caso, es parte del trabajo. El software rara vez se ejecuta en ningún tipo de aislamiento, ya sea la arquitectura técnica o el entorno, el institucional o los requisitos comerciales.

Sin embargo, no es razonable esperar estar libre de este tipo de requisitos en evolución en su carrera. Básicamente, todos los que escriben software están proporcionando un servicio a otra persona. Esas personas son partes interesadas y tienen un papel innegable en el proceso de desarrollo. El hecho de que a menudo son personas no técnicas crea un desafío. Esta es la razón por la cual, entre otras cosas, la capacidad de comunicarse efectivamente incluso con personal que no es de ingeniería es importante para las personas en roles de liderazgo en el desarrollo de software.

Sospecho que una de las razones por las cuales las personas persiguen sus propios proyectos favoritos es que no tienen que responder ante nadie para hacerlo …

Sí, particularmente en consultorías, pero …

Cada decisión de diseño y línea de código que escriba hoy limita lo que puede escribir mañana.

La línea 1 es el Jardín del Edén. Es como el Valle de Boola Boo Ball [1] donde no tenemos problemas, ningún problema en absoluto.

¡La línea 2 es increíble! ¡Mira lo fácil que fue! Mucho mejor que ese desagradable código heredado escrito por esos viejos tipos. ¡Ojalá hubieran usado nuestra metodología!

La línea 10 es color de rosa. Esos boletos ágiles están comenzando a volar a través de la pared.

La línea 47 lo clava: primer lanzamiento de características. Mismo día. Woo hoo! Estamos en llamas!

Las líneas 50 a 250 pasan sin mucho que decir por sí mismas.

Las líneas 251 – 500 están rodando.

Luego, el propietario del producto pellizca. Todas las sonrisas con dientes (¡guau, son blancas!). ¡Estamos muy bien , dice!

“Ah, y solo una cosa más … ¿puedes negar el comflabulator para el próximo lanzamiento? El cliente lo necesita ayer, y olvide mencionarlo antes ”.

Ah

Lamentablemente, esto requiere un refactor importante de nuestras 500 líneas. Vamos a necesitar agregar un nuevo objeto de estrategia para dar cuenta de esto, agregar una nueva interfaz de usuario para que pueda activar o desactivar la función, tener una versión de la base de datos para que podamos almacenar esta configuración y cambiar un poco de nuestro modelo de objeto .

Una semana después, se puede negar su compilador. Hurra. Pero no sonrisas. Eso se sentía como un trabajo adecuado, ahora.

Entonces Ted se une al equipo. Él codifica un poco diferente a nosotros. Está arrancando nuestro objeto de estrategia, porque no lo entiende, y cree que sería mejor con algunas afirmaciones.

Mientras tanto, hemos estado agregando una nueva característica que se basa en nuestro objeto de estrategia.

Ted se registra primero.

Contemplamos los conflictos de fusión de Git desde el infierno, y secretamente deseamos que Ted se evapore.

Preparamos una taza de té realmente caliente, y después de una hora, decidimos llamar a Ted para hablar sobre lo que habíamos hecho y hacia dónde vamos.

Ted acepta cambiarlo de nuevo … pero … oh … espera, el cambio de Ted escribió cosas en la base de datos en vivo. Por lo tanto, no podemos retroceder sin hacer un ETL en el esquema, por lo que tal vez simplemente nos atenemos a las declaraciones if … tal vez agreguemos otro para delegar en nuestra estrategia … tal vez nosotros …

Y este es el problema con el nuevo desarrollo. No permanece nuevo por mucho tiempo.

Si te tomas en serio una carrera en el desarrollo, abandona cualquier idea de que simplemente “trabajarás en un nuevo código que sea fácil”.

¡No lo harás!

Notas al pie

[1] Tuve problemas para llegar a Solla Sollew – Wikipedia

Si. Trabajar en una startup. Si llega lo suficientemente temprano, es un vasto proyecto totalmente nuevo donde puede elegir tecnologías, construir modelos de datos y diseñar el sistema desde cero.

Para mí, este es un trabajo muy divertido y gratificante, pero es arriesgado porque normalmente no se le paga tanto como lo haría en compañías más grandes (la compensación está vinculada a sus opciones sobre acciones), su trabajo puede desaparecer de la noche a la mañana y realmente necesita para saber lo que está haciendo porque su pequeña y pequeña aplicación podría necesitar repentinamente servir a millones de usuarios y usted solo tiene un pequeño equipo para corregir errores.

More Interesting

¿Qué es mejor en términos de crecimiento y aprendizaje, ingeniero de software en Adobe o SDET en Ola?

¿Qué tipo de pasantías debe hacer un estudiante de ciencias de la computación interesado en la ingeniería de confiabilidad del sitio?

¿Cómo debo prepararme ahora para ser bueno en la codificación (para convertirme en desarrollador, ingeniero de software, etc.)?

¿Cómo pasaste de profesor a desarrollador, cuánto tiempo te llevó?

Cómo obtener una pasantía remota en ingeniería de software en los EE. UU., Canadá, Suecia o Alemania

Soy un desarrollador de software con aproximadamente 2 años de experiencia, ¿quiero explorar el rol como Gerente de Producto? ¿Necesito un MBA para hacer esto?

Quiero ser ingeniero de software, ¿qué debo hacer después de M Tech en informática?

¿Me ayudará un menor de matemáticas y finanzas como desarrollador de software sin un título en Informática? Me especialicé en derecho penal.

¿Qué dice sobre una empresa que está buscando contratar desarrolladores de GO con al menos más de 5 años de experiencia en la construcción y administración de aplicaciones de GO?

¿Qué enfoque debo tomar para aprender ingeniería de software?

¿Cuál es la diferencia entre el grado de ingeniería informática y el grado de ingeniería de software?

¿Hay alguna diferencia entre el motor del juego y el motor de IA?

Como desarrollador de nivel medio, estoy totalmente confundido por las propiedades que mis superiores ponen en cosas como el estilo ¿alguien puede explicar?

¿Por qué los ingenieros no van más allá de ser ingenieros superiores en Google? ¿Es porque no muchos se quedan más de 5-6 años y se van a otras empresas o startups? ¿Qué nivel de ingeniero sería si se quedara en Google por 10 años?

¿Qué cambios verá el campo de desarrollo web entre 2015 y 2025?