una que página programar programacion pasos paso para pagina etiquetas estructura cuál crear básica aprender estimation

estimation - página - que es title en html



Cómo estimar una tarea de programación si no tienes experiencia en ella (22)

¿Puedes dar un rango? 40-60 horas, algo así?

Cuanto más pequeñas sean las tareas, más difícil será, si puedes agruparlas, tendrás un poco más de "decaimiento", ya que los errores pueden equilibrarse al final del proyecto.

Mire cualquier área con la que tenga experiencia y utilícela como guía. "La última vez que necesité crear una característica que cambió la base de datos me tomó X". Buena suerte.

Estoy teniendo dificultades con la administración para solicitar estimaciones sobre tareas de programación que utilizan controles de terceros con los que no tengo experiencia previa.

Definitivamente entiendo por qué querrían las estimaciones, pero creo que cualquier cálculo que dé será a) demasiado corto y me hará quedar mal o b) demasiado tiempo y me hará quedar mal.

¡Qué estimación o respuesta podría darle a la administración para sacarlos de mi espalda para que pueda continuar haciendo mi trabajo!


Calcule cuánto tiempo necesita para aprender lo suficiente para hacer una mejor estimación, por ejemplo, "No sé: nunca he trabajado con esto antes. Probablemente me lleve insertar su presupuesto aquí para poder determinar qué tienes que aprender sobre esto, lo que debería saber antes de darte una buena estimación para usarlo para finalizar tu proyecto ".


Creo que si eliminas la frase "que están utilizando controles de terceros con los que no tengo experiencia previa", es posible que tengas una mejor descripción de tu problema más grande.

Si "Agile" nos ha enseñado algo, es que, si la gerencia lo espera, de forma continua, para estimar los proyectos de esa manera, y "se verá mal" si dice que no se puede proporcionar porque no tiene suficiente información, estás en la carretera para FALLAR.

El mayor problema serán los problemas sobre los que no tiene control, y que aún no ha identificado. ¿Cuántas veces has mirado hacia atrás y te has dicho a ti mismo "Bueno, apliqué mi estimación directamente en el botón - en el tercer intento, después de descubrir que ... y que necesitaba una versión ... y que el dba estaría en vacaciones por una semana y que el Gerente del Proyecto me necesitaría ... por una semana y que mi esposa estaba embarazada y ... ".

Me esforzaré mucho por decir: "Puedo identificar los factores de riesgo críticos y presentar una lista de verificación de los resultados para probarlos en xx días. En ese momento, le daré otro cálculo incremental".

Y sería muy bueno si pudieras sugerir que deberían "Por favor, insiste en que nunca intento darte una estimación creíble de ese tipo en el futuro. Dispárame si lo intento".

(Exagerado, pero solo levemente)


Cuando programé siempre tomé lo que realmente pensé que me tomaría y lo multipliqué por 3 para proporcionar una estimación. Si creo que puedo hacer un trabajo en 1 semana, le digo al cliente que tomará 3, si creo que realmente me llevará 3 semanas, le digo al cliente 9 semanas.

Al hacer esto, me preparo para "bajo promesa, sobre entrega". Si puede hacer esto con éxito, su vida será mucho mejor y sus clientes serán extremadamente felices.

En su caso, ciertamente querrá obtener AL MENOS ALGUNA comprensión de lo que está buceando antes de proporcionar una estimación. Tal vez incluso necesite proporcionar un estimado de cuánto tiempo llevará proporcionar una estimación. Multiplicar por 3 mantiene contentos a los clientes.


Divídelo en cosas con las que tienes alguna experiencia. El acto de cortarlo te dará una mejor idea sobre lo que sabes y lo que no sabes.

Una vez que las piezas son lo suficientemente pequeñas como para que puedan ser vistas como tareas únicas definidas, algunas de ellas serán totalmente inestimables. Para aquellos, ya sea prototipo primero, o simplemente déjate una cantidad razonable de tiempo, dependiendo del tamaño de la pieza. Si descubre que tiene piezas no estimables de más de 2 a 4 semanas de trabajo, vuelva a cortarlas primero.

Eventualmente llegarás a soluciones tecnológicas muy extrañas (que crees que deberían funcionar, pero no estoy seguro), y mucho trabajo por hacer para respaldar esas cosas una vez que funcionen. Habrá algunas partes de diseño faltante, para lo cual es mejor elegir una biblioteca bien conocida o un algoritmo muy simple para la versión inicial.

