Si asignó 5 horas para que un desarrollador senior termine un proyecto, entonces se le asignó a un chico de nivel junior, ¿cuánto tiempo agregaría a esas 5 horas?

Voy a repetir mi párrafo de conclusión aquí, para ahorrarle la lectura de todos los detalles si no está tan interesado:

Básicamente, si está utilizando desarrolladores senior para realizar tareas de 5 horas, necesita un nuevo gerente en su proyecto. Para eso están destinados los pasantes universitarios y los desarrolladores junior. Bríndeles un desarrollador senior para consultar según sea necesario y, de lo contrario, permita que los desarrolladores senior se centren en los problemas que atienden a sus capacidades en lugar de perder su tiempo y talento en cosas que no requieren ninguno.

———————–

Realmente no hay forma de responder esa pregunta sin saber más acerca de los parámetros dentro de los cuales están trabajando. ¿Es el ‘proyecto’ solo una tarea para modificar el código existente para agregar / modificar la funcionalidad existente o es una pizarra en blanco? Si es lo último, es una apuesta decente que incluso un desarrollador senior puede perder un poco de esas 5 horas simplemente para configurar un entorno de desarrollo: construir objetivos para código y pruebas, dependencias / marcos descargados y vinculados, etc., por lo que hay probablemente no sea mucho para un proyecto de pizarra en blanco de 5 horas: es el tipo de cosa que solo existe en una tarea de CS, y esperaría que un ingeniero experimentado realice una tarea de este tipo en 1/5 a 1 / 10 el tiempo de un estudiante, si no menos, ya que rara vez requieren el mismo tipo de integridad que requiere el código de producción. Luego, hay factores como el tiempo de respuesta de compilación / ejecución / prueba, que son diferentes para diferentes idiomas, con los idiomas interpretados en general un poco más fáciles de avanzar rápidamente (respuesta de compilación más rápida, generalmente resolución de dependencia más fácil, generalmente prototipos más fáciles de líneas individuales) de código para probar la validez, etc.), pero los lenguajes compilados fuertemente tipados a menudo le brindan una base de código mucho más fácil de mantener a largo plazo, especialmente si un equipo grande significa que muchas personas se encontrarán con frecuencia con código con el que no están familiarizados.

Me he encontrado con ingenieros realmente fenomenales que eran capaces de algo del orden de 10 veces la productividad de sus pares promedio, pero eso incluye cosas como diseñar y documentar su trabajo, depurar problemas operativos en los sistemas de producción, etc. Y generalmente se logra a través de Una combinación de talento / velocidad / experiencia y buena ética de trabajo. A menudo, los muchachos que realmente están produciendo una gran cantidad de código de alta calidad simplemente trabajan más horas que todos los demás y pueden mantener su enfoque durante períodos más largos, generalmente porque disfrutan resolviendo problemas y tienen dificultades para guardarlos sin completar. Pero eso no puede ser realmente un factor en una tarea de 5 horas, ya que ya es menos de un día de trabajo completo, por lo que no se puede encontrar ninguna ventaja.

Siempre tuve la reputación de ser un ingeniero realmente rápido y de alta calidad, pero buena parte de esa reputación se basaba en el hecho de que me encantaba la codificación y nunca había necesitado dormir mucho, así que a menudo me iba a casa y me ponía gran parte de un segundo día laboral completo antes de acostarse durante 5-6 horas. Combinar eso con un multiplicador de productividad más razonable y 10x no es tan difícil de creer. Pero mi deseo de trabajar ese tipo de horas locas eventualmente disminuyó y, lamentablemente, eso también redujo mi multiplicador de productividad, ya que soy menos capaz de pasar días de trabajo enteros leyendo documentación o estudiando el código existente sin interrupción: esas son las cosas eso me hizo rápido, pero lo hice principalmente fuera de la vista y de mis compañeros

