One question: when splitting dependencies into packages, where do the protocols for the interfaces between them live? For example if A depends on B, where B implements BProtocol, is BProtocol stored in A package or B package? Or do you have a separate packages with all app's interfaces?