Структурирование кода, разделение классов, групп классов, одним словом модулей. Можно сделать и без интерфейсов, но получится монолит. Вообще интерфейс мне представляется так:

Благодаря интерфейсу с конкретной "распиновкой" возможно образование модулей. Модуль легко заменить, если он вдруг сломался, легко модернизировать. При разработке интерфейс располагают в таких местах, чтобы в нём было как можно меньше "проводов".
Минусы интерфейсов это написание дополнительного кода, который можно было и не писать.