This document discusses several software design techniques: stepwise refinement, levels of abstraction, structured design, integrated top-down development, and Jackson structured programming. Stepwise refinement is a top-down technique that decomposes a system into more elementary levels. Levels of abstraction designs systems as layers with each level performing services for the next higher level. Structured design converts data flow diagrams into structure charts using design heuristics. Integrated top-down development integrates design, implementation, and testing with a hierarchical structure. Jackson structured programming maps a problem's input/output structures and operations into a program structure to solve the problem.