D>В идеале, то потом. В реале обычно это параллелится. На самом деле, насколько доверяете разработчикам.
Золотые слова.
D>Опытным можно дать классы без интерфейсов, они сами договорятся.
Лучше наоборот — дать только интерфейсы, а уж в процессе пользования оных уже и возникнет понимание, чего не хватает. Так проще создавать loosely coupled systems, ну а тестировать такие системы намного проще и удобнее.