¿Dar a los nuevos reclutas un subproyecto separado de los desarrolladores experimentados ayudará a los novatos a aumentar más rápidamente?

12

Tenemos 7 desarrolladores en un equipo y necesitamos duplicar nuestro ritmo de desarrollo en un corto período de tiempo (alrededor de un mes). Sé que hay una regla de sentido común que dice "si contrata a más desarrolladores, solo pierde productividad durante los primeros meses". El proyecto es un servicio web de comercio electrónico y tiene alrededor de 270 mil líneas de código.

Mi idea por ahora es dividir el proyecto en dos subproyectos más o menos independientes y dejar que el nuevo equipo trabaje en el más pequeño de los dos subproyectos, mientras que el equipo actual trabaja en el proyecto principal. Es decir, el nuevo equipo trabajará en la funcionalidad de pago, que eventualmente se convertirá en un servicio web independiente para disminuir el acoplamiento. De esta manera, el nuevo equipo trabaja en proyectos con solo 100K líneas de código.

Mi pregunta es: ¿este enfoque ayudará a los desarrolladores novatos a adaptarse fácilmente al nuevo proyecto? ¿Cuáles son otras formas de extender el equipo de desarrollo rápidamente sin esperar dos meses hasta que los novatos comiencen a producir más software que errores?

=======

ACTUALIZAR

Esta empresa fracasó por completo, pero no por las razones que ustedes mencionaron. En primer lugar, estaba mal informado sobre el tamaño y la capacidad del nuevo equipo. Debería haberlos evaluado yo mismo. En segundo lugar, la contratación resultó ser un trabajo duro en ese sitio. En el sitio de la oficina principal, la contratación fue mucho más fácil, pero en la ciudad del segundo equipo aparentemente había escasez de desarrolladores con la calificación requerida. Como resultado, en lugar de 1,5 meses proyectados, el trabajo se extendió a unos 4,5 meses y fue cancelado en el medio por la alta dirección.

Otro error que cometí (y Alex D me lo advirtió) es que estaba tratando de vender refactorizaciones a la alta dirección. Nunca vendes refactorización, solo características.

La puesta en marcha resultó ser exitosa de todos modos. La refactorización que nunca sucedió se convirtió en una deuda técnica: el sistema se volvió más monolítico y menos mantenible, la productividad del desarrollador disminuyó gradualmente. Ahora no estoy en el equipo, pero espero que lo completen en el futuro más cercano. De lo contrario, no daría un centavo por la supervivencia del proyecto.

Dmitry Negoda
fuente
2
si contrata a más desarrolladores, sólo se suelta de la productividad en los primeros meses - Nunca oído si, pero estoy seguro de que es más
BЈовић
2
¿Qué sucede cuando intentas volver a integrar las dos partes? ¿Existe la posibilidad de que las dos piezas pasen sus propias pruebas, pero una gran prueba de integración en todo el lote fallará? Sospecho que vas a encontrar que la ley de Brook no es tan fácil de eludir. Excelente pensamiento creativo; Vale un +1. Y realmente me gustaría saber cómo funciona esto para usted.
Dawood dice reinstalar a Mónica el
1
javana: Contrataremos desarrolladores experimentados
Dmitry Negoda
2
@DmitryNegoda Si puedes encontrarlos en tiempo suficiente. Los desarrolladores experimentados generalmente no están sin trabajo, por lo que incluso si los entrevista y les ofrece un puesto mañana, probablemente tendrán que avisar a su empleador actual unas semanas antes de que puedan comenzar. Si fuera usted, prepararía un plan de contingencia por si acaso, como prepararme para trabajar por la noche y los fines de semana por un tiempo.
maple_shaft
44
no importa cuán sorprendente sea un desarrollador, no entenderán 100 mil líneas de código en menos de ~ 1 mes, tal vez 3 semanas
Ryathal

Respuestas:

1

Pensé, estoy de acuerdo como todos los demás aquí, que:

"... agregar más desarrolladores a un proyecto retrasado, hace que el proyecto demore más ..."

Tengo la sensación de que lo vas a hacer en cualquier lugar, así que ...

Su idea puede ayudar, si su proyecto existente está suficientemente organizado, por módulos, subsistemas o subproyectos.

Lo que puede intentar es darles pequeñas piezas / módulos / formas / clases de su proyecto, para que trabajen, en lugar de todo el proyecto.

Si usa una base de datos, es posible que desee hacer una copia de una base de datos que funcione con datos y acceder a ellos desde el módulo o subsistema de código con el que va a funcionar.

Tener nuevos desarrolladores que conozcan el lenguaje de programación o el entorno de programación no es suficiente, las aplicaciones de software pueden volverse muy complejas.

¿Tiene alguna documentación de la aplicación como: UML, ER, Codd-Yourdon, lo que sea?

Buena suerte.

umlcat
fuente
Estamos hablando de solo 100K líneas de código, no es tan complejo, sin embargo, gracias por la preocupación
Dmitry Negoda
1
@Dmitry Negoda: la complejidad no es una función de LOC.
jmoreno
Hay una investigación considerable (por ejemplo, por Boehm) que muestra que la productividad del programador, en promedio, es una función de LOC.
Dmitry Negoda
15

