Don't re-invent the wheel
If/When you start development on your extension don't reinvent the wheel!
Joomla has established several default behaviours and irrespective of whether you agree with them your users are already familiar with them. By following these defaults you will greatly reduce the learning curve for your extensions and consequently reduce the number of support requests.
Let's have a look at some examples:-
Joomla comes with a set of icons. Even if you are an amazing artist and can create superb icons of your own - don't! Your users are already familiar with the meaning of the Joomla icons don't make them learn another set.
Joomla places all its toolbars in the same place throughout the sytem. Your users already know where to look. You may feel that because you have a very long screen it is better to have the"save" buttons at the bottom and you might be correct but a large percentage of your users will still look in the default location. So instead of "moving" the toolbar "add" a new duplicate one. That way everyone benefits.
For me "accessibility" is synonomous with "usability". By designing your extension with accessibility in mind you will increase the usability of your extensions for everyone. For example always use at least two visual clues and do not rely on colour or shape alone. A red flag is indistinguishable to a green flag for a user with a colour based visual impairement. A red cross and a green tick would be better. Everyone will benefit from this as research shows that we all all respond differently to shapes and colours.
- Language 1
Do not include any "hard coded" text in the output of your extension. If you use language strings then you will make it easier for people to not only translate your extension but also to customise it to their needs. (I regularly change the name of a label to allow me to use an extension in a different marketplace eg changing "gig" to "match" in gigcalendar.)
- Language 2
Use different language strings even if the word is the same. The word might be the same in your language but may not be in another. For example Joomla regularly uses "publish/unpublish" when it refers to enabling a feature and displaying content. It would be far better to use "publish/unpublish" and "enable/disable". By using different language strings in your extension translators can use the most appropriate language in each situation.
- Default actions/states
Joomla has several defaults that are used throught the system. For examaple all new articles, contacts and weblinks default to "published" on creation. You might think that is a non-optimal situation but don't be tempted to change it in your extension. Your users will expect you to follow the defaults and will complain that their new content/item is not visible.