Hi @tsabend, good questions!
We feel that many of these things have answers that are independent of the architecture. In any app that has decided to become modular (even vanilla UIKit) you will face these problems unfortunately. Perhaps people will try out modules more frequently with TCA since it's a little easier, and so that may expose more people to these problems, but the problems are there regardless :/
Here's some answers to your questions:
We haven't done any benchmarking recently, but from what we've seen in recent WWDC talks (like this one) is that the situation with many frameworks has gotten much better. I don't think the current guidance is to limit the number of dynamic frameworks (they used to recommend 6!).
However, if there are still problems these days then there are some tricks in the community for creating static frameworks, and so perhaps a little bit of infrastructure work is needed to get something like that set up.
This will vary wildly for teams and applications. One possible approach for very large teams where a group of engineers own a particular feature is to split out modules for each team's core feature. This would allow them to build in isolation and their compile times should only slow down as they add more code not as everyone else adds more code.
This even scales to teams that act more as a "platform" for other features, i.e. they build a feature that other teams plug into and configure. It is possible to fully disentangle all of the dependencies so that a team can build such a platform without having to depend on everyone who wants to plug into them, thus allowing them to build and iterate without being slowed down by other teams adding more code.
SPM actually shines in this regard. You can very easily create a sub-directory, do swift package init, create a whole bunch of little libraries in there in a very lightweight way, and then just drag-and-drop that directory into Xcode to get instant access to every library in the package. You could have a package for each screen in your application, which would allow you to build that feature (and only its dependencies) in isolation, and run it in isolation, either in a shell application in the simulator or in SwiftUI previews (unfortunately not playgrounds due to a bug in Xcode/SPM
)
We do have plans to discuss modularity a lot more, and so these questions and people's experiences will be valuable for understanding what people are looking for. @stephencelis and I have consulting with multiple companies of various sizes and that has informed a lot of how we think about these problems and what approaches work.