Cómo determinar el número de programadores necesarios para un proyecto

18

¿Cómo sabe cuántos programadores necesita un proyecto en particular para tener éxito?

La empresa para la que trabajo cumple con los pedidos de las empresas clientes. Hemos redactado un sistema interno de gestión de almacenes que maneja la gestión de inventario basada en la ubicación, el procesamiento de pedidos, la generación de conocimiento de embarque, la facturación, la auditoría de carga y los informes (probablemente 50 informes). También tiene funciones de escaneo de código de barras y un portal de cliente junto con docenas de otras características más pequeñas. También incluye un reloj de tiempo completo para empleados. Se integra con Quickbooks, UPS y FedEx. Maneja el trabajo de al menos 50 clientes, todos difieren ligeramente en su funcionalidad. Por ejemplo, importamos pedidos de archivos que envían los clientes pero cada cliente envía un formato de archivo diferente (csv, excel, archivo plano y servicios web), por lo que tenemos más de una docena de configuraciones de métodos de conversión de pedidos. Las exportaciones son la misma historia.

El proyecto es complejo y crece en complejidad todos los días con más de un cuarto de millón de líneas de código. Son alrededor de 250,000 líneas de código VB.NET, 6,200 líneas de código Ruby y quizás 5,000 líneas de PHP. También tiene una base de datos MySQL con aproximadamente 200 tablas.

Debido a los requisitos en constante cambio y las diferentes necesidades de docenas de clientes, el código en sí mismo varía enormemente en la calidad de código extremadamente pobre a relativamente bueno.

Actualmente, este proyecto tiene un solo programador: yo mismo. Actualmente también hago todo el soporte de productos para nuestra empresa de aproximadamente 75 personas. Eso incluye la resolución de problemas y la configuración de nuevos clientes y cualquier característica nueva que sea necesaria. Además, estamos tratando de reescribir todo para que sea 100% basado en Ruby on Rails. Y nos gustaría comercializar todo el sistema dentro del próximo año para ser utilizado por otras compañías.

Actualmente, solo tenemos a mí mismo como programador, pero no creo que sea suficiente. ¿Alguien tiene alguna recomendación sobre cuántos programadores debería tener un proyecto de esta magnitud o cómo deberíamos determinar la respuesta a esa pregunta? Particularmente dado el hecho de que a la gerencia le gustaría que el producto sea de calidad comercial para el próximo año?

