La función más importante de una especificación es diseñar el programa. Incluso si eres el único trabajando en el código, y escribes una especificación solamente para tu propio beneficio, el acto de escribirla — describiendo minuciosamente cómo funciona el programa — te obligará a diseñarlo de verdad. http://spanish.joelonsoftware.com/PainlessSpecs/1.html
Creo que la falta de una vista de estructuras a mayor escala para un sistema de software es una razón importante que contribuye a la aparente complejidad que se atribuye a los sistemas de software. El diseño y construcción de casas residenciales se verían intrínsecamente complejos si se vieran en términos de clavos y martillos. Los carpinteros, en su mayoría, trabajan de acuerdo a un plan desarrollado por un arquitecto. Ellos pueden ver de forma más sencilla la estructura de un casa en los planos del arquitecto. Incluso se pueden dar el lujo de dar un paso atrás y ver la estructura completa. Un desarrollador de software que trabaja sin un diagrama de arquitectura no puede darse ese lujo. El resultado es que gran cantidad del software se parece a una casa construida sin un plan y por varios carpinteros que no se hablan entre si.
«La situación del software», Douglas Bennett, http://community.crosshorizons.us/blogs/gersongc/rss.aspx
How to be a Programmer: A Short, Comprehensive, and Personal Summary – Robert L Read
How to Design Programs – An Introduction to Computing and Programming
Trece Consejos Para Comentar Tu Código