Empecé a trabajar como desarrollador de software hace unos 7 años. Desde entonces he tenido múltiples posiciones diferentes en diferentes empresas.
Empecé en el departamento de software de una empresa de ingeniería donde el software es una pequeña parte del producto fabricado o simplemente respalda el proceso de fabricación. El primer proyecto en el que trabajé fue un gran programa de un solo hombre que se convirtió en un enorme desastre de software. Mi jefe en ese momento y el anterior "one man" no estaban interesados en cambiar las cosas, ni mi jefe me permitió hacer las cosas de manera diferente. Fue muy frustrante.
Como recién llegado, traté de aceptar el hecho de que así son las cosas y viví con ello durante algún tiempo. Más tarde me comuniqué con el jefe de mi jefe (lo llamaré Tom) sobre la situación en la que me encontraba y le dije que no cumple con las expectativas de cómo quiero escribir software.
En el transcurso de un año tuve varias reuniones con Tom donde yo y un compañero de trabajo (que se unió al equipo mientras tanto) discutimos la situación y qué se podía hacer para mejorarla. De hecho, esperaba que Tom, en algún momento, sacara a mi jefe y reevaluara quién iba a liderar el barco.
Lamentablemente, esto nunca sucedió (al menos no mientras estuve allí; no pasó mucho tiempo después de eso, cuando el compañero de trabajo mencionado y yo renunciamos).
En realidad no pasó mucho en absoluto. Nunca le dije a Tom que esperaba que las cosas cambiaran radicalmente. Que en la revisión debería haber hecho absolutamente.
En algún momento de una charla con Tom me dijo que lo hiciera como yo pensaba, sin discutirlo con mi jefe, y que si había algún problema, simplemente le dijera a mi jefe que así lo discutimos con él. . En este punto me di cuenta de que Tom estaba fallando en sus responsabilidades de liderazgo al obligarme a pasar por alto a mi jefe. Así que renuncié.
Ahora, unos años y algunas posiciones frustrantes muy similares más tarde, estoy nuevamente atrapado en un proyecto que ha crecido durante muchos años, donde tengo la sensación de que soy el único que está interesado en limpiar el desorden paso a paso. mientras que mi nuevo jefe nuevamente no está interesado en ir en esa dirección.
Y nuevamente, las reuniones en las que trato de señalar que debemos comenzar a crear software limpio nunca son seguidas por ninguna acción. Y nuevamente, las reuniones deben realizarse con "Tom" porque no puedo tener una discusión constructiva cuando me comunico directamente con mi jefe.
Ahora empiezo a cuestionar mi elección de carrera. Tal vez no estoy hecho para ser un desarrollador de software. Simplemente no puedo aceptar la decisión generalizada (tal como la encontré) de escribir software malo y arreglarlo más tarde (lo que, por supuesto, nunca sucede).
¿Acabo de tener mala suerte con las empresas a las que me uní, o no dejé lo suficientemente claro que no es así como quiero hacerlo? ¿O lo están haciendo bien y necesito cambiar mi dominio a algo diferente (diseño, gestión de proyectos, lo que sea).
Enhorabuena, acaba de descubrir cómo es más del 90 % del software empresarial.
Estabas en el lugar equivocado para aplicar tus habilidades. Estas empresas (que constituyen la mayoría de las empresas, que a su vez constituyen la mayor parte del software en producción) no se preocupan por la deuda técnica porque no contribuye a su resultado final, o al menos no lo ven así. forma.
Puede tratar de persuadir a sus superiores de lo contrario, pero es una empresa ingrata porque probablemente estén entrenados para no pensar de esa manera. Además, tienes un tipo de One Man Software que ha estado allí durante años y ahora estás jugando con su juguete. No te metas con los juguetes de otras personas.
Yo estaba en una posición similar donde vendimos un producto de software que sufría de una deuda técnica equivalente a la deuda fiscal de Grecia, y muy pocos indicios de que las cosas fueran al revés*. El ambiente estable y de bajo estrés lo convirtió en un lugar ideal para jubilarse, pero para un joven desarrollador que recién comenzaba, no era para mí.
Dejé ese trabajo y me uní a una consultoría en la que puedo trabajar en nuevos proyectos cada año más o menos, y podemos usar las últimas y mejores tecnologías siempre que podemos.
Entonces, no, no estás en la profesión equivocada, solo en la compañía equivocada.
* Trajeron fondos de capital de riesgo mientras yo me iba y la nueva afluencia de efectivo, junto con las quejas constantes de la mayoría de los desarrolladores, convencieron a la gerencia de hacer sus productos principales desde cero y poner los productos actuales en modo de mantenimiento con un desarrollo limitado. Me alegró mucho escuchar eso y deseé que el proceso hubiera comenzado mientras estaba allí para poder trabajar en ello, pero no regresaría.
tl;dr Por el contrario, debe comenzar a preguntarse si ser ingeniero de software es la carrera correcta cuando deja de preocuparse por la calidad.
Hay buenos libros sobre cómo lidiar con el software heredado (por ejemplo, el siempre verde Trabajar de manera efectiva con el código heredado ); el punto es que no tienes que PEDIR escribir un buen software como no tienes que pedir probar el código que escribes. Refactorizar y mejorar la calidad del código existente casi siempre es parte del proceso de mantenimiento, ya que escribir pruebas también es parte de la entrega de una nueva función. Relacionado e interesante: Como desarrollador; No tener tiempo para probar, recibir plazos extremos y no ser escuchado por el gerente .
Puede huir cada vez, persiguiendo la quimera perfecta de la compañía con la base de código perfecta (o proyectos siempre nuevos sin ningún legado). Alternativamente, puede aceptar este desafío y agregar su propio valor profesional a la empresa para la que trabaja.
Trabajar en proyectos más antiguos también le enseñará lecciones extremadamente importantes sobre escalabilidad, confiabilidad y mantenibilidad que nunca aprenderá si continúa cambiando a nuevos proyectos cada año más o menos.
Lo que puede mejorar es su enfoque del problema. En primer lugar, debe comprender que la deuda técnica es intrínseca en casi todos los proyectos de software, este es un punto fundamental y no puede cambiarlo. Como ya sabes una deuda técnica puede ser alta por muchas razones:
Después de abrazar esta revelación, debe comprender cómo manejarla . A veces, una reescritura completa es una opción posible, pero, por lo general, debe explicar a sus gerentes cuál es el valor que esta gran inversión aportará a la empresa. Esto ha sido ampliamente discutido y no lo repetiré aquí, la estrategia correcta es ligeramente diferente para cada uno de los casos mencionados anteriormente. Este es el punto principal: un gerente no técnico (pero también técnico porque desde su posición verá las cosas desde un punto de vista diferente) no está en contra de la calidad pero necesita justificar la inversión , considere:
¿Qué hacer? Comience con la comunicación: en primer lugar, explique la situación , pero no se limite a despotricar sobre la calidad del código o nadie lo escuchará:
Si no están de acuerdo con dicha reescritura (bien podría estarlo), entonces debe adoptar un enfoque paso a paso como parte de sus deberes diarios.
Lo que puedes hacer es entender que es TU DEBER escribir un buen código con todas las restricciones dadas por tu gerencia (tiempo, presupuesto, recursos). Significa que DEBE:
Itere suficientes veces y su base de código ahora será lo suficientemente buena . A veces, algunos cambios arquitectónicos importantes pueden necesitar aprobación porque son demasiado largos o complejos, pero cuando llegue a ese punto, probablemente ya tenga una base sólida.
Este es un proceso invisible, la calidad está en constante evolución pero no es necesariamente visible desde el exterior. Creo que esto es lo que Tom (el jefe del primer jefe) trató de decirte: "haz tu trabajo (¡paso a paso!) sin molestar a tu jefe, es tu deber y confío en que sabes cómo hacerlo (envíamelo si por el caso no entiende esto)". ¿Debería tener que hablarlo con tu jefe? No puedo decir, pero si haces tu trabajo de una manera no disruptiva, entonces el proceso es invisible y efectivo.
A veces ellos [la gerencia/el jefe] tienen la culpa, pero a menudo se trata de un problema de comunicación . Puede que desee leer Representación y tergiversación: Tufte y los ingenieros de Morton Thiokol en el Challenger y el texto original de Tufte en Explicaciones visuales: imágenes y cantidades, evidencia y narrativa .
Sí, muchas de las empresas más grandes tienen grupos de "intocables" donde ingresa gente nueva y no quieren que rompas un producto "funcional". Lo vi en mi última empresa. Un pequeño grupo de personas desarrolló el software principal de la empresa. Todos ganaron posiciones gerenciales y gozaron de buena reputación con la alta gerencia. Contratan nuevos desarrolladores porque justificaron que necesitaban nuevos desarrolladores para continuar con el crecimiento del producto. Entra gente nueva, y el grupo original que lo hizo simplemente espera que los desarrolladores más nuevos trabajen en el producto de la manera que ellos quieren.
Es bastante común en empresas que entraron en algún nicho de mercado. En mi última empresa, nunca tuvieron ningún software o productos relacionados con TI y una vez que se mudaron a ese mercado, las personas que fueron contratadas originalmente triunfaron ya que se convirtieron en el grupo de referencia una vez que el software maduró. Ninguno de los altos directivos entiende cómo funciona el desarrollo de TI y confía en el grupo original de desarrolladores. Solo se preocupan por los ingresos y si están entrando. Se apresuran a despedir a cualquier nuevo gerente contratado que no cumpla con esta expectativa.
Tendrá que encontrar una empresa que no genere ganancias únicamente o encontrar una empresa bien establecida que siempre haya estado en el campo de TI con ejecutivos de TI y alta gerencia.
Por lo general, puede resolver esto sin preguntar directamente. Simplemente pregúntele al gerente principal cómo llegó a su puesto dentro de la empresa. Si te cuenta una historia como la anterior, entonces sabes qué esperar.
Materia oscura
luego