Software architecture : What should we consider when designing a software from scratch and how can we build themLeia menos