A good architect may lack domain experience, or a domain expert who knows the code cold may not have architectural experience. Employee turnover can wreak havoc on an organization's institutional memory, with the perhaps dubious consolation of bringing fresh blood aboard. Programmers differ in their levels of skill, as well as in expertise, predisposition and temperament. Some programmers have a passion for finding good abstractions, while some are skilled at navigating the swamps of complex code left to them by others. Programmers differ tremendously in their degrees of experience with particular domains, and their capacities for adapting to new ones.
Programmers differ in their language and tool preferences and experience as well.
Buildings are tangible, physical structures. You can look at a building. You can watch it being built. You can walk inside it, and admire and critique its design. A program's user interface presents the public face of a program, much as a building's exterior manifests its architecture.