both create an instance,
but when you want to change from a context instance to non context instance and change context.create_instance to pyblish.api.Instance,
your code can break if you have any kwargs other than name and parent. (example family)
i’d expect these to have similar behaviour, except for maybe the parent kwarg
these have similar behaviour as expected
That is the entire source for create_instance and you could type that in yourself if you’d like to, the result will be identical.
As you can see in the source, the reason you can pass keyword arguments is because the function takes a **kwargs. You can achieve the same result with an Instance by doing something like:
Haven’t got an answer for you here, there are a million things never done in Pyblish that won’t have a reason for not having been done. It is what it is. However, I’d be happy to tell you more about the things that were done, and why they were done that way.