In large scale systems/applications, a specification is prepared before. Basically it is trusty. So a software architect can design program for program and programers. But, large scale systems/applications orient rather program, not programers. Because such systems/applications are used for a long time. So these systems/applications should be flexible to respond a little change and have extendability. To implement these features, a software architect designs software on program ground, not programer ground. It devides software in rational modules.
That's very excellent. But, does it hold good in all cases?
Large scale systems/applications are just a kind of software. All of projects is not large scale. And, there are period, goal, scale, software life-time, runtime style (realtime or not?) and specialized programers. An ideal software design is optimal solution for those factors that is written during design period.
If someone see the design from another situation, he may feel that the design is not good.
Some architects quest for beautiful design. They think that is justice. But software design is not art that an architect dedicates his life. And software design is not game that an architect has fun. However, it's sure that there are not good guidances with the exception of large scale systems/applications. Some architects feel cool from those guidances and try to apply it to their project...
Tight situations may detach your design from an ideal software design that you think. On the other hand, tight situations sometimes bring you to optimal solution.