¿Qué habilidades debo cultivar para convertirme en un líder de desarrollo / técnico? [cerrado]

82

Actualmente soy un programador profesional. Quiero ampliar mi conjunto de habilidades, pero también quiero hacer que la carrera salte a ser un líder de desarrollo como parte de un equipo. Sé que tiene que haber mucho que aprender (y esto no será algo instantáneo), pero creo que soy lo suficientemente inteligente como para hacerlo y estoy a la altura del desafío.

Estoy seguro de que muchos de los miembros aquí probablemente hayan pasado por esto ellos mismos y ahora sean líderes de desarrollo exitosos. Desafortunadamente, aunque conozco algunas áreas personales que me gustaría mejorar (profundidad de conocimiento, amplitud de conocimiento, habilidades, etc.), no estoy realmente seguro de cómo comenzaría algo como esto.

Como programador ahora, ¿qué pasos debo seguir para lograr este objetivo? ¿Qué debería priorizar?

almuerzo317
fuente
¿Hay oportunidades en su empresa actual para ser promovido a líder de equipo? Sin experiencia en liderazgo de equipo, me pregunto si demasiadas empresas solo contratan desde dentro.
JeffO
@JeffO De hecho, acabo de cambiar de trabajo. No sé si tendré la oportunidad aquí, creo que existe la posibilidad, pero es una pequeña startup y creo que solo habrá un líder de desarrollo a la vez.
lunchmeat317
2
Solo una habilidad: la capacidad de persuadir a una persona que puede darle esta posición para que le dé esta posición a usted.
vortexwolf
1
Como resultado, existe una posibilidad muy clara de que en realidad no estoy hecho para esto. Por mucho que me gustaría avanzar en mi carrera en esta dirección, creo que caigo más en el lado de los desarrolladores, solo quiero poner la cabeza baja y codificar, a veces. Aún considerando las posibilidades, pero ahora con precaución.
lunchmeat317

Respuestas:

90

Para convertirse en un líder técnico, lo siguiente es esencial

  • La capacidad de guiar a los miembros del personal en todos los niveles de antigüedad, desde alguien que ha estado fuera de la universidad durante 3 meses hasta una persona que ha estado programando durante 30 años.

  • Un buen conocimiento de su dominio de desarrollo. Esto incluye: lenguajes, marcos, utilidades, entornos de desarrollo.

  • Una sólida comprensión de los sistemas de gestión de problemas, habilidades de gestión de proyectos y control de versiones.

  • Sé el asesino de insectos

  • Sepa cómo realizar revisiones de código oportunas, qué buscar y cómo minimizar la cantidad de tiempo que tardan en retener y para que se realicen los cambios

  • Manténgase actualizado con los desarrollos en su dominio de desarrollo. Por ejemplo, si no aprendió nuevos marcos o tecnologías de .NET 2, hoy estaría haciendo las cosas de manera bastante retrógrada.

  • Cómo escribir pruebas unitarias y simulacros, y hacer que sus desarrolladores también los escriban

  • Conocimiento de qué son los patrones de diseño y cuándo usarlos.

  • Conocimiento de qué son los olores de código y cómo mitigarlos

  • Integración continua

  • La capacidad de planificar proyectos y lanzamientos

Dependiendo de su organización y si tiene arquitectos en el personal, probablemente necesite saber lo siguiente:

  • La capacidad de componentes de sus proyectos y dividirlo en partes funcionales

  • Un conocimiento profundo de la seguridad, incluida la forma correcta de manejar contraseñas, separar sistemas, proteger datos, etc.

  • Conceptos empresariales como buses de servicio, colas de mensajes, BizTalk

  • Patrones de diseño empresarial

  • Arquitecturas de servicios / RPC como SOAP y REST

  • Marcos ORM como Hibernate, Entity Framework, Doctrine

  • Despliegue continuo

  • La nube

  • La capacidad de recomendar las tecnologías correctas para usar en un proyecto. Esto podría ser difícil si su equipo / tienda solo lo hace .NET, PHP o Java.

  • Diseñe la aplicación de tal manera que las mejoras futuras se acomoden fácilmente

Si va a ser gerente de desarrollo, también necesitará:

  • Habilidades para entrevistar y cómo encontrar al personal adecuado
  • Cómo lidiar con los problemas de las personas con los miembros de tu equipo
  • Administrar directivas / objetivos comerciales y convertir los relevantes en información para sus desarrolladores
  • La capacidad de estimar el tiempo para programadores de diferentes habilidades.
  • La capacidad de asignar tareas a los desarrolladores correctos en función de sus habilidades y capacidades.

