Este documento presenta una introducción a varios conceptos fundamentales de diseño de software, incluyendo la abstracción, el refinamiento, la modularidad, la arquitectura de software y la jerarquía de control. Explica que estos conceptos proveen un marco de trabajo para diseñar software de manera correcta y ayudan a responder preguntas sobre cómo particionar el software en componentes, separar funcionalidad y datos, y definir la calidad técnica de un diseño.