The best products are built when engineering, product, and designers work together. When things are running smoothly each brings skill, knowledge, and experience the others cannot. When things are running poorly the teams do not respect or trust each other and question the others’ approach and decision making. Inevitably this leads to a flawed product that doesn’t solve customer needs and gets replaced by one that does. It’s possible to ride previous success through inertia, marketing, and price but to grow in the modern era you need to focus on product.
One of the best ways to maintain this mutual respect and collaboration is by ensuring that there’s a skill overlap between the various groups. If an engineer has no insight in the design process she won’t be able to put herself in the designer’s shoes and understand the effort involved. Similarly, if a product manager doesn’t have some understanding of code it will be difficult to estimate complexity and potential tradeoffs without working directly with an engineer. It’s easy to dismiss others’ work as easy until you try to do it yourself and then you realize that there’s unforeseen intricacy and depth. At that point you develop an appreciation for the work others do and can follow along with the process.
Teams are most productive when everyone trusts and respects others and allows them to work uninterruptedly on their components. Ironically, this is achieved by having some experience in another’s domain since that’s how you start to truly value their contribution. Having this additional knowledge also gives you enough context to push back and collaboratively come up with a better solution than would have developed independently.