There is a wide range of opinions regarding which architecture is the most suitable for traditional apps; there is no one size fits all decision. As we've already experienced, KMP gives you a lot of flexibility in how you plan on organizing your shared code.
Certain things will be influenced by KMP and probably move you in a certain direction (such as choosing fakes over mocks). Before we dive into these constraints, I want to emphasize one key benefit of shared code and KMP. In Chapter 1, The Battle Between Native, Cross-Platform, and Multiplatform, we discussed the costs of keeping Android and iOS in sync. While there are best practices to limit working in silos, enforcing a shared architecture is one of the things that teams find to be one of the immediately evident benefits of KMP as it becomes easier to communicate between teams.
Thus, I'd say that an ideal architecture in KMP would be "one that accomplishes sharing the most of the...