Estoy comenzando un nuevo proyecto de Rails y su alcance es abrumador para mí. ¿Cómo es su proceso, paso a paso, para comenzar una aplicación nueva y minimizar la ansiedad? ¿Cómo te mantienes en el objetivo?

Primero, enumere las características . ¿Qué necesita hacer? Si cualquier cosa individual que necesita hacer es muy compleja, desglose como Chris sugiere. ¿Qué características dependen de cuáles otras? ¿Cuáles son de alta, media o baja prioridad? Especialmente, ¿cuáles deben estar absolutamente en el producto mínimo viable? Para facilitar el reordenamiento, no use papel, ingréselos directamente en un rastreador de problemas. (Tenerlo allí te ayudará más tarde).

Ahora, ¿qué es “demasiado complejo”? Cuando describo una característica, trato de describirla de tres maneras:

  1. Un título breve, como “Buscar dentro de los widgets de una empresa”.
  2. Una ” razón “, en el formato estándar como desee, como “Como comprador de widgets, quiero buscar dentro de los widgets de una empresa, para ver si tienen el tipo de widgets que necesito”.
  3. Una prueba de “camino feliz primario”, que describe lo que debería suceder si todo sale bien en el caso de uso típico. Escribo esto en el formato estándar dado cuando entonces, como: “Dado que la Compañía X tiene grandes widgets verdes, y grandes widgets azules, y pequeños widgets azules, y pequeños widgets verdes, cuando busco en los widgets de la Compañía X solo pequeños widgets verdes , entonces veo todos sus pequeños widgets verdes, y no hay widgets azules, ni widgets grandes, ni widgets de ninguna otra compañía “. La longitud de este puede llevarme a dividir la función en tres funciones separadas: buscar por empresa, buscar por tamaño y buscar por color. También puedo agregar algunas pruebas de ruta feliz * alternativas * (si hay varias formas en que se puede usar una función), y algunas pruebas de ruta triste (formas en que la función puede fallar). En este caso, una ruta alternativa feliz podría ser si la búsqueda también admite “o” en lugar de “y” (así que busco sus pequeños * o * widgets verdes, por lo que veo todos sus pequeños * o * verdes pero no grandes azules), y un camino triste podría ser si no tienen pequeños widgets verdes.

Al comenzar el trabajo, tome los tickets del rastreador de problemas en orden de prioridad . Si no está seguro de la prioridad, realice un triaje simple, recurriendo al lote de mayor prioridad si es necesario. Tenga en cuenta que todo lo que depende de la función X tiene mayor prioridad que la función X, incluso si el cliente enumera explícitamente la función X como una prioridad alta y la otra figura como inferior, o no aparece en absoluto. Algunos rastreadores de problemas pueden permitirle expresar tal dependencia y permitirle ver solo tickets no bloqueados.

Al implementar, asegúrese de que la prueba de características falla. (De lo contrario, no está probando lo que crees que está probando, y es peor que inútil.) Trabaja hasta que la prueba de características pase , TDDing algo no trivial que encuentres en el camino. Trabajar en pequeños incrementos . Haga lo más simple que resuelva el problema inmediato, pero hágalo limpiamente. Comprometerse temprano, comprometerse a menudo. Lo que, por supuesto, implica, utiliza el control de fuente, con ramas de características, a la Git Flow o Github Flow. Refactorizador No rompa la construcción de la rama maestra. Obtenga retroalimentación : si no tiene colegas para inspeccionar sus solicitudes de extracción (e incluso si lo hace), use herramientas como hedor, flagelo, flay, guardafrenos, bala, prácticas de railsbest, etc. La integración continua también puede ayudar.

(Tenga en cuenta que estoy omitiendo por completo los problemas de estimación, programación, etc.)

Consigue una hoja de papel grande. Divide el problema en partes más pequeñas que trabajan juntas para resolver el gran problema.

Ahora repita el proceso para los trozos más pequeños, hasta que quede con piezas lo suficientemente pequeñas como para caber en clases y módulos individuales.

Ahora puede comenzar a codificar las clases y los módulos en función de su diseño en papel.