Soy referente técnico pero perdí el liderazgo en decisiones técnicas

Fui contratado como Freelance (Referente Técnico) en una empresa sólida para construir una nueva versión de su aplicación móvil que yo mismo les sugerí.

Te necesitamos porque tus habilidades son escasas y realmente disfrutamos tu aplicación móvil personal, que nos mostraste durante la entrevista. Si aceptas, liderarás el proyecto.

Tengo mucha experiencia en los campos de la programación por lo que la propuesta me interesó.

Comencé un prototipo e incluso agregué algunas características geniales, cuando ambos jefes vinieron y me dijeron algo extraño:

Nos encanta lo que creaste en este momento para nuestra próxima aplicación móvil, pero tus habilidades y la calidad de tu código son demasiado altas para que todo el equipo de desarrolladores las entienda. Tuvimos una reunión (sin mí, por lo tanto), y dejamos caer algunas metodologías que recomendaste:

  • No más desarrollo basado en pruebas y no más pruebas unitarias.
  • No hay revisiones de código tan exigentes.
  • Algunos copian y pegan de la versión anterior de la aplicación, con el fin de ir rápido para otros desarrolladores. (El código de la versión anterior era totalmente ilegible y feo; créanme).

No hace falta que te lo diga: se me escaparon algunas lágrimas al escuchar eso...

Es cierto, soy perfeccionista. Es cierto, la programación de software es mi principal pasión.
Es cierto que tengo habilidades poco comunes para la programación (según muchos desarrolladores que conozco).
Es cierto, espero una calidad de codificación muy alta.
Es cierto, quería/quiero ayudar al equipo a mejorar, con lecciones gratuitas mías, revisiones detalladas de código, etc.

Mis jefes siguen esperando de nosotros una buena calidad de software, porque aspiran a ser el líder en aplicaciones del país en su ramo.

Lucho por aceptar esas nuevas "directrices" porque van en contra de mi profesionalismo sobre el software.

Hace dos días, vi una montaña de código de otros desarrolladores con el objetivo de integrarse en la aplicación que hace que todo funcione mal. Si sigue así, pronto será demasiado tarde.

¿Cómo debo convencer a los jefes (no programadores) de que para terminar con un software realmente bueno se requieren todas las metodologías que traté de imponer y buenos desarrolladores (no me atrevo a revelarles mis pensamientos sobre las malas habilidades de los otros desarrolladores)? ?

En un mes decidiré si renuevo mi contrato (ellos quieren) o busco otra misión.

-------ACTUALIZACIÓN------- 15/11/2016

Acabo de hablar con el cliente (director de la empresa) sobre esta situación.
Ahora entiendo todo:

Claramente no sabían que trabajo aquí en nombre de mi propia empresa llamada "XXX".

La razón es que mi headhunter me vendió como un simple consultor de SU empresa, un simple recurso, en lugar de presentarme como presidente de una empresa, con el objetivo de prestar servicios por mi cuenta.
¡Lo acabo de aprender!

Entonces el cliente admitió que visto como un "simple recurso, además de tener el título de experto", yo era demasiado decisor en el proyecto que me encomendaba; que "asustó" a la gente.
Entiende mi actitud y mi incomprensión de la situación.
En mi mente, actué como una entidad completamente separada y autónoma, con el objetivo de brindar un servicio, aunque estando presente localmente, en un espacio abierto.

En mi contrato con este cazatalentos, estaba escrito que actuaría como representante de XXX, no como "Michael".

Como XXX y para aumentar mi reputación, esperaba metodologías de desarrollo tan estrictas para construir un gran producto y no ser frenado por las "pobres" cualidades del equipo global.

Tenga en cuenta que solo dos personas trabajaron conmigo en este proyecto, no 10.
No deberían ser esos dos compañeros de trabajo (que claramente afirmaron no querer evolucionar y aprender metodologías de codificación) los que me evitarían producir un producto realmente bueno.

Tengo que hablar seriamente con este cazatalentos ahora mismo...

Buena lección para mí.

