As the size and complexity of software has rapidly grown during the past two decades, it has become a big challenge to assure quality of software and to curb the cost of developing software. Many ways have to be brought to bear in order to meet this challenge. One of them is the design and documentation of software architecture. In this article, I discuss various aspects of designing and documenting software architecture in order to provide some practical guides to software engineers.