Si no puede desglosar las tareas, entonces debe contratar a alguien con suficiente experiencia que pueda (ya que su falta de experiencia también lo atormentará de otras maneras). Si no puede contratar a alguien, entonces debería negociar por un período aleatorio (de 6 meses a 2 años) y dirigirse directamente a un prototipo desordenado (hasta que haya logrado adquirir la experiencia suficiente para saber qué es lo correcto y qué es incorrecto). Pero, si terminas arremetiendo contra eso, es importante que no te engañes y pienses que lo estás haciendo "bien". Los prototipos estaban destinados a ser desechados. Esperemos que una vez que se complete la cuenta atrás del prototipo, esté listo para construirlo de verdad.

Pablo.


Divide tu estimación en:

  • Conocimientos conocidos ; ¿Cuánto tiempo llevará hacer lo que sabes hacer? Debería poder dar esta estimación con un alto grado de confianza.
  • Conocidos desconocidos ; ¿Cuánto tiempo crees que tomará hacer lo que no sabes cómo hacer? Puedes usar un método como el de dacracot para dar diferentes niveles de confianza en esta estimación.
  • Desconocidos desconocidos ; este es el agujero negro en tiempo real. Estas son las cosas que se acumulan en los momentos más inoportunos y te muerden el culo. Proporcione un rango para la estimación con una justificación basada en los riesgos que anticipa.

Ofrezca ajustar la estimación y ciertos hitos en el camino. Cualquier desconocido desconocido se convertirá en incógnitas conocidas, las incógnitas conocidas se convertirán en conocimientos conocidos a medida que adquiera experiencia, y la estimación de sus conocimientos conocidos se puede ajustar en función del progreso hasta la fecha. Puede hacer una estimación inicial, luego volver a estimar cuando haya realizado aproximadamente el 25%, luego otra vez al 50%, luego otra vez al 85%. En cada hito, su estimación debe comenzar a converger en el tiempo real que tomarán las tareas.


Es posible que desee considerar dar un estimado y un nivel de confianza, es decir, es 50/50 que tomará 3-6 meses o 6-9 meses o 75% de probabilidad de realizarse en 9 meses y 90% de que será hecho en un año.

Otra cosa que quizás desee considerar es utilizar el enfoque de "la sabiduría de las multitudes ". Da la vuelta y pregunta a 25-50 personas cuánto tiempo creen que tomará y promedia sus estimaciones. El Planning Poker de Mike Cohn es, creo, muy similar a esto, aunque es difícil de planear con un solo desarrollador.



Esa es una situación muy común: la necesidad de lidiar con lo desconocido. Una forma útil de abordar esto es darse cuenta de que además de las tareas de programación reales, usted tiene algo que aprender a hacer, y la gerencia debe ser consciente de ello.

Cuando te encuentras en una situación como esta, el proyecto se convierte de repente en un proyecto de I + D y un tiempo mayor de lo normal no te hará quedar mal, ya que estás aprendiendo y produciendo programas. No sé qué tan rápido está aprendiendo o qué recursos tiene para resolver los problemas que pueda encontrar ( es una de las opciones que tiene).

Yo diría que debe estimar como de costumbre y luego multiplicar por 1.5 (si aprende rápido y tiene acceso a recursos para resolver sus preguntas) o por 2.5 si es un aprendiz promedio y depende solo de usted.

¡Espero que esto ayude!


Estimar cuánto tiempo llevará algo es parte de su trabajo. Siempre que se entienda como una estimación en lugar de una fecha límite, no debe tener nada de qué preocuparse. No hay nadie mejor ubicado para proporcionar un estimado que la persona que va a escribir el código. Si no puede proporcionar una buena estimación, entonces debe informar a la administración sobre el riesgo asociado a su mala estimación para que puedan reconsiderar si vale la pena correr el riesgo de programar contra estos controles desconocidos de terceros.


Haga su mayor esfuerzo para dividir la tarea en piezas manejables. Con un poco de suerte, hay tareas específicas relacionadas con el componente de terceros involucrado y otras que están menos acopladas (y por lo tanto más fáciles de estimar). Proporcione a la administración las estimaciones de división e indique dónde viven las estimaciones más inciertas.

Estoy completamente de acuerdo con quien sugirió jugar y crear prototipos. Establezca un intervalo de tiempo fijo para la actividad de creación de prototipos. ("Necesito dos días primero para mejorar esta parte de mi cálculo").


La mejor respuesta que puede dar es pedir tiempo para desmantelar un prototipo rápido que le permita dar una estimación más precisa. Sin alguna experiencia con una herramienta o un problema, cualquier estimación que proporciones es esencialmente sin sentido.

