Paso mucho tiempo pensando en el diseño, por lo que la implementación es terriblemente lenta. ¿Cómo supero este problema?

Primero determine si realmente es un problema en sus circunstancias.

Mi experiencia ha sido todo lo contrario de la mayoría de los encuestados hasta ahora: paso mucho tiempo en diseño, pero debido a eso, la implementación generalmente se realiza muy rápido, y rara vez tengo que volver a visitar mi código.

Creo que mucho depende del tipo de código que estés escribiendo. Los programas para el consumo general generalmente pueden soportar el estilo de desarrollo de iteración rápida, o algo similar que no requiere demasiado tiempo de diseño por adelantado. También es bastante inevitable si solo tienes una vaga apariencia de requisitos al principio.

Solía ​​hacerlo yo mismo, pero en la última década, hice la transición al software de integración para control industrial. Para este y otro software similar, “hacerlo bien la primera vez” es prácticamente obligatorio, y cada iteración cuesta una cantidad cuantiosamente grande de dinero en tiempo de inactividad y otros estados que no son de producción; incluso acceder a las máquinas en las que se está ejecutando su software puede no ser trivial (salas blancas, esperando que la producción alcance un hito antes de detenerse, etc.). Doble ídem para software de control automotriz, médico, etc., donde los errores pueden costar vidas.

En esos entornos, no solo vale la pena hacer Big Design Up Front, sino también no hacerlo solo . Eso es lo que mi socio comercial y yo hacemos a menudo durante todo el día, discutiendo con los clientes sobre cuál es exactamente su problema (he escrito sobre cómo hacer esto antes), y luego discutiendo entre nosotros sobre cómo solucionarlo. Después de muchos diagramas y acalorados debates (somos grandes admiradores del proceso de confrontación), hemos reducido el alcance del problema a un tamaño adecuado, sin perder tiempo implementando cosas agradables que solo entran en contacto con el cliente. mucho más tarde cuando las circunstancias cambien.

Tengo un problema similar y trato de superarlo. El problema en mi caso es que nunca encuentro el diseño ‘perfecto’, así que termino implementando nada. La solución: refactorización. Escribir código, como sugirió Gregory Popovitch, y luego realizar refactorizaciones en él, en función de sus necesidades en lugar de ‘catedrales’ previamente diseñadas.

Este ‘miedo’ bloqueó el desarrollo de mis proyectos personales durante demasiado tiempo. Encuentro que los proyectos existentes más grandes son más fáciles de manejar, porque allí debe sincronizarse con el diseño existente, que puede comprender o no. Pero es más fácil crecer a partir de alguna base existente en lugar de construirlo yo mismo. Me resulta más fácil llegar a las partes ‘divertidas’ del desarrollo.

Solo comienza a codificar. Siempre puede reescribir cuando se da cuenta de que hay una mejor manera, y en cualquier caso es poco probable que un diseño en papel sea correcto en todos los puntos.