kstevens715
fuente
11
Estaba esperando una broma bombilla :(
Oded
jajaja ... google el título y probablemente encontrarás algunos. Cuando estaba buscando en Google, encontré un montón de esos accidentalmente jajaja.
kstevens715
8
Si los requisitos siguen cambiando, ningún número de manos adicionales enviará este producto a la puerta. Tienes que precisar los requisitos primero.
Oded
Eso es definitivamente cierto en mi caso. Sé que la pregunta que estoy haciendo probablemente no es muy responsable. Pero si pudiera comparar en qué tipo de proyectos están trabajando otras personas y cuántas personas están involucradas a tiempo completo en esos proyectos, tal vez eso ayudaría.
kstevens715
Esta pregunta parece ser muy similar a esta pregunta . Quizás también encuentre algunas de las respuestas allí para ser útiles.
S.Robins

Respuestas:

3

Yo diría que al menos 5 personas. Uno para prueba, uno para especificaciones, soporte y documentación y 3devs. Hay muchas cosas que probar en su caso, por lo que un probador dedicado al 50% no debería ser irrazonable. Debe haber una persona que escriba los requisitos y tenga asistencia al cliente para configurar su infraestructura para pruebas, etc. Creo que tres desarrolladores son bastante bajos para un proyecto como este. Un gran back-end integrado a muchos sistemas de terceros, y un frente completo con extremadamente muchos informes personalizados. Me gustaría tener.

  1. Un buen desarrollador de back-end (persistencia / capa empresarial)
  2. Un buen desarrollador de gama media / front-end que hace clases de acción y JavaScript CSS Design.
  3. Un buen arquitecto en funciones para desarrolladores, pero también crea código en todas las capas con la ayuda experta de los otros dos. Este desarrollador también puede hacer cosas como configurar la ramificación JUnit framework Maven Jenkins Git, etc.

Qué sucede si te vas, te enfermas, te tomas vacaciones, etc. Una persona por proyecto nunca es inteligente. Tampoco es bueno estar solo, ya que no evolucionas profesionalmente sin compañeros de trabajo. Trabajo a menudo solo, estableciendo nuevas arquitecturas, etc., a menudo en equipos de 5 desarrolladores, pero nunca evoluciono tanto como cuando le digo a un compañero de trabajo que arreglemos esto juntos y nos encerramos una semana hablando, discutiendo y elegir marcos. La programación de pares es extremadamente generosa y no se puede hacer con un solo desarrollador, y ¿quién hará las revisiones de código si no está seguro? Si te quedas atascado, ¿quién te ayudará? Solo emprendería un proyecto de una persona si fuera parte de un alcance más amplio y pudiera obtener recursos de expertos si fuera necesario.

Farmor
fuente
1
Tomé unas vacaciones de 2 días el verano pasado y alguien tuvo que irrumpir en mi casa para obtener mi computadora portátil ... sí. Siempre hablo de trabajar en el vacío porque no tengo muchos otros desarrolladores con los que interactuar. Y viviendo en una ciudad pequeña, ni siquiera hay grupos de usuarios ni nada a lo que unirse. Nosotros (¿yo?) Comenzamos a escribir código de prueba recientemente, en realidad cuando comenzamos la transición a Rails. Ya no me puedo imaginar desarrollar sin pruebas. Me encanta la idea de tener un probador dedicado al 50%.
kstevens715
1
Al menos un desarrollador debe ser un especialista en bases de datos.
HLGEM
8

¡Bienvenido al mundo de los recursos muchas veces difícil !

El problema no es uno de Tamaño del proyecto vs Tamaño del equipo. Esa es una idea errónea muy común que a menudo oculta otros problemas que generalmente están relacionados con la administración. El problema tiene que ver con el alcance . Debe decidir qué es lo que puede lograr con sus recursos actuales, también conocido como usted. Luego, debe decidir si su capacidad para manejar la carga de trabajo es suficiente para manejar la tarea dentro de los plazos que le han sido asignados. Por lo tanto, sus necesidades de proyecto deben ser identificadas y definidas.

  • ¿Desea pasar tiempo limpiando la base de código existente?
  • ¿Es este un requisito fundamental para garantizar el éxito del proyecto?
  • ¿Tiene nuevas funciones para agregar al sistema? ¿Cuáles son los aspectos más importantes de su proyecto que deben abordarse y cuáles son los elementos menores que están en la lista de deseos?
  • ¿Se puede abandonar alguno de los requisitos, o al menos posponerlo hasta la próxima versión de mantenimiento?

Cuando tenga una idea del alcance de sus requisitos, puede determinar más fácilmente la carga de trabajo requerida para lograr un resultado dentro de un cierto período de tiempo. Si es probable que se sobreutilicen sus recursos, necesitará más personal. Si es probable que sus recursos estén infrautilizados, entonces puede encontrarse con que puede acercar su fecha límite o aumentar el alcance de su proyecto.

Si su instinto le dice que no tiene suficiente personal para administrar el proyecto, puede estar en lo correcto, pero debe comprender por qué es que su instinto le está diciendo esto. No es suficiente simplemente tener un sentimiento. En cambio, debe ser capaz de examinar el problema científicamente para proporcionar pruebas que respalden sus instintos, y debe estar preparado para enfrentar la posibilidad de que sus instintos puedan incluso estar equivocados. Una vez que haya reunido su evidencia, es decir: delimitó el proyecto, entonces realmente necesita sentarse con su gerencia y presentar un argumento para reducir el alcance del proyecto o aumentar los recursos disponibles para garantizar el éxito del proyecto. en la evidencia a la mano.

S.Robins
fuente
El alcance parecería ser una reescritura completa de un sistema SLOC de 250K en algo de calidad retráctil (o al menos de calidad de software de consultoría). La ventaja es que la recopilación de requisitos y el diseño general probablemente ya estén listos. Esto no es pequeño, y no es algo para un desarrollador que tiene otras responsabilidades.
David Thornley
@DavidThornley Eso depende en gran medida del alcance de las tareas de los desarrolladores, sus plazos, su carga de trabajo, cómo su empresa ya está comercializando el producto. He visto muchos proyectos complejos trabajados por un equipo de 1-2 personas que han tenido mucho éxito porque fueron bien administrados ... y muchos más que han fallado. Sin embargo, estoy de acuerdo en que la tarea es grande y que en sí misma es una señal de alerta en términos de recursos. La cuestión es que no vale la pena contratar a mucha gente sin haber hecho un poco de tarea primero, que es realmente el punto de mi respuesta. :-)
S.Robins
El alcance es algo que he estado planteando bastante en los últimos meses. El 20% del proyecto tiene el 80% del impacto en la empresa. Eso es en lo que estoy tratando de concentrarme. Desafortunadamente, el 80% que tiene el 20% del impacto es lo que se empuja al frente de la línea mientras tratamos de lidiar con "emergencias" lanzando más código y características. Una vez solicité una congelación de funciones para poder solucionar algunos problemas centrales. Me dieron 5 días. No hace falta decir que son 5 años después y que muchos de los problemas centrales permanecen. Sin embargo, gracias por tu publicación, muy útil.
kstevens715
6