Los comentarios no son para una discusión extensa; esta conversación se ha movido a chat .
¿Es esta la primera vez que ha estado en un puesto de autónomo/contratista?
@mcknz La primera vez para una gran empresa. Tuve muchas misiones independientes para empresas más pequeñas como nuevas empresas o empresas con menos de 10 empleados.
La cuestión clave es que celebraron una reunión sobre ti sin ti. Eso debería decirle que (a) son incompetentes como líderes o (b) no entienden su valor (que es una incompetencia de otro tipo). No es un buen lugar para estar.
@Mik378 tiene sentido: en un entorno más pequeño, es más probable que lo llamen como especialista/experto. En una empresa más grande, es más común que lo contraten esencialmente como un aumento de personal, como colaborador individual. Parece que este no es el tipo de trabajo que quieres hacer.
Sí, estoy totalmente de acuerdo.
Te entiendo, las grandes empresas tienen poca flexibilidad.
Es irrelevante si fue contratado directamente por su empresa o a través de una paraguas. Se le asigna un rol y esa característica no lo cambiará (no debería cambiarlo). Me parece que, en cambio, esa fue una mala excusa para justificar algunas malas decisiones técnicas de personas no técnicas/no competentes. Por otro lado, sé humilde, no creas que eres mejor que el resto porque eres un contratista: estás usando 'presidente', 'cazatalentos' y 'recurso simple' para significar CEO, reclutador y compañero de trabajo. La producción de software tiene un componente social muy importante.
En un principio me han dicho que haría la aplicación totalmente sola. Desde hace un mes, otro desarrollador quería trabajar conmigo, y acepté y el jefe también. Su frase fue: "¿Puedes escribir esta aplicación solo?", Yo digo: "Sí", "Ok, ¡vamos!" (me dijo). Como el proyecto era atractivo a medida que evolucionaba, atrae a otros desarrolladores para que trabajen en él. El truco es que rápidamente, el código se ensució, pasé noches limpiando su trabajo. Sugerí enseñarles algunos conocimientos, hacer algo de programación en pareja mientras les mostraba consejos y buenas prácticas, etc., pero claramente no quieren.
¿A qué te refieres con clases gratis? ¿Te pagaron por ellos? ¿Los compañeros de trabajo ger pagaron por ellos?

Respuestas (8)

Esta línea destruyó mi confianza en los líderes de su empresa:

No más desarrollo basado en pruebas y no más pruebas unitarias.

Esa es una mala decisión, no puedo imaginarme trabajando en un lugar que se comporte o crea eso. Desperdiciará de 10 a 100 horas corrigiendo errores, porque quieren ahorrar 1 hora al no usar el desarrollo basado en pruebas o las pruebas unitarias.

Eso es mala programación, mal negocio y delata una falta de comprensión del pensamiento sistémico. No se puede confiar en esas personas. Son incapaces de tomar buenas decisiones de manera confiable en CUALQUIER área del negocio.

Sin el pensamiento sistémico, los líderes a la larga te harán daño.

Sal ahora.

Los comentarios no son para una discusión extensa; esta conversación sobre los méritos de TDD se ha trasladado al chat .
TDD no se acepta universalmente como un ROI positivo. Su utilidad es controvertida. Sin duda, es muy políticamente correcto afirmar que TDD es el único camino a seguir, sin embargo, es bastante difícil encontrar una investigación exhaustiva que realmente corrobore su utilidad.
Las pruebas de la unidad @BradThomas, sin embargo, no son controvertidas.
@BradThomas ¿algún enlace/recurso para respaldar esta afirmación?
@kazanaki eres programador? Debería ser obvio si lo eres. Tener pruebas unitarias es lo importante. TDD conduciendo todo es lo que es controvertido, y por una buena razón. Es un gran disipador de tiempo.
@sgroves "es un gran disipador de tiempo" = "en los proyectos en los que he trabajado es un gran disipador de tiempo"

Recuerde que la codificación no existe en el vacío. Incluso el código que es menos que ideal puede resolver problemas empresariales o humanitarios reales.

La calidad no es una propuesta de todo o nada. Sin duda, hay situaciones en las que un equipo es tan joven que la introducción de complejidades puede matar la productividad y la moral, y no cumplir ni siquiera con los objetivos básicos de todo el proyecto.

Supongo que usted mismo no comenzó su carrera haciendo TDD, simulación, programación de interfaces, inyección de dependencia, composición sobre herencia, control de versiones distribuidas y cosas por el estilo.

