design process: define data structures, build program structure from data structure, express program in executable operations (some problems with structure clashes several data structures, one program) and backtracking (data structure doesn't have needed information accessible)