Al escribir software, ¿es mejor escribir primero una versión que funcione y luego refinar, o refinar a medida que avanza?

Creo que las personas responden para el desarrollo web típico y no consideran otros dominios donde la entrega incremental puede ser problemática. Por lo general, es posible crear y probar en unidades pequeñas, crear prototipos, etc. en casi cualquier dominio, pero la entrega de software funcional orientado al cliente o integrado al sistema en muchos entornos empresariales e industriales (sin mencionar, aplicaciones muy reguladas) a menudo no es factible. ¿Desea un controlador de haz de protones para tratamientos médicos administrados de forma incremental como se describe? Probablemente no. Lo mismo para muchas aplicaciones aeronáuticas / astronómicas donde el costo / riesgo de falla es extremadamente alto. Las fallas seguirán ocurriendo, pero el objetivo es minimizarlas y sopesar los factores de costo / tiempo / riesgo.

El software es un campo muy amplio. Diferentes dominios y proyectos dictan diferentes necesidades de herramientas y metodologías. Comprenda lo que se necesita y luego elija sabiamente. No asuma que hay un enfoque de “talla única”. El viejo dicho de “no hay balas de plata” sigue siendo válido (y probablemente lo será en el futuro previsible).

La ingeniería de software también es relativamente inmadura en comparación con otras disciplinas. Algo de esto lo dictan los clientes: ahora estamos llegando a una fase en la que los clientes comprenden la necesidad de pruebas, seguridad, mantenimiento y otros aspectos del desarrollo. Como campo tenemos un largo camino por recorrer.

El primero El truco consiste en aprender a ofrecer nuevas versiones de trabajo frecuentes a medida que agrega funciones (y corrige errores).

El desarrollo incremental es un nombre para este proceso.

Al comienzo del proyecto, lo lleva a un producto en ejecución pronto, por lo que puede confirmar (o revisar) su arquitectura / diseño.

En etapas posteriores, evita que desperdicie demasiado esfuerzo en el desarrollo especulativo que no funciona, al mantenerlo enfocado en entregar periódicamente software de trabajo actualizado.

La mayoría del software nunca se “termina” hasta que se retira , por lo que un proceso que esté sincronizado con esta realidad tiende a producir mejores resultados con menos esfuerzo y estrés.

Bien así, ¿listo?

  • Haz algo
  • Envíalo
  • Hacerlo mejor
  • Enviar eso
  • Haz eso mejor
  • Envíalo
  • Hacerlo mejor
  • Envíalo

Tan rápido como puedas. Hacer que Lloop esté muy apretado aumentará dramáticamente la calidad de su producto final. Desea asegurarse de que está aprovechando cosas como la automatización de compilación para mantener su proceso racionalizado. Si está escribiendo webware, intente realizar una prueba ab, por ejemplo.

La refinación a medida que avanza es desastrosa Terminará en un ciclo de refinación de lo que ya refinó. Perderá el sitio de los requisitos rápidamente.