A QGIS plugin can be created manually with a simple editor, but the simplest and most complete way to start to create a plugin is to use another Python plugin called Plugin Builder.
Plugin Builder generates the file infrastructure of the plugin, thus avoiding writing repetitive code. Plugin Builder creates only a basic and generic plugin, which can be modified to add specific user functionalities.
It will generate a generic plugin with the following GUI:
This is an almost empty dialog with two buttons. Every piece of this interface can be modified and customized to achieve the plugin's goal.