Mi pregunta es si este enfoque ayudará a los desarrolladores novatos a adaptarse fácilmente al nuevo proyecto.

"Novato" puede significar algo nuevo para usted, o puede significar algo nuevo para trabajar como desarrolladores de software. Si va a contratar a un grupo de desarrolladores para trabajar en un proyecto importante en un horario, asegúrese de que al menos la mayoría de los nuevos empleados sean desarrolladores experimentados, y preferiblemente aquellos que hayan escrito proyectos similares a lo que está intentando para construir.

¿Cuáles son otras formas de extender el equipo de desarrollo rápidamente sin esperar dos meses hasta que comiencen a producir más software que errores?

  • Compre o licencia un producto existente en lugar de tratar de construir el suyo propio. ¿ Realmente necesitas reinventar la rueda de pago?

  • Como dije anteriormente, contrate personas que tengan experiencia en la construcción del tipo de sistema que desea.

  • Incluso antes de contratar a este nuevo equipo, debe pensar en lo que necesitarán saber sobre sus cosas existentes. Asegúrese de reservar suficiente tiempo para las sesiones de entrenamiento para ayudarlos a ponerse al día.

  • ¿Has creado un conjunto de requisitos por escrito? Si no, hazlo ahora. Si espera diseñar el proyecto en lugar de dejar que el nuevo equipo lo haga, también debe preparar un documento de diseño claro, pero debe estar abierto a los cambios en respuesta a las aportaciones de los nuevos miembros del equipo.

  • ¿Tienes un proceso de desarrollo bien definido? Base de datos de errores? ¿Control de versiones? Proceso de revisión de código? ¿Guía de estilo? Pon esas cosas en su lugar.

  • No esperes milagros. Usted quiere contratar a un equipo de siete personas y hacer que trabajar de forma productiva en cuestión de semanas, pero queriendo esto no significa que usted puede tener eso. Dependiendo de dónde se encuentre, puede llevar mucho más de un mes encontrar a siete personas adecuadas. Intentar apresurar las cosas ahora solo causará dolor y gastos más adelante.

Caleb
fuente
1
+1 al conjunto escrito de requisitos, están un poco desactualizados ...
Dmitry Negoda
3
¿Y quién va a entrevistar a estos nuevos empleados, actualizar los requisitos escritos y los documentos de diseño, completar la base de datos de errores, pasar tiempo en las sesiones de capacitación ...? ¿Son los desarrolladores actuales? Porque eso significa que no se desarrollarán a tiempo completo. Entonces la velocidad de desarrollo disminuye . Ups
MarkJ
El código se documenta por sí mismo, y solo contrataremos desarrolladores experimentados. Y sí, los desarrolladores actuales ayudarán a los nuevos, y su velocidad disminuirá un poco. Solo espero que contratar desarrolladores en el proyecto 100K loc no sea tan doloroso como contratar en el proyecto 270K loc, y esa fue la pregunta.
Dmitry Negoda
¿Tiene un wiki interno o todo está almacenado en documentos de Word dispersos en la LAN?
Spencer Rathbun
1
100k, 50k o 10k representarán lo mismo: una tonelada de código que ninguna persona se transferirá a su cabeza. Si hay varios cientos de líneas de código, eso es razonable. Una vez que supera varios miles, tiene un sistema complejo y los deseos de velocidad a menudo no se logran.
Michael Durrant
12

En mi humilde opinión, poner a todos los nuevos desarrolladores en el nuevo proyecto, separados de su equipo existente, seguramente traerá problemas. Sí, esto (puede) permitir que su antiguo equipo siga trabajando más o menos a su ritmo actual. Sin embargo, los nuevos muchachos no tendrán ni idea de la arquitectura general y el panorama general, por lo que tomarán mucho tiempo para ponerse al día ... e incluso pueden estar yendo en la dirección equivocada.

Sugiero dividir su equipo existente en dos y contratar nuevos miembros en ambos equipos. De esta manera, hay personas en ambos equipos que pueden guiar a los recién llegados y garantizar que se mantenga una visión arquitectónica común y coherente.

De lo contrario, estoy de acuerdo con Caleb en cuanto a documentar requisitos claros, definir el proceso de desarrollo y las herramientas, y reservar tiempo para la capacitación ... y también en que esperar que un equipo de 7 sea contratado y se ponga al día dentro de un mes es irrealista.

Péter Török
fuente
44
+1: definitivamente desea utilizar sus antiguos desarrolladores para incorporar a los nuevos. Aunque es inevitable que esto lo retrasará un poco.
mikera
+1 también. Desea que sus desarrolladores experimentados sean mentores de las nuevas personas. Incluso si los nuevos tienen mucha experiencia, no sabrán exactamente cómo hace las cosas su empresa.
Andy
9

