Hay un principio general que rige la necesidad de refactorizar y optimizar, tanto en cascada como en Agile: YAGNI (No lo vas a necesitar). Un segundo principio es el corolario del primero: "La optimización prematura es la raíz de todo mal", el equivalente de codificación del proverbio general "el enemigo de la excelencia es la perfección".
Tomemos los principios y apliquémoslos. Tiene el requisito de construir un algoritmo ETL que tome un archivo de un tipo particular, extraiga su información y luego la coloque en una base de datos. Su objetivo para esta semana (para nuestros propósitos, no importa si está en una tienda Agile o SDLC) es lograrlo.
Eres un tipo inteligente, y se te ha dado una idea del panorama general. Usted sabe que este no es el único tipo de archivo para el cual el proyecto necesitará un ETL. Por lo tanto, considera implementar este algoritmo ETL para que también funcione en otro tipo de archivo, que solo tiene pequeñas diferencias. Hacer esto violaría a YAGNI. Su trabajo no es desarrollar el algoritmo para ese otro archivo; es desarrollar el algoritmo para el archivo que se necesita para el final de la semana. Para cumplir con ese objetivo y pasar las pruebas de aceptación, debe desarrollar ese algoritmo y hacer que funcione correctamente. "No necesitará" el código adicional para que funcione con el otro archivo. Puede pensar que le ahorrará tiempo incorporarlo ahora, y puede que tenga razón, pero también puede estar terriblemente equivocado; Es posible que el algoritmo para el otro archivo deba usarse en un área del sistema en la que no se puede usar su código, o los requisitos para el nuevo archivo pueden ser diferentes a los suyos en formas que no conoce (en Agile, esos los requisitos pueden no existir todavía). Mientras tanto, ha perdido tiempo y ha aumentado innecesariamente la complejidad de su algoritmo.
Ahora, es la próxima semana, y como dudosa recompensa por su excelente trabajo en el primer algoritmo, se le ha encomendado la tarea de crear algoritmos para dos nuevos tipos de archivos. Ahora, usted necesita un código adicional para que su algoritmo funcione con más archivos. Puede extender su algoritmo existente usando un patrón de método de plantilla que usará un patrón básico con pasos individuales específicos de archivo, o simplemente puede derivar una interfaz común de su algoritmo existente, desarrollar dos nuevos que sigan la interfaz y conectarlos a un objeto que puede elegir qué algoritmo usar.
Durante el desarrollo, sabe que tiene el requisito de que el sistema pueda procesar 10 KB de datos sin procesar por segundo. Realiza una prueba de carga y encuentra que su algoritmo de borrador inicial maneja 8 KB / s. Bueno, eso no va a pasar los AAT. Echas un vistazo y ves que hay alguna estructura de bucle de complejidad O (mi Dios) en tu algoritmo; lo optimiza y obtiene 12 KB / s. "Bastante bien", piensas, "pero si tuviera un bucle tan pobre en el código, ¿qué más puedo depilar?". zumbido Acabas de violar la regla de "optimización prematura". Su código funciona y pasa todos los requisitos. Está "listo", hasta el momento en que los requisitos se actualicen para requerir 15 KB / s. Si eso sucede, ENTONCES, vuelve a extraer el código y busca cosas para mejorar.
Siga este proceso simple mientras desarrolla, ya sea en Agile o en SDLC tradicionales: "En el primer pase, haga que funcione. En el segundo pase, hágalo bonito. En el tercer pase, hágalo SÓLIDO". Lo que esto significa es que, cuando crea una línea de código por primera vez, haga que ese código haga su trabajo correctamente y sin errores, pero no preste demasiada atención a las reglas de diseño dentro de este código, ya que por todo lo que sabe ahora mismo ' Nunca volveré a tocar esta área. La próxima vez que visite esa línea de código, acaba de demostrar que está equivocado; ya no es una pieza única del sistema. Reformúlelo para facilitar la lectura, la concisión del código y / o los principios DRY (es posible que haya copiado algún código para hacer algo cinco veces; refactorícelo en un bucle y / o una llamada a un método). La tercera vez que trabajas en esa línea de código o alrededor de ella,
O(my God)-complexity
si nada más, me hizo reír!