Best practices when creating a custom metadata binding handler

You can define and create custom metadata binding handler in order to bind the metadata fields to the external taxonomy system. Following best practices when creating a new handler will help you avoid common customization pitfalls.

Pass false to any API 2.5 constructor
Make sure to pass one parameter, set to false, to any API 2.5 constructors you use in your plugin. Without this parameter included and set to false, you get a security error. This parameter, initializeCallContext, when set to false, causes the call context to be reused, effectively keeping your code within the same process.
Use ResolveIds to resolve ids into labels
Try to resolve the tags as quickly as possible to provide better user experience.
Use RetrieveTags to provide the tags for auto-suggest mode
Since auto-suggest shows a limited number of tags, don't go over the value of MaxTagsToReturn to avoid passing too much data over the wire.
Use RetrieveTagStructure to provide tags and relations for tree mode
Since the entire tree is passed at once and rendered in UI, try and limit the number of tags returned within the tree to avoid passing too much data over the wire and causing a poor UI performance.
Use FieldsFilter to limit the number of tags to be returned
Always use FieldsFilter value to limit the result set, to avoid passing too much data over the wire and causing a poor UI performance.
Avoid circular references in the tree
There is no limitation on the API level against passing circular references, but the UI will not allow you to expand the circular reference to avoid performance issues.
Take full responsibility for building the tree
UI controls show the tree exactly the way it is created in the handler.
Use lowercase <em> tags
Use lowercase <em> tags in the annotated label to highlight the part of the label that is matching FieldsFilter.