architectural design in software engineering tutorial point