Trate de comprometerse. Haga un plan con los jefes para introducir prácticas modernas de desarrollo de software a lo largo del tiempo. Ofrezca enseñar al resto del equipo sobre estos principios, utilizando tutoría individual, almuerzo y aprendizaje o capacitación autodirigida.

Vea si hay características agradables que el equipo pueda usar para experimentar con técnicas que son más nuevas para ellos, donde supervisaría la calidad del código, las revisiones, la aprobación de las pruebas y cualquier otra cosa que considere necesaria.

Se trata de encontrar un equilibrio entre la productividad inmediata y las prácticas de desarrollo sostenible a largo plazo.

Eso, por supuesto, tomará tiempo y tendrá que determinar si ese tiempo vale su inversión personal. Si los jefes no están dispuestos a comprometerse, es probable que esa decisión se tome por usted.

Creo que un comentario que puse a continuación podría comentar su respuesta también.
Estas dos líneas deben estar en negrita: "Haga un plan con los jefes para introducir prácticas modernas de desarrollo de software a lo largo del tiempo". & "Se trata de encontrar un equilibrio entre la productividad inmediata y las prácticas de desarrollo sostenible a largo plazo". Ofrecen un camino claro a seguir con un beneficio mutuo para todas las partes involucradas.
Muy buena respuesta en mi opinión. No huyas antes de intentar encontrar un compromiso. Yo mismo, como junior, diría que TDD es difícil de entender y no se puede pedir de manera realista que un junior haga TDD. Las pruebas unitarias son importantes, pero no apunten a una cobertura del 100 %. Las pruebas bien diseñadas en puntos críticos pueden ser suficientes. Tenga en cuenta que podrían escribir pruebas unitarias deficientes de todos modos. Pero, por supuesto, copiar y pegar de una versión anterior y no más pruebas unitarias es una herejía. Asegúrese de que la gerencia entienda esto.
Y como consultor "Ayudé a x empresa a adoptar mejores prácticas" suena mejor que "Me fui porque no me escucharon". Por si acaso, si aborda esta bestia ahora, será una experiencia de aprendizaje invaluable para tareas futuras.
@EtsitpabNioliv Honestamente, he estado pensando que una cobertura de prueba del 100 % es un antipatrón desde hace un tiempo (independientemente de la experiencia del equipo). La cantidad de código adicional escrito para las pruebas unitarias eventualmente llega a un punto de rendimiento decreciente tanto en el desarrollo como en el mantenimiento de características.
+1000. Me tomó más de un año conseguir un equipo que realmente hiciera TDD y CI. Pasarán otros 6 meses hasta que lleguemos a la implementación continua. El punto es que se necesita tiempo para cambiar un equipo (y aún más tiempo para cambiar una empresa).
Acabo de actualizar mi OP con algunas noticias.

He peleado esta batalla más de dos veces.

Esto es lo que se dará cuenta en algún momento: ningún ejecutivo quiere admitir (y probablemente incluso a sí mismo) que está produciendo basura. O enfrentarán el dolor y realizarán los cambios necesarios para producir un buen producto, o "justificarán" la decisión con una combinación de problemas sobre una crisis presupuestaria y racionalizaciones irracionales como las que describió anteriormente.

La organización ha hablado, y no se puede luchar contra esto Y entregar un buen producto al mismo tiempo.

O haces las paces con poner tu nombre en algo que sabes que no está a la altura de tus estándares, o encuentras un lugar en el que tus talentos y estándares serán de beneficio.

Tengo tu punto. Triste sería la palabra así.
Acabo de actualizar mi OP con algunas noticias.

No es su producto, básicamente necesita conformarse o seguir adelante.

Como autónomo, deberías haber experimentado esto antes. Tienes que trabajar dentro de lo que te permita la gente que te paga. Es obvio que no les gusta tu estilo de liderazgo y eres perjudicial para su equipo, así que después de revisar sus opciones (sin ti), esto es lo que se les ocurrió.

Asegúrese de que le paguen e intente marcharse en buenos términos cuando esté listo, pero no se enoje por un producto que no es de su propiedad.