Los desarrolladores experimentados pasan menos tiempo buscando cómo resolver un problema y más tiempo implementando una solución porque tienen experiencia a la que recurrir cuando diseñan una solución. También saben dónde encontrar las respuestas que ya no tienen mucho más rápido. Son mejores para leer documentos: otro diferenciador entre los ingenieros promedio y excelentes es que generalmente encontrará que los ingenieros excelentes han leído la documentación de manera preventiva en lugar de esperar hasta que estén buscando una respuesta específica a un problema. El beneficio de la lectura preventiva es que obtienes un conocimiento significativo sobre los problemas que ya se han resuelto para ti en un API / SDK / Framework determinado e, incluso si no puedes recordar exactamente cómo hacer algo, sabes aproximadamente dónde búsquelo en los documentos y no perderá el tiempo tratando de construir su propia implementación antes de descubrir la versión superior que ya se proporciona. Los ingenieros que no leen los documentos hasta que se encuentran con algo a menudo resultan haber implementado la rueda docenas de veces sin siquiera darse cuenta de la redundancia de su esfuerzo, simplemente porque no se atascaron al implementar lo que hizo. Por supuesto, también hay calidad de código. Los ingenieros experimentados conocen muchos pequeños consejos y trucos que hacen que su código sea más fácil de leer y / o ejecutar de manera más eficiente (y es mucho menos probable que caigan en la trampa de la optimización prematura). Finalmente, los ingenieros experimentados tienen menos probabilidades de cometer el tipo de errores que pueden costarle mucho tiempo en las pruebas, y cuando los encuentran, es probable que sean mucho más rápidos para depurarlos / corregirlos. Recuerdo que me sorprendió lo rápido que los muchachos mayores podían concentrarse en un problema cuando era nuevo en esto. Pero habían visto cosas similares docenas o incluso cientos de veces antes, mientras que todo era nuevo para mí. Tenían herramientas de las que nunca había oído hablar, y mucho menos sabían cómo usarlas de manera efectiva.

Por lo tanto, es posible que un ingeniero junior no sea mucho más lento que un ingeniero senior en un proyecto tan pequeño. Francamente, hay tanta dificultad en una tarea que solo lleva 5 horas completarla. En el mejor de los casos, es probable que descubra que el desarrollador experimentado le brinda un resultado final más completo, con buenos comentarios, pruebas bien escritas que realmente tienen una muy buena cobertura de la base de código, etc. Pero eso es porque esperaría una tarea que requiera un Un total de 5 horas para requerir solo algo así como 90 minutos de codificación. Un buen ingeniero pasará aproximadamente la misma cantidad de tiempo diseñando / investigando, implementando y probando unitariamente su trabajo. Deje los 30 minutos adicionales para configurar un entorno de desarrollo, escribir buenos comentarios / documentos y realizar algunas pruebas de integración manual del resultado final. Solo hay una gran cantidad de cosas que va a hacer en 90 minutos, e incluso un ingeniero junior no es muy probable que requiera mucho más de 180 minutos para escribir la misma cantidad de código, porque no puede ser tan difícil. asignación. Principalmente se reduce a la velocidad de escritura a esa escala. Es probable que pasen los mismos 90-120 minutos en diseño, dependiendo de la cantidad de investigación que se requiera sobre el código existente (los ingenieros experimentados probablemente puedan leer y comprender el código desconocido 5 veces más rápido que alguien nuevo en el trabajo), y probablemente lo harán completamente no implementan buenas pruebas, así que supongo que ambas terminarán aproximadamente al mismo tiempo. Pero el resultado del desarrollador principal será más completo, será más fácil de leer, probablemente se ejecutará más rápido y probablemente tendrá más longevidad en la base de código.

Por otro lado, una tarea que le lleva a un desarrollador experimentado una semana podría fácilmente llevar a un desarrollador junior un mes o más, y una tarea que requiere 2-3 meses para un desarrollador senior probablemente esté completamente fuera del ámbito de lo posible para un junior desarrollador sin ayuda significativa de un mentor más experimentado. Se requiere experiencia para hacer un trabajo de diseño a gran escala como ese, y mucho menos para darle la vuelta e implementarlo correctamente.

Básicamente, si está utilizando desarrolladores senior para realizar tareas de 5 horas, necesita un nuevo gerente en su proyecto. Para eso están destinados los pasantes universitarios y los desarrolladores junior. Bríndeles un desarrollador senior para consultar según sea necesario y, de lo contrario, permita que los desarrolladores senior se centren en los problemas que atienden a sus capacidades en lugar de perder su tiempo y talento en cosas que no requieren ninguno.

Así no es como funcionan estas cosas. Es posible que un desarrollador junior pueda terminar ciertos proyectos más rápido , ya que puede dedicarse al trabajo, mientras que el personal senior casi siempre se mueve en múltiples direcciones y, a menudo, necesita equilibrar sus objetivos inmediatos con objetivos a más largo plazo. Otro código es esencialmente solo buscar cosas y escribir código, por lo que sería lo mismo. Aún otros requieren una visión de las herramientas o del producto, lo que podría convertirlo en años.

Los programadores generalmente no se vuelven más rápidos a medida que aprenden. Probablemente escribirán un código más flexible y pensarán más adelante al hacer cambios, pero la velocidad no siempre se gana porque la velocidad no siempre es beneficiosa.

La verdadera pregunta es qué puede lograr el programador senior si descarga el trabajo que puede hacer un colega más joven.

