There is two step in building a system: think, and do.
19/11/2017 permalink linked site
This SE question is interesting, not because of its ground subject, but because of the system presented in it, and perfectly explained in answers.
Thinking about the overall system in a formal and logical setting is a job. Implementing it is another.
It's so different that, like described by the questionner, the two roles are implemented by two different peoples, each senior in its own domain.
This is common knowledge for most programmers, but beginners often forget one of these two steps, leading to complex and unclear source code, or no results at all.