Software Design

Structure, patterns, and domain models before the code is written.