SOFTWARE PATTERNS