Zasady projektowania aplikacji

Witam,

potrzebuje jakiegoś dobrego poradnika w jaki sposób zabrać się tak solidnie za projektowanie aplikacji. Czy najpierw spec (specyfikacja), diagramy UML a potem Agile / Scrum? W jaki sposób ugryźć ten problem? Jak napisać dobrego speca?