From the moment software products are delivered, they go through a series of modifications during their life-cycle. The maintenance process can either be corrective or evolutionary/adaptive. A corrective process is used to fix implementation errors and an evolutionary/adaptive process is used to improve performance and structure or other attributes, or to adapt the product to a changed environment, according to requests from users. When it comes to evolutionary maintenance, software reengineering plays a fundamental role, since working teams responsible for maintenance projects frequently do not have enough knowledge about the system they will be working with. The purpose of this dissertation is to present a process that gives directions for maintenance processes that require software architecture modifications, encouraging the usage of design patterns by the means of reengineering technics. This paper will also present a case study where a software system works as an instructive example of how the process can be used, as well as some difficulties found throughout the elaboration of this work. Finally, this paper will present conclusions and suggestions for future studies in the software systems reengineering field.