Unfortunately we tend to become aware through negative experiences: scalability or failover issues in your example. Code reviews will help pick these things up but only if review hasn't been entirely delegated from those that architecturally aware.
A more comprehensive testing strategy (ie, more than unit testing!) can also show where awareness is needed by bringing these negative experiences into a portion of the development lifecycle where education and experimentation can be encouraged.
E-mail addresses are not publicly displayed, so please only leave your e-mail address if you would like to be notified when new comments are added to this blog entry (you can opt-out later).