Dmitry, duplicar tu ritmo de desarrollo en poco tiempo es un objetivo increíblemente ambicioso. Algunas buenas sugerencias han sido publicadas aquí; pero, no importa lo que intentes, ten en cuenta que puede no suceder . Si su ritmo de desarrollo no se duplica, ¿cuáles serían las consecuencias, desde una perspectiva comercial? ¿Estás tratando de presionar para cumplir con una fecha límite?

Si está tratando de cumplir con una fecha límite, ¿podría hacerlo de manera más confiable cortando funciones? He encontrado que una excelente manera de hacer que los "plazos vencidos" sean aceptables para un cliente es hacer lanzamientos incrementales; publique una versión que tenga un subconjunto de las funciones requeridas y, a medida que haya más funciones listas, publíquelas de forma incremental, hasta la versión final.

Alex D
fuente
Todavía no hay plazos. Esperamos un aumento serio en el número de clientes potenciales mediante la creación de asociaciones. Solo queríamos que nuestra solución fuera más competitiva, para que los socios nos elijan. No son los plazos los que buscamos, su capacidad demostrable para ofrecer nuevas funciones. Pero gracias por la preocupación.
Dmitry Negoda
Si ese es el caso, quizás en lugar de apuntar a duplicar su ritmo de desarrollo en un solo paso, tal vez pueda intentar "aumentar" durante un período de tiempo.
Alex D
4

Entonces estás tratando de ser el equipo que no es víctima del Mes del Hombre Mítico . Tendrá varios problemas, alguien en el equipo tendrá que hacer las entrevistas técnicas, luego tendrá que esperar unas semanas después de que acepten el puesto antes de que puedan comenzar. Pueden pasar dos meses antes de que los nuevos desarrolladores estén frente a sus teclados.

Cada nuevo empleado tiene una productividad negativa en los primeros meses. Se agrava porque los desarrolladores actuales necesitarán guiarlos, disminuyendo aún más la productividad de los equipos.

La otra parte del MMM fue que a medida que el equipo crece, también lo hacen los problemas de comunicación. Las reuniones se hacen más grandes, las cadenas de correo electrónico se hacen más largas ...

Los reuniría en grupos más pequeños y sé que durante mucho tiempo la productividad no será proporcional al aumento del tamaño del equipo. También tenga en cuenta que el drenaje del flujo de efectivo durante los primeros meses puede ser significativo, debido a los costos de embarque y al equipo.

En su comentario a Alex D mencionó "No son los plazos los que buscamos, es su capacidad demostrable para ofrecer nuevas funciones". Así que cambie a un estilo de desarrollo que destaque las características en fragmentos más pequeños y con mayor frecuencia. Haga que los nuevos miembros del equipo prueben las nuevas características, que los ayudarán a comprender la base del código.

mhoran_psprep
fuente
No entiendo cómo probar nuevas características ayudará a comprender la base del código. También estamos contratando ingenieros de control de calidad, así que deje que los desarrolladores desarrollen y los probadores prueben.
Dmitry Negoda
2

Sería mejor no contratar a nadie nuevo y mirar sus procesos para ver dónde puede hacer cambios para que las cosas vayan más rápido. Cuanto antes se encuentren los errores, menor será el tiempo necesario para solucionarlos, entonces, ¿cómo los está probando? ¿Estás haciendo revisiones de código? ¿Estás prestando atención a la calidad del requisito? ¿Tiene compilaciones automatizadas y procesos de despliegue? ¿Tienes pruebas automatizadas? ¿Está teniendo reuniones diarias de pie (¡Increíble cuánto más rápido puede llegar el desarrollo cuando alguien le pedirá su progreso todos los días!)? ¿Estás utilizando procesos ágiles? ¿Tiene algunos defectos de diseño básicos que deben abordarse para acelerar el resto del desarrollo (un mal diseño puede ralentizar increíblemente un proyecto de desarrollo).

Por favor lea el mes mítico del hombre. Claramente va a necesitarlo para poder decirle a la alta gerencia por qué están tomando las decisiones correctas para acelerar un proyecto. .

HLGEM
fuente
Sí a todas sus preguntas, excepto la última.
Dmitry Negoda
0

Entonces, ¿quieres tirarlos por un acantilado y ver si pueden volar? Creo que cuando descubres las cosas por tu cuenta, a la larga tienden a quedarte contigo en lugar de solo darte soluciones. Sin embargo, eso supone que realmente descubres mejores soluciones. No veo por qué no puede permitir que este equipo tenga un líder calificado que equilibre y permita que cometan algunos errores por sí mismos, además de brindarles orientación e instrucción al aprender de ejemplos de calidad.

JeffO
fuente
Mike Partridge ha cambiado mi pregunta. No voy a tirar a nadie del precipicio. Por supuesto, los nuevos desarrolladores trabajarán junto con los experimentados, solo en un subproyecto diferente.
Dmitry Negoda
Solo espero que contratar desarrolladores en el proyecto 100K loc no sea tan doloroso como contratar en el proyecto 270K loc, y esa fue la pregunta.
Dmitry Negoda