Y finalmente, algunos otros puntos recomendados:

  • Aprende fuera de tu dominio de desarrollo

  • Aprenda a decir NO cuando las cosas no sean posibles o estén fuera de alcance o entren en conflicto con restricciones como el presupuesto o el tiempo.

Administrar un equipo es un papel desafiante. Debes ser la persona que pueda responder cualquier pregunta, debes conocer las tecnologías adecuadas para usar (a menos que tengas un arquitecto), debes tener habilidades de gestión de personas y ser accesible por su personal (asumiendo un puesto directivo). Además de esto, debe tener habilidades de estimación precisas para garantizar la rentabilidad del proyecto y debe poder ensuciarse las manos con el código de cualquier persona para detectar problemas y solucionarlos rápidamente. Debe evitar querer hacer todo usted mismo y fomentar un entorno de equipo que no sea tóxico. Debe estar continuamente al tanto de su pila de tecnología y aprender los últimos desarrollos y técnicas, así como las tendencias más amplias de la industria.

También debería conocer al menos una plataforma de base de datos, y conocerla bien. Sepa cómo realizar la replicación, los procedimientos almacenados, cómo funciona el optimizador de consultas y cómo diseñar un esquema correctamente, y qué campos indexar.

Independientemente de la posición exacta, cualquier función de alto nivel requiere que tenga la capacidad de comunicarse de manera efectiva. Si no eres un orador seguro, mira hacer algo como Toast Masters (hablar en público). Aprender cómo hacer y mantener contacto visual. Tener confianza. Vístase apropiadamente para el puesto. Predicar con el ejemplo.

Sam
fuente
2
Esbocé algunas ideas que se me ocurrieron rápidamente. Volveré a visitar y agregaré más tarde. Buena pregunta.
Sam
Puedo secundar los beneficios de Toastmasters. Me ha ayudado bastante en mi carrera. Ser capaz de comunicar claramente sus pensamientos (especialmente los pensamientos técnicos a personas no técnicas) es una habilidad invaluable para poseer.
Jason Swett
27

En mi experiencia, el Lead tiene un poco menos que ver con el trabajo sucio de la programación práctica y más con la gestión. Para ello, recomendaría lo siguiente

  1. Invierta más tiempo en diseño y actividades arquitectónicas y desarrollo . Como líder, su función se centrará en proporcionar orientación técnica y dirección a su equipo. Tendrás más tareas para comprender cómo encajan las piezas en su conjunto y menos cómo funciona la tubería. No me malinterpreten, se requieren habilidades técnicas sólidas para ser un líder eficaz y conocedor, pero una visión de nivel superior de lo que está sucediendo y cómo funcionará será más crucial aquí. Debe conocer más patrones de diseño de mejores prácticas y prácticas de codificación efectivas.

  2. Aprenda a realizar múltiples tareas y administrar el tiempo . Si eres bueno en eso ahora, está bien: desarrolla más. Como desarrollador, solo tiene que preocuparse de su tarea / proyecto actual. Como una ventaja, tendrás

    • Para asistir a más reuniones de las que le interesan. Esta es quizás la parte más entumecedora del liderazgo del equipo
    • Trabajar en la asignación de recursos. Si tiene suerte, los recursos serán escasos y los proyectos abundantes.
    • Liderar la arquitectura y el diseño del proyecto.
    • Dependiendo del tamaño y la estructura de la organización, proporcione una gran cantidad de informes, a tiempo y a tiempo. Piense en el líder como un gerente de proyecto de bajo alquiler.
  3. Prepárese para delegar efectivamente . Esta IMO será la parte más difícil de ajustar. Como desarrollador, estás acostumbrado a ensuciarte las manos y hacer las cosas. Haciendo toda la fontanería e investigación. Eso tendrá que detenerse o reducirse. Entran los conciertos, lo repartes al equipo. Obtendrá una parte de la acción, no solo la que está acostumbrado. Y te morderás la lengua para resistir la tentación de arrinconar más acción por ti mismo.

  4. En la línea más profesional, considere un entrenamiento que no solo aumente su capacidad, sino que cambie su perspectiva . Un curso intensivo en la gestión de proyectos de software no hará daño Lean Six Sigma también es un muy buen programa de capacitación (puedo dar fe de su eficacia) que lo ayudará a ver la resolución de problemas desde un ángulo más lógico. Sin mencionar que desde el puesto de líder, estás preparado para roles aún más altos que requerirán menos habilidades técnicas prácticas y más capacidad de gestión.

  5. Perfeccione su comunicación y habilidades interpersonales . Serás el principal punto de entrada a tu equipo desde el mundo exterior. Su gerente u otro supervisor acudirán a usted primero. Otras unidades / equipos en su organización se comunicarán con usted en todo lo relacionado con el equipo primero. Vas a administrar el recurso más difícil e impredecible de todos: las personas. Necesita crecer una piel gruesa, aprender a tragar grandes cantidades de orgullo y asumir la responsabilidad por el fracaso de su equipo.