El éxito del producto / proyecto dependerá del compromiso de la empresa que lo pague. Si van a contratar más programadores / personal de apoyo, habrá una disminución inherente de la productividad del único programador, que sabe que tiene que entrenar, enseñar, administrar, etc., no es que sea algo malo ... pero habrá ser una disminución antes de que se produzca cualquier aumento ... también existe la necesidad de analistas de negocios, gerentes, ventas y el soporte del producto una vez que esté disponible comercialmente.

Alojar una aplicación comercial es mucho más que simplemente crear una plataforma sólida. Hay requisitos de soporte, soporte técnico, corrección de errores, capacitación de usuarios, etc.

¿Cuenta con algún buen procedimiento de análisis / especificación / estimación? si no, comience ahora , puede hacerlo usted mismo.

¿Estás trabajando tu cerebro ahora? Si es así, prepárese para trabajar el doble si se espera que administre este proceso y continúe desarrollándose (¿aumento debido?).

Y aquí está la respuesta de mi experiencia previa al estar en una situación similar en el área de precios del sur de California:

5-6 personas && ~ 500k

  • 1 desarrollador principal / administrador de todos los sombreros (~ 100k - 120k)

  • 2 programadores Sr. (muy capaces, autónomos) con buena comprensión de DB y habilidades (2x ~ 80 - 100k)

  • 1 Project Manager para interactuar con la Administración ($$?) Esta persona también debe ser capaz de comprender las necesidades de la aplicación y comunicar esas necesidades directamente a los programadores

  • 1? (HTML / UI) desarrollador? con habilidades de JavaScript (odio programar código UI / Markup)

  • 1? Persona de la base de datos? sin embargo, la mayoría de los buenos programadores no tienen problemas para crear estructuras de datos escalables, sin embargo, si vas a tener problemas de optimización, al menos querrás tener un consultor

hanzolo
fuente
1
+1 ¡Me gusta tu desglose muy bien! OT completo Los salarios que usted cita me parecen deprimentes, ya que he pensado en trabajar en SoCal, pero no son mucho más altos que en Europa occidental, si la gente de Sr es como MSc + 5 años trabajando.
Farmor
1
Estoy de acuerdo, excepto que también recomendaría un programador de nivel de entrada para hacerse cargo de las tareas de soporte (configuración del cliente y mejoras menores) y hacer un trabajo duro general. La combinación de algunos roles puede funcionar dependiendo de los niveles de habilidad involucrados.
jfrankcarr
Wow, ¿puedes obtener desarrolladores senior en So Cal por 80-100K? Eso parece bastante bajo dado el costo de vida. Tal vez tenemos diferentes ideas de 'senior'; los desarrolladores senior que conozco en Dallas están obteniendo mucho más que eso.
Kevin Cline
Probablemente también tengamos ideas diferentes de qué sabor es bueno. Contraté a 2 .Net Sr. que eran jóvenes y talentosos con mucha experiencia en los últimos 10 años que estaban dispuestos a trabajar dentro de ese rango. Usamos el último Microsoft Stack (TFS, .NET 4, C #, EF 4.1, MSSQL 2008 R2, bla, bla ...), y no tuvimos ningún problema con eliminar un buen código limpio. Éramos un equipo pequeño, y el problema que encontramos al tratar de contratar a algunos de los padres era que eran resistentes al aprendizaje y tenían demasiadas opiniones y llevaban demasiado equipaje (tampoco teníamos mucho margen de contratación)
hanzolo
2

1 programador en una gran base de código con toda la responsabilidad de configurar, probar, comunicar, respaldar, documentar y corregir errores no tendrá mucho tiempo para escribir código nuevo o agregar funciones (o incluso refactorizar código antiguo).

Divida su semana por el porcentaje de estas tareas obligatorias que no expanden el negocio y se sorprenderá de lo rápido que la administración contrata ayuda adicional.

Los proyectos grandes tienen una cierta cantidad de sobrecarga asociada que no desaparecerá (especialmente si se implementa / prueba con nuevos clientes todo el tiempo como parece). Esta es la razón por la que tiene rotaciones de soporte y soporte en general; entonces algunos de los miembros del equipo tienen tiempo para trabajar en nuevas funciones.

Es posible que también desee consultar libros sobre estimación de software. Puede que estos libros no parezcan tener mucho que decir, pero contienen estudios de casos interesantes de una variedad de campos y respaldan sus afirmaciones con evidencia.

brian
fuente
El 95% de mi tiempo lo paso haciendo una de esas tareas. Me gusta la idea de rotaciones de soporte. Eso puede ser algo a considerar si contratamos a alguien con quien puedo rotar jajaja. Hoy, por ejemplo, en realidad estaba trabajando en un código central y fui interrumpido porque alguien necesitaba una batería.
kstevens715
@ kstevens715 - Parece que necesita ayuda, incluso si es un hijo de alguien que es técnico. Supongo que le pagan al menos un ingreso de 5 cifras, si me pidieran que obtuviera una batería, costaría alrededor de $ 10 para mi empleado (35% de mi salario por hora).
Ramhound