Key things every software architect should know outside domain expertise