This paper presents, in tutorial fashion, an introduction to basic software design philosophy as it has evolved from an art into a science. Basic concepts of “structured” software design are presented for developing software in an industrial environment with high reliability, ease of understanding, and ease of maintenance. Several software design techniques, including structured analysis charts and HIPO charts, are described. The relative merits of these techniques are presented. “Top down” testing and efficient integration methods are described. Design verification aids to improve software reliabilitiy, including “structured” programming are described. A systems approach towards software design throughout software life cycle is presented. Particular emphasis is laid on software documentation and maintenance. A systematic way of designing software is emphasized.