Solo una sugerencia, pero las habilidades de programación no lo son todo cuando se trabaja con un equipo en cualquier tipo de función principal. Es posible que te vaya mucho mejor si buscas proyectos en solitario que realmente puedan hacer brillar tus habilidades. Esta es una de las razones por las que a menudo rechazo trabajos que involucran a un equipo desconocido que no podría hacerlo por sí mismo (si fueran competentes y eficientes, no me necesitarían). Prefiero empezar de cero, ya sea solo o con mi propio equipo. Menos dolores de cabeza y más satisfacción laboral (más dinero también por lo general).

Acabo de actualizar mi OP con algunas noticias.
Leo tu respuesta una vez al mes y me hace feliz cada vez ;)

Pon tu dinero dónde está tu boca. Abandonar.

Renunciar al puesto informando a toda la cadena de gestión que no puede cumplir con lo que se le contrató y, como tal, como trabajador independiente, prefiere renunciar al contrato que apoyar un esfuerzo de desarrollo por debajo del estándar. Infórmeles que se trata de un incumplimiento de contrato (suponiendo que usted haya sido contratado para tomar esas decisiones) y, como tal, no ve justificado perder su tiempo, y su dinero, en su salario.

No hay mucho que puedas hacer. A menos que tenga motivos ocultos (necesite el dinero para otros proyectos), esa es la forma más sincera de manejar esto, dado que personalmente lucha con cómo va el proyecto.

Alternativamente, póngase en contacto con un nivel más alto e intente encontrar una manera de hacer que las cosas funcionen a un nivel aceptable. Sin embargo, es posible que trabajen con personas que prefieren voltear hamburguesas en McDonalds, visto eso en muchas compañías más grandes. Una vez me contrataron para enseñar C# a los desarrolladores de VB. Un plan de estudios de un mes condensado en 3 días ("no podemos tenerlos sin trabajar durante un mes, y todos son desarrolladores experimentados"). Bueno, los desarrolladores experimentados no conocían la diferencia entre una matriz y una tabla hash/diccionario en un nivel fundamental, por lo que se desperdició todo el tiempo. Ese es el nivel en algunas empresas.

No puedes luchar contra eso. El pescado comienza a apestar desde la cabeza, que es la gestión. Lo pagan, con el tiempo. Pero no es tu trabajo cambiarlo. Si no puedes soportarlo, vete.

Me centraría en cosas diferentes. Porque:

No más desarrollo basado en pruebas y no más pruebas unitarias.

Esto apesta pero es comprensible. Es un gran cambio de paradigma y se adapta mejor a un proyecto nuevo que a la continuación de uno antiguo.

No hay revisiones de código tan exigentes.

Eso también es comprensible. En mi humilde opinión, el nivel de exigencia debe aumentarse gradualmente para que las personas aprendan nuevas habilidades.

Algunos copian y pegan de la versión anterior de la aplicación, con el fin de ir rápido para otros desarrolladores.

Eso es comprensible y puede estar bien, si esas viejas piezas de desorden se separan bien del resto del proyecto.

Ahora, ha enumerado las cosas que han dejado caer, pero la lista no se puede juzgar sin saber cuánto de sus recomendaciones se quedaron en su lugar. Si esos 3 fueron los pilares de tu metodología, no queda nada de tu diseño y eso es malo. Si esos fueran solo 3 de 15, entonces la mayor parte todavía está en su lugar y eliminar esos 3 es realmente lo que dice en la etiqueta: amortiguar el impacto para los programadores restantes.

Pero la otra parte es la más alarmante para mí:

Tuvimos una reunión (sin mí, por lo tanto), y dejamos caer algunas metodologías que recomendaste.

Te pidieron que diseñaras algo y luego modificaron el diseño sin consultarte. Esa es la bandera roja. Ya sea para ellos o para usted, porque podría ser usted quien simplemente se niegue a escuchar sus argumentos hasta el punto de que tengan que emitir una orden directa.

Si estima que han abandonado la mayor parte de su plan, puede significar que no entienden nada. Quieren que su código mejore, pueden pagar su salario, pero no pagarán el costo real: el esfuerzo. Es como un tipo que compra suplementos de proteína con la vana esperanza de que un producto le dará músculos mágicamente sin hacer ejercicio. Los suplementos proteicos no funcionan así y tampoco eres un producto mágico que puede arreglar su proceso sin cambiarlo. Es aterrador cuántas personas piensan que las balas mágicas son reales.