Como un lado, rara vez hay un problema con dar una estimación demasiado larga. Se producen problemas imprevistos, las prioridades cambian y los requisitos se "actualizan". Incluso si no usa todo el tiempo que pidió, tendrá más tiempo de prueba o puede lanzar "temprano".

Siempre he sido demasiado optimista en mis estimaciones, y puede poner mucho estrés en su vida, especialmente cuando usted es un joven programador sin la experiencia y la confianza en sí mismo para decirles a los jefes las verdades incómodas.


Me gustaría añadir a lo que dijo RB, cuando me encuentro en esta situación, estimo cuánto tiempo tomaría con las herramientas con las que estoy familiarizado, y luego doblo esa estimación para incorporar alguna curva de aprendizaje.

La parte importante es comunicarle a la gerencia que la estimación es una suposición , si presionan para obtener una estimación más precisa o si intentan - querido Dios - venderle un límite de tiempo (seguramente le tomará solo 2 días para construir la nave espacial). Enterprise, eres bueno que eres) SIGUE CON TUS ARMAS , no comprometas tu estimación, o el hecho de que no es confiable.

Si la gerencia lo reemplaza y le da un tiempo a la tarea, por ejemplo, "Bueno, tiene que hacerse en 2 días", una vez más hágales saber que esa es su estimación, que es exactamente tan confiable como la suya.

Obtenga todo esto por escrito.


Me ocupo bastante de la estimación en mi trabajo y es un verdadero desafío. Uno de mis mayores desafíos es estimar cuánto tiempo le tomará a un desarrollador diferente realizar una tarea sin conocimiento de cuán experto será ese desarrollador.

Si bien es posible que vea algún éxito inicial con el método "bajo promesa, sobre entrega", descubrirá que con el tiempo será superado por otras personas que siguen la línea de pensamiento "sobre promesas, bajo entregas". La falta de precisión volverá a morderte de cualquier manera. La precisión está muy ligada a la experiencia y limita el número de incógnitas con la tecnología.

Una cosa que sugeriría es tener una idea de qué tipo de presupuesto va a funcionar en su estimación. Si tiene un presupuesto pequeño, no se vuelva loco con la tecnología desconocida y quédese con lo que sabe. Si su presupuesto es un poco más flexible, entonces puede permitirse experimentar un poco.

También reconozca que habrá algunas tareas en las que todo lo que puede proporcionar es un Wild Ass Guess (WAG). Para estos debe establecer un tiempo mínimo para su estimación y dejar en claro que no sabe cuál es el máximo. Muchas veces este tipo de estimación es motivo suficiente para que ciertas características / requisitos sean recortados por la administración.


Ni siquiera intentes estimar. No hay forma de que su estimación sea correcta. Después de todo, solo es una estimación.

En su lugar, le recomendaría que dividiera la función en partes pequeñas (no más de, digamos, 1-2 días) e intente entregar estas piezas como código de trabajo, completo, comprobable y valioso para el cliente / gerente. De esa manera él verá por sí mismo su progreso en el día a día. Esto también significa que, de hecho, puede decidir detener el desarrollo una vez satisfecho y considerarlo completo, aunque no haya alcanzado todos los objetivos.

Eche un vistazo a las prácticas ágiles "Release Planning" y "Iteration Planning" para obtener información más detallada sobre este enfoque.


Simplemente adivine un número externo y evalúe inmediatamente, hágales saber que la información futura puede afectar sus estimaciones, pero que las mantendrá actualizadas.

A medida que los evalúe, manténgalos informados, ya sea a través de un documento publicado en la web o actualizaciones semanales, pero siempre incluya una "fecha de finalización estimada" actualizada y razones (si corresponde) para las extensiones.

La mayoría de los gerentes deberían entender eso, al preguntar por las fechas de finalización, realmente están diciendo "dennos una idea de cómo podemos planear nuestro cronograma" y "no se lo tomemos para siempre".

Si termina extendiéndose más de una o dos veces, reevalúe todo su cronograma en función de su nuevo conocimiento que usted no estima.


Te contaré un secreto. Incluso si fueras un experto con esa tecnología, es probable que tu estimación sea muy inexacta. Es la naturaleza de la bestia cuando se hace algo que es inherentemente una tarea de I + D. Desafortunadamente, la administración a menudo trata de aplicar un modelo de fabricación y exigir estimaciones precisas. Para ilustrar mi punto, considere la dificultad de estimar con precisión los siguientes dos esfuerzos:

A) Fabrique otros paraguas 11K que sean exactamente iguales a los 2K que generó el mes pasado. B) Diseña un nuevo tipo de paraguas y construye el primero.

El desarrollo de software es B, pero están pidiendo un presupuesto suponiendo que A.

