Plugin creation best practices

I have a few plugins created for strapi but after having a few it is creating a few issues (mostly dependencies issues).

Are there any guidelines for plugins creations out there?

The reason I am looking for some guidelines, is to see if they solve some of my problems.

My problems are for example:

  1. Plugins are might need information from another plugin to function
  2. Many plugins share similar utilities.
  3. Making all the plugins into one big plugin is not an option, also because it adds in too many functionalities.

Any help or pointer to start looking into is greatly appreciated.