Por otro lado, la producción de software comercial no se esfuerza por lograr la perfección absoluta, es solo suficiente esfuerzo (lo que significa tiempo, lo que a su vez significa dinero) invertido en la perfección hoy para ahorrar aún más esfuerzo (léase: tiempo, léase: dinero) en el largo plazo. Cada reparación cuesta dinero y es justificable solo si dejar el error cuesta aún más. Lo que realmente necesitas para ser bueno es el compromiso. No todos están hechos para el trabajo (ciertamente, ser demasiado perfeccionista no ayuda), la única forma de averiguarlo es probarlo.

Depende de usted decidir si la cantidad de libertad de diseño restante es suficiente. Si cree que lo han contratado para hacer un trabajo y ahora le dicen que no puede hacerlo, quedarse allí puede ser una pérdida de tiempo para todos.

Siempre puedes tratar el trabajo como una lección. Aléjate, observa y aprende. Incluso si eres técnicamente perfecto, aún necesitas la habilidad de "trabajar con otras personas". Diablos, trabajar con personas que no son tan buenas como tú requiere aún más de esa habilidad.

No me concentraría demasiado en las decisiones que se tomaron. La información importante aquí es: se encargaron de tener una reunión sin usted sobre cosas que eran de su responsabilidad. Muestra una pérdida de confianza en ti.

Necesitas entender de dónde vino eso en primer lugar. Te ves técnicamente adecuado considerando lo que se te pidió: los convenciste como tal. Pero no te contrataron porque eres técnicamente bueno, te contrataron para solucionar un problema que tenían y pensaron que podías hacerlo.

Puedo ver varios problemas que podrían ocurrir con esta disonancia (el hecho de que creas que te contrataron por una razón, en comparación con la verdadera razón):

  1. Falta de goles:

    • ¿Te dijeron lo que esperaban de ti?
    • ¿Preguntaste qué querían?
    • ¿Te perdiste algo que te dijeron?
    • Tal vez haya escuchado: "¡Queremos software de calidad!" cuando querían decir "¡Queremos un software que la gente use!".
  2. falta de transparencia: llegas a este nuevo trabajo y aplicas todas las mejores prácticas conocidas en tus campos.

    • ¿Cómo se comunicó al respecto?
    • ¿Fuiste demasiado rápido?
    • ¿Todo el mundo era consciente de las consecuencias porque siempre hay una compensación?
    • ¿Explicó que la curva de aprendizaje perjudicará la productividad?
  3. Apoyo desde abajo: Su metodología impactó la vida de su equipo, necesitan estar convencidos de que van en la dirección correcta.

Solo puedo especular en este punto, pero puedo ver por qué, en el espacio de unos pocos meses, los desarrolladores se asustaron porque no ven el valor agregado (todavía) de los cambios y sus jefes se asustaron porque las funciones no están disponibles. tan rápido como pensaron que lo harías y los desarrolladores se están vengando de ellos, descontentos.

Debe aprender de esta experiencia para la próxima vez, ya que las cosas están bastante avanzadas en su caso.

Pero si algo hay que salvar es la confianza y la paciencia. Si algo,

  • Siga la corriente reconociendo los problemas que plantearon.
  • Acepte la mayoría de sus cambios y agregue sus puntos más valiosos (solo con la condición de que vea un futuro aquí)
  • Haga un cronograma para reintroducir las mejores prácticas de manera lenta pero segura, explicando qué problemas están solucionando esos métodos (no se necesitan paracaídas en los automóviles, pero un cinturón de seguridad puede ayudar;)

Convence a la gente para que esté de tu lado, cueste lo que cueste, porque si no puedes hacerlo, tu batalla está perdida.

Acabo de actualizar mi OP con algunas noticias.

No estoy seguro de los detalles exactos de su situación, pero creo que tener experiencia técnica y poder liderar un equipo para hacer las cosas de una manera específica son dos cosas separadas. El libro 'Extreme Ownership' profundiza en la dinámica del equipo, tal vez sea útil.