Lo mejor que puede hacer es dividir la tarea en las partes más pequeñas posibles (no más de 1/2 día cada una) y luego triplicar el número final que se le ocurre (Método Spolsky)

Alternativamente, Steve McConnell tiene un libro completo (discutiblemente varios) sobre este aspecto de la ingeniería de software. http://www.amazon.com/Software-Estimation-Demystifying-Practices-Microsoft/dp/0735605351


Tenga en cuenta que si solicita una estimación de tiempo más grande pero la hace a tiempo, parece mucho mejor que estimar y solicitar una extensión.

Trataría de burlarme de un prototipo para que tengas una mejor idea del tiempo que tomará. Sea honesto con su gestión para que puedan presupuestar retrasos inesperados en la curva de aprendizaje.

EDITAR: También puede ver si puede obtener una fecha límite más "iterativa". En "Pragmatic Thinking and Learning", Andy Hunt señala que las personas son expertos en proyectos más cerca del final del proyecto y menos conocedoras desde el principio. No tiene mucho sentido hacer todo el diseño y la estimación del tiempo desde el principio, cuando todos son los menos conocedores del proyecto. Si "itera" los plazos y resuelve el problema en partes, tendrá más éxito.


Todas las respuestas anteriores han cubierto casi todo lo relacionado con la estimación en sí.

Una cosa que quisiera enfatizar es hacer un seguimiento de su presupuesto (una pequeña hoja de cálculo de Excel a la Joel, o incluso un documento de Bloc de notas si es muy simple), y al final de cada día actualizar esto a las cifras más precisas que ahora puede proporcionar . Incluso si no necesita pasar esto de vuelta a sus jefes, mantener esto actualizado le da una mejor idea de cómo están progresando las cosas, y lo más importante, tendrá una buena idea de por qué su estimación cambia a medida que avanza el trabajo .

Hacer esto te hará mejor para estimar en el futuro, tanto para esta tecnología específica como para otras que no has utilizado antes, simplemente porque en algún momento te exige saber cuándo cambian tus expectativas a intervalos regulares y averiguar por qué sucedió eso. .


Una gran cantidad de estimación precisa es el autoconocimiento. Si has escrito mucho código, si has tenido que aprender muchas API, empiezas a familiarizarte con preguntas como:

  • ¿Cuánto tiempo me lleva aprender una nueva API?
  • ¿Cuánto tiempo me lleva aprender un nuevo idioma?
  • ¿Cuánto tiempo me lleva aprender un nuevo conjunto de herramientas (compilador / vinculador / IDE)?
  • ¿Cuánto tiempo me lleva implementar una tarea típica?
  • ¿Cuánto tiempo me lleva probar mi trabajo?
  • ¿Cuánto tiempo me lleva desplegar mi trabajo?

A lo largo de eso, debes tener una idea de cosas tales como:

  • ¿Cuántos errores típicos crea y cómo se categorizan (es decir, fácil, difícil, imposible)
  • ¿Cuántas complicaciones se introducen (es decir, necesidad de refactorización debido a la falta de API de terceros o API con errores, necesidad de rediseñar debido a la incomprensión de la capacidad, herramientas / procesos de construcción no estándar)
  • Cuánto tiempo se pierde debido a interrupciones / problemas externos

Con base en todas estas cosas, podrá desarrollar una idea de cuánto tiempo tomará algo y podrá expresar sus suposiciones ("Suponiendo que la API esté cuerda ...") incluso frente a información tristemente incompleta.


Utilizo un sistema de etiquetado definido para mis estimaciones ... clase A, clase B y clase C.

La estimación de clase C es la primera que obtienen. Se declara abiertamente como más o menos 50% debido a incógnitas. Si quieren que les siga dando una clase B, entonces necesito dinero para investigar.

La clase B es más o menos 25%. A veces esto es lo suficientemente bueno y me dan el dinero para construir. Si no, menos dinero y más investigación.

La clase A es más o menos 10%, la final e ir o no ir. Si es una oportunidad y me alejo demasiado de la estimación, confieso a menudo y temprano.


Steve McConnell (y otros) habla sobre el cono de incertidumbre . Básicamente, usted proporciona una estimación que se ve así:

El trabajo tomará entre 3 y 9 semanas con 4 semanas siendo el más probable.

A medida que avanza el proyecto, puede refinar su estimación. A medida que realiza más trabajo y comprende mejor el esfuerzo requerido, puede refinar su estimación para ser más preciso.

Me ha funcionado, pero puede requerir un cierto esfuerzo lograr que otras partes interesadas en el proyecto entiendan el proceso.