Basic design patterns for larger code projects