Pues me parece una pregunta bastante interesante. En lo personal yo creo que todos en mayor o menor grado cometemos el error muchas veces de empezar a echar código y luego en el momento de que algo sale mal empezar a pensar como solucionarlo. Creo que ese vicio se debe a que generalmente hacemos cosas pequeñas y pues consideramos que no vale la pena pensar mucho el diseño porque se hara facilmente con un par de lineas.
Mi consejo y metodología que ultimamente he tratado de seguir es la siguiente: Primero me entero del problema global, luego pienso en las pequeñas mini tareas que debo saber para lograr el resultado y si alguna de ellas no domino la aprendo o les pregunto a mis amigos del foro
y por ultimo las unifico para lograr el global. De esta manera es mas facil que uno se pueda concentrar en el resultado final y no andar patinando en pasos intermedios.
Igual planificar es muy util porque permite optimizar pensando a futuro, si solo nos concentramos en que salga bien y a futuro necesitamos expandir lo trabajado, es mejor tener algo claro, bien documentado. En ocasiones por cuestiones de entregas uno le toca hacer algo que funciona pero que uno en el fondo sabe que se puede hacer mejor. Entonces en esos proyectos en ocasiones busco posteriormente las mejoras que le puedo hacer y si me alcanza el tiempo las mejoro porque al final se optimiza y mejora uno su bagaje.
Concuerdo con maycolalvarez, el diseñar algo no amarra a que sobre la marcha sea necesario rediseñar, pero si desde un principio se diseña bien es mas probable que las correcciones posteriores seran pocas.