Los desarrolladores senior pasarán menos tiempo traduciendo los requisitos en un diseño ya que con bastante frecuencia han visto el problema antes, sin embargo, un desarrollador senior puede tomar tanto tiempo o más incluso que un desarrollador junior que realmente desarrolla la solución; generalmente será más robusto, más extensible y requerirá menos mantenimiento durante la vida útil de la aplicación. Los desarrolladores junior a menudo escriben código que, si no es asesorado / revisado, eventualmente será reestructurado al 100% por programadores de mantenimiento más adelante.

Hay muchas variables a considerar y todos sabemos que las estimaciones de software son generalmente incorrectas. Sin embargo, no puede vender un proyecto si no puede estimarlo / costarlo.

Utilizo “reglas generales” generales para este tipo de estimaciones aproximadas … Comenzaría con el escenario ideal como base de la estimación. (Senior – 5 horas) Luego agregue multiplicadores para incógnitas. Especificaría un desarrollador junior con un multiplicador 3.5 para que el trabajo se convierta en 17.5 horas. Para un desarrollador de nivel medio, uso un multiplicador 2.5.

La pregunta que usted (y su organización) podrían hacer es ¿por qué es importante? Si estuviera poniendo el dinero para este producto, no le pagaría a la gente para hacer estimaciones para informar cosas que no me importaban, sino que obtendría los mejores desarrolladores que pudiera encontrar, establecería la visión del producto y luego cerraría mi tarta mientras me maravillaba de ellos produciendo mi software.

Muchos proyectos solo llevan más tiempo. No es que uno trabaje más rápido que otro necesariamente.

Digamos que está haciendo una capa de acceso a datos. Es un proceso relativamente simple, solo lleva un tiempo, no hay forma de evitarlo.

No cambiaría necesariamente el tiempo que lleva, pero le asignaría tareas más difíciles a uno sobre el otro o esperaría que el senior delegue en el junior.

No hay una fórmula, ni siquiera hay un estándar, creo. Todo depende de las habilidades y experiencia de los dos chicos. A veces, el junior puede impresionarlo resolviendo el problema en menos tiempo que el senior. Si está administrando un equipo y asignando tareas, debe conocer a todos y cada uno de los miembros de su equipo y sus capacidades. Solo entonces, podrá conocer el tiempo estimado para realizar cualquier tarea que haya asignado a un recurso.

Nah … 5 horas son demasiado largas, deja solo al joven y lo terminaría en una hora como máximo.

No le pedirías al desarrollador junior que haga alguna parte de seguridad o acceso a db sin importar qué, ¿verdad?

Literalmente duplicaría el tiempo, entonces 10 horas. Tienes que tener en cuenta la falta de experiencia y los posibles errores, como resultado de ser un desarrollador junior.

Si mide proyectos de software en horas, probablemente esté microgestionando.

Solíamos trabajar en 8 a 10 líneas de código comercialmente listo, completamente probado y documentado por ingeniero. Hay una curva de aprendizaje para cada nueva tarea y me parece recordar una relación de tres a uno (aproximadamente). Permitiría 15 días.

More Interesting

Ingresé a la escuela de medicina cuando tenía 17 años. Fue un error porque no estoy interesado en la práctica médica. ¿Cuáles son mis opciones fuera de la medicina clínica?

¿Qué campo es mejor, la informática o la ciencia de datos?

¿Qué es lo mejor para el entrenamiento de Teradata?

Según su observación personal, dado que hay 50 personas en una clase de ciencias de la computación, ¿cuántas terminarán haciendo programación profesionalmente?

Soy un estudiante de informática y quiero abrir un negocio. ¿Qué tengo que hacer?

¿Cuál es el futuro de los desarrolladores de ASP.NET MVC?

¿Cuáles son los campos disponibles para hacer una maestría en informática?

¿Debo abandonar mi licenciatura (negocio) no relacionada para un campo de entrenamiento de programación?

¿Qué asignatura acompaña a Computer Science y me ayudará a ser un mejor programador en el futuro?

Como pasante, ¿debo solicitar comentarios adicionales además de las revisiones de código?

¿Qué trabajo hicieron los graduados y estudiantes de informática en sus pasantías de verano?

¿Cuándo puedo inscribirme en desarrollo front-end en Udacity ND? ¿Cómo me ayudaría a postular al MIT?

¿Dónde necesita más inteligencia pura y 'chispa' para tener éxito: ciencias de la computación o ingeniería electrónica?

¿Cómo puede un graduado en ciencias de la computación ayudar en la lucha contra el "terrorismo"?

Cómo dominar la programación Java y ser profesional en ella para ganarse la vida