Designing system components - Evaluating technology choices - Planning database schema or API structure