It is amazing how useful having a blog is. Simply trying to explain something to someone else can give insight into how complicated or confusing the topic may be.
Case in point: my blog post about the Void Engine. It bothered me that despite most things being automatic, the API looked and sounded over complicated. As a result I’ve refactored the API so that the ‘physicals’ layer is now no longer exposed to the user. The functionality that used to exist is now either only required privately by the implementation or has been exposed in a cleaner way, such as adding cloning of any resource and adding functions to get parent objects from every API.
Suffice to say, the user facing API is now about half the size it used to be with no loss in functionality.
Iteration can be time consuming but is necessary, even more important is to iterate early before too much has been built on top of immature systems.