Приведите пример использования интерфейса, от которого есть польза, как понять что тут нужно использовать интерфейс, а тут не стоит?
Я в своей системе реализую некий UI Builder.
Есть предопределенные поля Input, Checkbox и т.д.
Однако, должна быть возможность создавать пользовательские поля.
При этом такие поля обязаны придерживаться определенных соглашений, чтобы система не сломалась. Например, поля обязаны реализовать метод render. И не как-то, и именно так, как положено.
Для этого я во всех встроенных полях реализую интерфейс FieldContract

interface FieldContract {
  public function render(Repository $repository): ViewContract;
}

Теперь сторонний разработчик, захотевший написать расширение к системе будет обязан реализовать в своих кастомных полях интерфейс FieldContract.
А я внутри системы всегда уверен, что у поля есть необходимый метод с необходимой сигнатурой, даже если это поле реализовал сторонний разработчик.
Пример интерфейса
interface StorageInterface
{
    /**
     * Сохранить файл. Возвращает строкой относительный путь до файла
     *
     * @param string $directory - директория
     * @param string $content - контент файла в бинарном представлении
     * @param string $fileName - название файла для сохранения
     *
     * @return bool
     *
     * @throws Exception
     */
    public function save(string $directory, string $content, string $fileName): bool;

    /**
     * Метод проверки наличия файла по относительному пути
     *
     * @param string $filePath
     *
     * @return bool
     */
    public function isFile(string $filePath): bool;

    /**
     * Получить файл в виде ДТО
     *
     * @param string        $directory
     * @param string        $realFileName
     * @param string | null $fileName - пользовательское имя файла
     *
     * @return GetFileDTO
     *
     * @throws FileNotFoundException
     */
    public function getFile(
        string $directory,
        string $realFileName,
        ?string $fileName = null
    ): GetFileDTO;

    /**
     * Удалить файл по пути
     *
     * @param string $directory
     * @param string $fileName
     *
     * @return bool
     */
    public function deleteFile(string $directory, string $fileName): bool;
}

Его реализуют LocalStorage, AWSStorage, и еще куча куча других хранилищ для файлов. 

И делая вот так, 

public function methodFile(StorageInterface $storage): mixed
    {
        $storage->save();
        $storage->deleteFile();
        $storage->getFile();
        $storage->isFile();
    }

я всегда знаю что у меня все эти четрые метода будут доступны независимо от того где я файл храню - тут же в папочке на сервере, в облаке, в FTP и тд.