Most software problems have a finite set of solutions to choose from. An important role of an architect is to understand the trade-offs of each solution and decide on the best solution for the given business case.
For example, one solution to a given problem could be less performant but may result in a clean and maintainable codebase. The job of the software architect in this situation would be to determine whether performance or maintainability is the most important aspect for the problem at hand. The compromise reached should always be in the best interest of the software product.
It is important to document the reason for picking a particular solution along with it’s trade-offs for future reference. Software people are notoriously forgetful of their design decisions after a few days 🙂
As the saying goes, there are are many ways to skin a cat, the architect should find the best way to do it given the resources while achieving the end goal.