Programación en pareja / Colaboración en una pequeña empresa


20

Trabajo en una pequeña empresa de desarrollo como desarrollador principal. Tenemos otros dos desarrolladores, así como mi jefe, que es desarrollador, pero ya no hace gran parte de la codificación real.

El problema que estoy tratando de superar es multifacético. Todos tenemos una tendencia a trabajar en nuestros propios proyectos sin mucha colaboración entre nosotros. De hecho, yo (como el desarrollador más avanzado) pido la opinión / ayuda de los demás más que la mía, porque valoro la opinión de un ojo externo.

Quiero aumentar nuestra colaboración, y les he expresado eso. En gran parte porque me gustaría mostrarles algunas cosas sobre cómo convertirse en mejores desarrolladores y seguir mejores prácticas. Pero dados los tipos de personalidad de nuestros otros desarrolladores, creo que se sienten más cómodos trabajando solos.

He estado leyendo sobre la programación de pares, y he leído (en algunos foros) que no funciona bien cuando uno de los desarrolladores está más avanzado que los demás (que yo soy). Y, sin embargo, creo que es imperativo que comencemos a colaborar para que nuestro trabajo no sea tan dispares.

Mi pregunta es si alguien ha estado en una situación similar y qué funcionó para ellos.

Me doy cuenta de que esta no es una situación única para todos, pero estoy dispuesto a darle una oportunidad a múltiples enfoques.

Todos trabajamos en un área común, los desarrolladores no tienen oficinas / cubículos individuales.


2
¿Usted y los otros desarrolladores tienen oficinas individuales, cubículos o se sientan en un área común?

@hatchet Todos trabajamos en un área común.
Ryan Williams el

Respuestas:


12

Como ya se ha discutido en otras respuestas por qué la programación de pares no es una solución para usted , analizaré lo que hemos experimentado actualmente y estoy satisfecho con los resultados.

En mi opinión, lo que puede hacer para aumentar la colaboración es tener dos personas juntas en cada proyecto. Cada uno de ellos trabaja en una parte diferente del proyecto, pero debido a que estas partes deben integrarse, los dos desarrolladores deben colaborar. Esto también requiere que los dos programadores discutan la arquitectura (capas e interfaces) del proyecto, y luego decidan asumir diferentes roles.

Y, si este enfoque limita la cantidad de proyectos que su empresa puede manejar a la vez, puede asignar a este par colaborador dos proyectos simultáneamente.

Recientemente experimentamos con este enfoque, haciendo que uno de ellos desarrolle modelos + integración con apis y el otro programador manejando vistas y controladores . Hemos encontrado las siguientes ventajas de esta configuración:

  1. La estructura del código resulta mucho mejor que si solo uno estuviera trabajando en todos los aspectos del proyecto.
  2. No tenemos que recordarles sobre la confirmación de código para el repositorio, etc.
  3. Tienen que esforzarse para probar el código de los demás, en lugar de confiar únicamente en nuestro control de calidad dedicado para ello.

1
Pensaré en esto también. Realmente me gusta la separación del desarrollo de las vistas y los controladores de los modelos, porque obliga a los desarrolladores a encontrar una buena API para los modelos. Para trabajar simultáneamente, también obliga a escribir pruebas relevantes.
Ryan Williams

1
He decidido aceptar esta respuesta porque después de repasarla y conversar con un par de miembros del equipo, estoy convencido de que la mejor manera de inducir la colaboración es dividir los roles en el mismo proyecto. Puede que no funcione, pero parece ser la mejor opción que he escuchado.
Ryan Williams

7

En mi opinión, la programación de pares no es la solución al problema que planteas.

Hay dos roles distintos en un par de programación. El observador está allí para revisar y retroalimentar el código escrito por el conductor . Si está tratando de transmitir ideas para mejorar las decisiones que toman sus programadores junior, me pregunto qué tan efectivo puede encontrar su capacidad para revisar críticamente el código que está escribiendo cuando desempeña el papel del conductor.

