¡Oh muchacho, eso es mucho si realmente quisiste decir que todo te sucedió!
ADVERTENCIA : en muchos de los puntos a continuación, puede sentir que lo critico y que quiero responsabilizarlo por los errores y no tener en cuenta los factores externos. Yo no. Es solo que no das muchos detalles, y yo solo proporciono listas de verificación de acciones para asegurar que las cosas no salgan mal. Sé que he cometido muchos errores (todos lo hacen) y solo mejoramos si aprendemos de ellos. Y para aprender de ellos, debemos comenzar a verlos como errores en primer lugar, y aceptar la responsabilidad de lo que salió mal de nuestra parte. Demonios, acepta la responsabilidad de lo que salió mal en las partes de otras personas, también puedes aprender de eso.
Tu proyecto falló
No hay mucho que puedas hacer para mitigarlo ahora.
Sin embargo, puede hacer mucho para evitar que se reproduzca en el futuro. Sugeriría tratar de mejorar su proyecto y sus habilidades de gestión del tiempo.
Uno de los libros con la mejor relación ((consejos válidos) / páginas) que he leído sobre el tema, aunque quizás no sea el mejor, es la Gestión de proyectos radicales de Rob Thomsett .
Realmente no especifica qué falló su proyecto, pero supongo que una combinación de cosas que desequilibró en el triángulo costo / tiempo / calidad habitual . En mi opinión, el factor más importante es liderar el proyecto y el desarrollo estando siempre en contacto con sus actores técnicos (desarrolladores y evaluadores) pero también con sus partes interesadas. Demasiados proyectos fracasan porque no escuchan a los patrocinadores o partes interesadas y no los presionan para que se involucren en el proceso.
Si no están involucrados, no puedes saber lo que quieren. Si no puede saber lo que quieren, no puede entregarlo. Si no lo entregas, serán infelices. Eso es un fracaso. Además, si no involucra a sus partes interesadas, se desconectan de la realidad de la ingeniería de software, lo que significa que no entienden sus problemas. Si a menudo están en contacto con usted, obtienen una mejor comprensión de lo que tiene que enfrentar. Serán más capaces de entender cuando les diga que una característica "pequeña" [risas] llevará meses. Pueden confiar mejor en su planificación porque ayudaron a construirla. Un proyecto no puede tener éxito con solo "especificaciones al principio, desarrollo, pruebas, entrega al final". Simplemente nunca lo hace. Puede entregar lo que se solicitó en las especificaciones,
Lo más importante también es hacer una retrospectiva y asegurarse de que no tenga ego y no sea un juego de culpa. Solo identifica los problemas.
Lo que ha pasado días codificando fue rechazado por su equipo
He estado en esa situación. Nuevamente, no puedes hacer mucho para mitigar eso, excepto:
- Guárdelo en el SCM para más tarde.
- Tal vez intente introducir pequeños fragmentos en la base de código principal en lugar de una gran refactorización.
Pero hay cosas que puede hacer nuevamente para evitar este tipo de situación:
- ¿Por qué sucedió? ¿Cuál es la razón del rechazo?
- La mayoría de las veces cuando veo que esto sucede (y ese fue el caso para mí también), significa que el desarrollador se fue solo o en modo de codificación de cowboy y produjo cosas que nunca se pidieron. El código que no proviene de los requisitos comerciales puede ser elegante y "mejor", pero a menudo es una pérdida de tiempo y dinero. Además, costará aún más si lo integra, ya que necesitará probar nuevamente. Piense como las personas que le reparten el dinero: también debe ser eficiente en ese nivel.
- ¿Fue satisfactoria la calidad del software producido? ¿Cumplió con las normas y convenciones de actividad en su empresa?
- ¿Reportó periódicamente (y con frecuencia) a los gerentes directos sobre esto? ¿Intercambiaste ocasionalmente con otros desarrolladores del equipo? Si no, no saben nada al respecto, les costará mucho tiempo evaluarlo y revisarlo ahora. NO cuenta al mismo tiempo al final. Es como siempre tratar de posponer la limpieza de su apartamento de alquiler y luego tratar de limpiarlo solo cuando se mude: es un trabajo horrible, es agotador, es más difícil de lo que hubiera sido si se hiciera regularmente, y a menudo no se hará derecho.
- ¿Produjiste pruebas de producción? Pruebas de unidades? Pruebas de integración?
- ¿Se revisó su código en el SCM regularmente? ¿Estaba en una rama diferente? ¿Necesitaba una rama diferente o podría haberse hecho en el tronco? Aplazar el código de confirmación suele ser una mala señal. Obviamente, a veces estás tentado a hacerlo, pero solo te disparas en el pie.
Nadie escucha tus ideas en tu empresa
Bueno, hay 2 opciones aquí, y veremos ambas:
- Tus ideas eran malas.
- Tus ideas eran buenas.
Comencemos asumiendo que eran malas (una vez más, reflexionar sobre eso y aceptar su idea era simplemente malo, podría ser difícil, lo sé). ¿Qué haces para cambiar eso?
- ¿Por qué se te ocurrió la idea? ¿Cuál es la razón ? ¿Existe una necesidad real de lo que su idea intenta traer a la mesa?
- ¿Cómo se te ocurrió la idea? ¿Lo hiciste por tu cuenta? ¿Compartiste? ¿Idea genial? ¿Plan? ¿Prototipo? (haga esto en el orden correcto. Si falla en el camino, descarte la idea, no continúe. O al menos no en su horario de trabajo).
Las ideas son solo ideas. Si solo los sugiere como ideas y son rechazados, no veo por qué se sentiría mal por eso. Sin embargo, si actúas sobre ellos sin notificar a nadie y ENTONCES solo envías tus ideas y son rechazadas, obviamente siento la frustración perdida en el momento. ¡Y tus gerentes lo hacen!
Asumiendo que tus ideas eran buenas:
- ¿Fue buena tu presentación?
- ¿Fue buena su forma de hacer la presentación? (Soy un desarrollador, sé de lo que estoy hablando: somos PITA gruñones, arrogantes y pedantes que siempre tenemos razón y con quienes es difícil trabajar debido a nuestros egos desproporcionados ).
- ¿Tienes un plan para implementarlo? ¿Pensaste en el costo y el tiempo? ¿Pensaste cómo beneficia a los usuarios / clientes? ¿Pensaste cómo afecta las ventas? ¿Pensó cómo trabajar en esa idea podría afectar otros proyectos y prioridades? Me vas a decir, "¿por qué debería hacer todo esto, son el trabajo de mi gerente y los equipos de marketing o ventas?" Excepto en este momento, estás tratando de hacer parte de todos sus trabajos.
El patrón de diseño que introdujo con fuerza en su equipo creó un desastre
- ¿Por qué introdujiste el patrón?
- Si creó un desastre, entonces probablemente:
- no era el patrón correcto
- no se implementó correctamente,
- no estaba integrado bien.
- ¿Cómo lo introdujiste? ¿Cómo define exactamente el estado "desorden"?
- código menos legible?
- menos mantenible?
- las construcciones están rotas?
- Hay diferentes tipos de "desorden". Saber lo que el lío se podría ayudar a saber qué fue el fracaso de allí, y si era culpa del patrón de diseño.
Además, estoy un poco sorprendido por el enfoque en sí. ¿Tuviste que presionar para que se introdujera un patrón de diseño? Eso parece bastante extraño. Ya existe un patrón, o debe refactorizar una parte de su solución de acuerdo con el patrón. No lo empuja como lo haría con la adopción de un marco o tecnología (como las personas presionaron realmente para tener XML en todas partes, y ahora como las personas comienzan a presionar para poder escribir HTML5 en la cubierta de sus productos en letras grandes y brillantes).
¿Por qué tuviste que empujar? ¿Por qué hubo resistencia? Tal vez estaba justificado.
¿Pudiste proporcionar ejemplos de que este patrón particular ayudaría a mejorar tu base de código de manera significativa (por ejemplo, combinándolo con un ejemplo de Refactorización a Patrones ).
Nota completamente fuera de tema, pero eso es lo que pensé por primera vez cuando leí el título de la pregunta, ya que pensé que se refería a fallas de software ... Tenía un software que implementó una clase BlackHole para gestionar un tipo muy especial de excepciones en una de las componentes. Puede parecer (y realmente lo es) un truco obviamente extraño y sucio, pero el nombre en sí fue tan excelente que todos lo apreciamos por una manera bastante genial de manejar una falla. :)