How do you approach documenting your software architecture, and how do you use UML diagrams to communicate design patterns?