Sin esta dinámica, se pierde el beneficio de la programación de pares.

Como programador sénior, te sugiero que consideres un programa más fuerte de capacitación y desarrollo de empleados con tu jefe. Sus programadores junior deben recibir un marco para mejorar sus habilidades. Por lo general, puede utilizar métodos como las iluminaciones, escribir un documento de estándares de codificación, dividir las tareas autónomas de su propio trabajo y garantizar que existan procesos de revisión de código adecuados.


Tomaré tus pensamientos en consideración. Es un poco analizar y rectificar mentalmente contra lo que estamos haciendo actualmente. Una sensación sincera que tengo es un poco de inseguridad en mi posición como desarrollador principal. No porque no me sienta cómodo desde una perspectiva de habilidades, sino porque nuestros otros dos desarrolladores son mayores que yo (uno significativamente, uno no), y uno incluso tiene un par de años más de experiencia. Siendo ese el caso, las revisiones de código tradicionales parecerían incómodas, porque no quiero parecer que les estoy respirando el cuello. Por otra parte, tal vez eso es lo que tengo que hacer.
Ryan Williams el

Otra cosa. ¿Crees que hay menos beneficio de lo que vale la pena emparejar el programa con ellos, cuando soy el conductor? Todavía podría usarse como una forma de señalar las mejores prácticas, y aún tener algunos aportes y comentarios sobre lo que estoy haciendo (incluso si la relación seguramente no estuviera equilibrada).
Ryan Williams

Si la relación de programación en pareja es unidireccional, sugeriría que no sería atractiva y quizás incluso un poco condescendiente con sus compañeros de trabajo. Dependiendo de cómo lo modele, esto podría aparecer fácilmente como "así es como programo y es el mejor enfoque". En realidad, no llamaría a este par de programación ya que no tiene ambos componentes.

Supongo que eso es realmente lo que me da miedo. Gracias por los pensamientos Voy a aceptar tu respuesta por ser el primero. (También hubo un par de otras buenas).
Ryan Williams

Las revisiones de @RyanWilliams Code no se tratan de "respirar por el cuello". No se trata de que los controles. En nuestro lugar, usamos ReviewBoard como plataforma y comentamos el código de los demás . No hay "jerarquía". El aprendizaje en este caso es "implícito". Aprenden leyendo su código y el suyo, de sus preguntas y las de los demás desarrolladores y las respuestas / comentarios a esas preguntas. Y llegan a conocer otras partes de la base del código, lo cual es bastante beneficioso en mi humilde opinión.
Johannes S.

5

TL; DR : No creo que la programación de pares funcione para ti. En cambio, debe tratar de hacer que las personas se preocupen por la calidad a largo plazo de su código y hacer que quieran encontrar respuestas. Esto tiene que hacerse de manera informal.


Sobre cultura y calidad

Creo que este problema no se trata de la metodología de programación sino más bien de la cultura . En mi experiencia, es posible dirigir la cultura, pero rara vez al contarle a la gente. Es decir, tratar de forzar un cierto flujo de trabajo en las personas que no han evolucionado naturalmente o que están demasiado alejadas de la práctica existente tiene consecuencias negativas.

En otras palabras, no querrás parecerte al traje que suena con las últimas palabras de moda, incluso cuando finalmente lo eres. La mayoría de los programadores que conozco te etiquetarían mentalmente como ruido de fondo. No seas una abeja corporativa.

En mi opinión, la pregunta principal que debe hacerse es "¿estoy contento con la calidad y el valor comercial del código que publica mi organización?" y si la respuesta a eso es negativa, debe preguntar "¿cómo cambio esto?".

En última instancia, la calidad y el valor son definiciones humanas en las que solo usted u otra persona de su organización pueden (y deberían) pensar.

Programación de pares y microgestión

