In the end, even with coarse-grained interfaces on every remotable class you'll still end up with too many remote calls, and a awkward to modify system as a bonus. In most cases the way to go is to use clustering. Put all the classes into a single process and then run multiple copies of that process on the various nodes. That way each process uses local calls to get the job done and thus does things faster. You can also use fine-grained interfaces for all the classes within the process and thus get better maintainability with a simpler programming model.
Clustering involves putting several copies of the same application on the different nodes.
So you want to minimize distribution boundaries and utilize your nodes through clustering as much as possible. The rub is that there are limits to that approach. There are places where you need to separate the processes. If you're sensible you'll fight like a cornered rat to eliminate as many of them as you can - but you won't eliminate them all. One obvious separation is that between the traditional clients and servers of business software.