Conozco muy bien esta situación. Cuando me atasco de esa manera, trato de tomar diferentes puntos de vista sobre el proyecto.
1.) Punto de vista del usuario / cliente - use comentarios
Desafortunadamente, estamos atrapados en nuestro código de una manera que no podemos ver nuestros propios defectos porque usamos nuestras aplicaciones de la forma en que las codificamos. Mire cómo la gente lo usa e intente descubrir cuál sería la guía de usuario más intuitiva. Juega con prototipos de UI. Esto parece ser divertido, pero si descubre que se vería obligado a recodificar grandes partes de su código simplemente cambiando la lógica de uso que es hora de comenzar un ciclo de rediseño.
2.) Haz un análisis funcional de tu código y visualízalo
Algunos IDE y frameworks lo empujan a, por ejemplo, mezclar UI y código de back-end. Si permite que esto suceda, algún día enfrentará la situación de que su base de código difícilmente puede mantenerse debido a dependencias nebulosas y difíciles de romper. Especialmente mezclar el código de la interfaz de usuario con otro código puede generar código de espagueti y funcionalidad redundante. Divida su código en bloques funcionales como, por ejemplo, clases de bases de datos, clases de comunicación, clases de interfaz de usuario, clases principales, etc. y dé a los bloques de funciones nombres para hablar. Luego visualice la funcionalidad con una herramienta gráfica (uso una herramienta de mapeo mental) para averiguar si su estructura es lo suficientemente lógica y modular como para que pueda reutilizar enormes bloques de código para diferentes proyectos y pueda reemplazarlos con versiones más nuevas sin dolor grande.
La mejor manera de hacer esto en mi experiencia es crear un documento que visualice todas las dependencias entre sus clases y sus llamadas desde su código. El resultado es una visualización del diseño de su interfaz. Si este mapa de códigos parece un clusterf completo ***, es hora de actuar. Si aún no sucedió, debe pensar en una convención de nomenclatura adecuada que represente la estructura de su código de una manera que no tenga que pensar en cómo llamarlo y qué hace.
3.) Utilice enfoques comunes para garantizar la calidad
Mi favorito es el FMEA. En términos de codificación, esto significa no solo analizar lo que salió mal en el pasado sino también pensar en lo que podría salir mal. Un ejemplo bastante común es una conexión de red repentinamente caída. Después de hacer esto, puede clasificar las condiciones de error por consecuencias como pérdida de datos, bloqueo, cálculo incorrecto y juzgar el impacto en el usuario. Si aún no lo ha hecho, la definición de errores simplificados y las clases y rutinas de excepciones pueden ayudarlo a mantener su código limpio y directo. La mejor manera es implementarlos en cada nuevo código antes de comenzar a escribir cualquier otra cosa. (Bueno, no siempre soy culpable de seguir este consejo).
Además, me ayudó a generar y actualizar con frecuencia una "lista de propuestas de mejora" para mi propio código. (Para ser sincero, todavía hay mucho código en mis proyectos de los que definitivamente no estoy orgulloso). También trato de tomarme el tiempo para recopilar y echar un vistazo al código de mejores prácticas de las documentaciones API, conferencias de desarrolladores o revistas de desarrolladores.
Hasta este punto no hay necesidad de tocar su código. Se trata simplemente de darse cuenta de lo que va mal y encontrar una manera de definir cómo mejorar su código.
Finalmente algunos consejos para el trabajo diario de un viejo pedo. Intenta evitar morder más de lo que puedes comer. Esto lleva a demasiada presión para una codificación limpia. Raramente tienes tiempo para hacerlo bien, pero luego tendrás que tomarte el tiempo para arreglar los defectos.
Nada es tan duradero como la solución provisional, pero cuando se rompe a menudo es demasiado tarde para solucionarlo a tiempo. Los ejemplos son hacks desagradables o excepciones extrañas que solía hacer que algo funcionara a pesar de, por ejemplo, una falla en el marco subyacente o el sistema operativo. Y luego la falla se soluciona o la nueva versión simplemente elimina la API ...
Si está atascado y se ve obligado a encontrar una solución alternativa que hacer comentarios y tomar notas que deben revisarse de vez en cuando. Normalmente mejoramos cada vez más por aprender algo nuevo. Si encuentra una mejor manera, impleméntelo tan rápido como pueda. De lo contrario, podría encontrarse codificando la solución para la solución y la excepción de la excepción algún día. (El que no tiene pecado entre ustedes, que me arroje el primer byte).