Entonces, a riesgo de sonar un poco hacia adelante y duro, me parece que leer sobre programación de pares realmente te hizo pensar en alguna forma de microgestión , o al revés. MM es una receta segura para alienar a la mayoría de las personas.

En defensa de la programación en pareja: la programación en pareja no se trata de un tipo que mira por encima del hombro de otro tipo. Eso es tan micro como la administración se pone. PP es sobre el uso de dos mentes a pensar en dos niveles al mismo tiempo - una persona con ofertas de alto nivel , y fotos grandes problemas mientras que el otro se encarga de la tuercas y tornillos necesarios para producir el código de trabajo. Y en mi humilde opinión, rara vez funciona bien si los dos participantes no están en condiciones de cambiar de lugar. Deben ser lo suficientemente similar-experiencia para tener un arsenal de conceptos similares profesional y un vocabulario profesional compartida (no estamos vinculados-mente - sin embargo , muhahaha).

Para su situación, diría que ya que es un equipo pequeño y es el único con experiencia real (eso es lo que me parece su publicación), programar la pareja o revisar la mayoría del código la mayor parte del tiempo No funciona Solo tienes 24 horas al día. En cambio, algunas soluciones que podría considerar:

  • Aliéntelos a participar en SO bajo la etiqueta de idioma apropiada, o a publicar algunos fragmentos de código para su revisión en Code Review SE. Comience un pequeño concurso informal sobre quién puede ganar la mayor cantidad de puntos SO por semana.

    SO puede hacer maravillas para los desarrolladores novatos, ya que proporciona comentarios constantes y sigue los latidos de la comunidad.

  • Eche un vistazo a algunos de los códigos que ingresan y desafíelos informalmente con algunas preguntas sobre su evolución a largo plazo. La mayoría de los programadores principiantes simplemente no están acostumbrados a pensar en hacer que su código sea legible y mantenible. Una vez que tenga esos problemas en la cabeza, buscarán más información por su cuenta, de usted u otras fuentes.


Como, todos los demás, agradezco su aporte. De lo que me he dado cuenta al publicar esto es que tengo algunas molestias de ser el que mira por encima de sus hombros. Ambos son realmente mayores que yo y uno tiene mucha más experiencia. Así que no los imagino como personas que van a dar vueltas en CE y pedir revisiones de código. No son novatos. Pero provienen de diferentes idiomas y prácticas poco ortodoxas.
Ryan Williams

Veo. Creo que es bueno que no te sientas cómodo mirando sobre sus hombros porque no creo que debas hacerlo. Nadie quiere tener a alguien que adivine cada pulsación de tecla que hace (exagerando).
idoby

4

No creo que la programación de pares sea algo que pueda ayudarlo en su entorno. No es que no ayude a mejorar la habilidad de los desarrolladores menos experimentados; incluso hay una pregunta de los programadores sobre la programación de pares con ingenieros de diferentes niveles de habilidad . Si bien existen beneficios como el intercambio de conocimientos y menos errores, la programación de pares requiere una mayor inversión de tiempo. Con un equipo de tres desarrolladores y solo cuatro personas que tienen experiencia / experiencia en desarrollo, parece difícil mantener una rutina de programación en pareja.

Creo que una mejor alternativa en su situación son las revisiones de código, especialmente si las adapta adecuadamente. Una revisión de código puede consistir en cualquier cosa, desde una persona que revisa un pequeño fragmento de código y proporciona comentarios a varias personas (incluso a todo el equipo) en una habitación durante una hora o dos para revisar el diseño y la implementación de un componente completo. Estos pueden variarse según sea apropiado para el trabajo que se realiza, especialmente en función del conocimiento, las experiencias y las necesidades del equipo. Todavía puede obtener el aspecto de compartir conocimientos al hacer que varias personas participen en la revisión con el fin de encontrar problemas, proporcionar sugerencias y obtener conocimiento al leer los resultados de la revisión para incorporar los comentarios en su propio trabajo, antes de que la revisen. .


