How do you define an interface, knowing it should be immutable once published?
Test it a lot. I've never come across a panacea for this particular problem - there are different strategies depending on specific consumer needs and project goals - for example, are you submitting an ASP.NET MVC framework to Microsoft, or are you building an internal LoB application? But distilled to its simplest, you can never go wrong when testing.
When testing, I mean using an interface to implement functionality. You check the contract to make sure it can meet the needs. Come up with as many different interface options as you can think of and implement them as best you can. Whiteboard the rest, and it should be clear what is missing. I would say that for a given "missing member", if you don't hit it within 3-5 iterations, you probably won't need it.
a source to share
Version numbers.
Define "Full Interface". Call it version 1.0.
Eliminate problems. Call it version 2.0.
They are different. They overlap in functionality, but they are separate.
Yes, you are increasing your efforts to support both. That is, until you depreciate 1.0 and eventually discontinue support.
a source to share
You cannot do this in the disposable version. You need feedback.
What you can do is first make a clean interface that exposes all the functionality your library needs to provide; then put it into your user base for real world use; then use the feedback as a guide to update the interface - without adding features other than helper / classes - until it is stable on the interface.
You cannot rely on experience / good practice alone. It really helps, but it's never enough. You just need feedback .
a source to share
Make sure the interface or interface technology (e.g. RPC, COM, CORBA, etc.) has a well-defined mechanism for updates and extended interfaces.
For example, Microsoft often has MyInterface followed by MyInterfaceEx, followed by MyInterfaceEx2, etc. etc.
Other systems have facilities to query and negotiate for different versions of the interface (see DirectX for one).
a source to share