kolossus
fuente
2
Excelentes respuestas, me gusta cómo has notado todas las cosas que, como desarrollador, generalmente no tienes idea, en particular la delegación. El último trabajo delegué todo lo que pude y aún tenía una montaña de cosas para mantenerme ocupado. Luego, durante los (raros) momentos libres, hacía cosas "aburridas": ofrecía ayudar a corregir errores menores, documentación. Tengo que liderar desde el frente.
Rocklan
2
+1 para resaltar que los roles de "liderazgo" a menudo implican mucha más gestión que habilidades técnicas
Krease
Esta es una respuesta sobresaliente y realmente captura la esencia del papel. Bien hecho.
Lloyd Moore
14

Las cosas que Sam no ha dicho que también son importantes:

  • Cómo especificar cosas y dar trabajo a otros desarrolladores. Parte de su trabajo es mantener a los otros desarrolladores 100% utilizados. Escribir especificaciones que no sean ambiguas es muy importante.

  • Cómo construir una aplicación esqueleto / prototipo que todos los demás deberían seguir

  • Cómo fomentar la buena moral del equipo

  • Cómo asistir, conducir y dirigir reuniones, cómo documentar elementos de acción

  • Cómo estimar, escribir un plan de proyecto y actualizar el plan del proyecto

  • Cómo mirar hacia el futuro: si un problema va a suceder dentro de 3 meses, debe tratar de evitarlo lo antes posible. Si un desarrollador se va de vacaciones durante 7 semanas, debe comenzar a planificarlo ahora.

  • Cómo hablar con la gerencia. Nos hablan un idioma diferente. Dales soluciones, no problemas. Diles lo que significan las cosas técnicas para ellos.

Y aunque Sam ya dijo esto, una de las cosas más importantes es aprender a decir que no . Harás esto mucho . La otra forma de verlo es decir , pero "solo si podemos obtener más dinero / tiempo / recursos", o "eso es para la segunda versión" :)

Rocklan
fuente
Creo que muchas de tus piezas van al arquitecto o al cubo PM. Pero sí, a veces el líder de desarrollo tiene que hacer eso.
SandRock
11

Todos estos son por el libro y buenas respuestas. Permíteme golpearte con la realidad.
Lo creas o no, pasarás gran parte del tiempo explicando a los gerentes

  • cómo un problema es difícil de resolver o
  • por qué no se puede resolver en una línea de tiempo dada o
  • incluso lo menos importante que es resolver.

Para esto necesita las habilidades de explicar cosas técnicas a personas no técnicas, en términos no técnicos. Y es muy dificil. por ejemplo, considere explicar P = NP a 6 años de edad. Desafortunadamente, no hay capacitación formal para eso, y usted debe aprenderla por su cuenta.

También esta es la posición donde la mierda política comienza a golpearte. El gerente le dirá que favorezca a una persona porque él / ella sigue el proceso, pero sabe que la persona no sirve en su equipo por varias razones, desde la falta de habilidades técnicas hasta la falta de un buen miembro del equipo. Entonces, no solo tiene que trabajar con esta persona, sino también darle buenas calificaciones a esta persona. Lo contrario es la persona que tiene buenas habilidades y un miembro del equipo muy efectivo pero que no sabe cómo complacer a la gerencia y, por lo tanto, obtiene menos calificaciones.
Luego hay reuniones inútiles que alguien en una posición alta mantiene desde una ubicación remota, dando conferencias sobre los procesos efectivos y cómo su última variación del proceso aumentará la productividad. Debes saber cómo ocultar tu cara aburrida y lucir enérgica.

Manoj R
fuente
1
"debe saber cómo ocultar su cara aburrida y lucir enérgica" jajaja
Adrien Be
Siempre me siento aburrido cuando comienzan estas reuniones, excepto que se discute algo relacionado con la técnica
Akshay Mukadam