Parece ser una opinión popular. Me gusta la idea de las revisiones de código. Pero en mi opinión, supongo que con sus personalidades y niveles de habilidad, seré yo quien haga la revisión, y ellos solo escuchen (en su mayoría no involucrados). Pero tal vez hay una manera de involucrarlos más. Supongo que tengo que reflexionar sobre eso.
Ryan Williams el

Además, para ser claros, no estaba hablando de la programación de pares como algo que hacemos todo el tiempo. Más bien, dedique una parte significativa, pero no enorme, de la semana laboral a funciones más grandes o más complejas. (Eso es parcialmente por necesidad práctica. Tengo mis propias demandas que deben cumplirse.)
Ryan Williams

2

Mi pregunta es si alguien ha estado en una situación similar y qué funcionó para ellos.

Como estás invitando a la experiencia, esto es lo que hice. Elegí el enfoque de bajo riesgo y le pedí a alguien décadas más joven que yo que pasara un tiempo trabajando juntos. No etiquetamos la actividad. Nadie, excepto yo, sabía que estábamos probando una nueva técnica.

No sé exactamente qué detalles relacionar, pero el proceso funcionó muy bien. Quería ser guiado, lo cual era algo que no tenía ni idea de antemano. Entonces abrió la comunicación en ambas direcciones de una manera muy positiva.

De hecho, yo (como el desarrollador más avanzado) pido la opinión / ayuda de los demás más que la mía, porque valoro la opinión de un ojo externo.

Parece que podría enmarcar esto como una progresión lógica de lo que está haciendo actualmente.


Mi preocupación es que no estoy tan seguro de que quieran ser "guiados". Ambos son mayores que yo y uno (significativamente mayor) en realidad tiene algunos años más de experiencia que yo. Pero me gusta la segunda parte de tu consejo.
Ryan Williams el

Y es natural preocuparse antes de hacer algo, porque no tiene información. Mi experiencia ha sido que si lo haces, las personas sentirán que no estás preocupado, y que estás relajado y seguirán adelante. Y luego, si funciona, continúe, y si no funciona, intente otra cosa.
dcaswell

Tal vez involucrarlos en un proyecto más grande que normalmente haría yo mismo podría aliviarlo un poco. Por ejemplo, pronto rehaceremos nuestro CMS. Sin embargo, me llevaría un poco acostumbrarme a la idea.
Ryan Williams el

0

Algunos meses después de plantear esta pregunta, debo decir que estoy contento con nuestros resultados. Pero no es exactamente el que acepté al principio. Tenga en cuenta que este es un equipo pequeño, por lo que esta solución no se ajustará a todos.

He descubierto que es mejor dejar que todos hagan su propio trabajo. Y con el tiempo hemos desarrollado una confianza recíproca en la que si nos encontramos con un problema, llamamos a los demás para que nos ayuden. No creo que nadie quiera trabajar con alguien que esté mirando por encima del hombro. De vez en cuando me siento detrás de alguien y a veces lo ayudo a resolver un problema sin ser solicitado. A veces no tengo nada que agregar, y tal vez los molesto un poco. Pero entienden que no estoy allí para insistirles. Principalmente estoy allí para tomar un descanso de lo que estoy haciendo e introducir un poco de colaboración.

Lo que he encontrado es que las personas CORRECTAS a lo largo del tiempo (en un equipo pequeño) retoman y sincronizan con lo que otros están haciendo. No hay necesidad de micro administrar o decirle a alguien lo que está haciendo mal todo el tiempo.

De vez en cuando, siéntese con alguien y resuelva un problema, ya sea que sea un experto o alguien que esté aprendiendo, o ambos. Explique por qué haría o no haría algo de una manera en lugar de otra. Las buenas ideas suelen ponerse al día, mientras que otras se quedan atrás. Y al final del día, tienes un grupo productivo y cohesivo de personas que pueden estar trabajando en diferentes cosas pero que comparten un propósito común.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.