I'd like to say "assume nothing about each other", but to speak any language at all requires some assumption. (Even if it's the assumption that the other person can hear.) We have to make some assumptions about what we're up for, but always leave a door open for someone to say "hey, I want something else".
When making a product, ensure that it is at its core infinitely reconfigurable, infinitely flexible, in such a way that a configuration of the product can work around limitations in the product itself.
Tripartite systems are great for this. (Locksmith has locks, keys, and key conditions; Mechanic has events, tasks, and actions.)