Here are some thoughts on evaluating 3rd Party Modules:
Basics:
-
Current Magento Version Support - Does it support the latest version of Magento (including the current one we are developing it for)?
If a module does not support the latest release of Magento, it will probably be difficult to make it work without spending precious development time on it.
-
Support - Do the developers who created the module support the product?
One of the signs of a healthy module is that the developers actively support it. If they don't support it is a red flag, why won't they support the product if it's good?
Additionally, when a module is supported, we can usually get important info from the developers with a simple email (for example, does this module use jQuery or Prototype).
-
Reviews - What are other users saying? How was their experience?
By reading the reviews we can get a better sense of the big picture, is there a installation issue? Do the developers respond in a timely and helpful manner? Does it work as advertised?
-
Refund - Will they give you back your money if it doesn't work out as intended?
Many times we want to try out the module so that we can test it, if it works and meets our specifications great! But if it doesn't, we want the option of returning it and getting a refund for it.
Intermediate:
-
Class Overrides - Does the module override any core classes?
Generally speaking a good module should not override any core classes, rather it should use Observers.
One reason for this, is that it can make upgrading Magento difficult. Additionally, other modules might be depending on one output from a given function, and this module is providing a different one.
Sometimes this is not possible to do, if this is the case, there should be a very good reason why it is overriding a core class.
-
Layout updates - Does the module change some of my layout settings?
Some modules change the layout settings to your site (for example: product page), make sure it doesn't break your current layout, and if it does what would be required (read: how much time will it take us) to fix it.
-
Template changes - Does the module include templates that change my current design?
Will this module introduce new templates? If yes, will they break my design? How much time will it take to have the design the way we want?
-
Dependencies - Does the module depend on any other module?
If the module depends on others, we need to make sure they are there and installed. Additionally we need to ask ourselves, are we going to want to turn off the module it depends on in the future?
Advanced:
-
SQL Upgrade scripts - Does the module update the DB in some way?
Once a module updates the database we need to make sure of a few things.
Does it update a core table? If yes, that's not good, we like our databases clean and ready for upgrade.
Does it store the information in a sensible way? If we want to get the data raw from the database ourselves, would we be able to make sense of it?
-
Events - Does the module observe or dispatch any events?
If a module dispatches or observes events, we want to know:
Which events is it observing / dispatching? Will this affect another module working in the system. For example, if one of our modules changes the name of our products on-load to uppercase, and this module adds the word 'free' to the name of the product on-load, how will it work? Will the word 'free' also come out upper cased?
-
Code Review - Does the module use acceptable coding techniques?
This has more to do with PHP coding techniques than Magento.
Does the code use Try / Catch blocks?
Does the code escape user input?
The specifics of this really depend on our skill level / requirements.
-
Potential issues - What potential issues can come up as a result of installing this module?
Try to imagine the top five problems that could come up if we install this module, surprising as it may be, it really gives insight in to the project as a whole.
Bottom Line:
All these things are nice to have in an ideal world, in real world scenarios we need to do this thing called 'compromise' :)
Additionally, these guidelines are meant to be as a help to us, not to hinder us, as a result if we are only installing one module, let's say a social sharing module, and it's for a client who needs a simple site setup, there is no sense in doing a ton of research.
In other words: It's all about being efficient with our time, if using this (item in the) guideline helps me save time in the long run use it, if not drop it and save your sanity.