One of the questions we get asked a lot: Is Fooman extension X compatible with Vendor Y's Z extension?
The answer to this question is unfortunately a typical software engineering answer - it depends. As that is not a very helpful response let's drill into the question a bit more to understand why a straight forward question is not easy to answer.
In regards to compatibility I started to differentiate two levels of compatibility:
technical compatible and functionally integrated.
And depending on the person asking "is it compatible?" could mean the first or the second.
tl;dr;
- both extensions add functionality: likely technically compatible but unlikely functionally integrated
- at least one extension replacing core functionality: likely not technically compatible
Technical Compatibility
So what does it mean that an extension is technically compatible. In short, both extensions function the same as if they had been installed just by themselves. There are varying levels of how this could manifest itself if they are not compatible from the easily spottable fatal php errors to less obvious subtle load reordering issues causing silent errors.
Extensions generally fall into two categories:
- Adding new functionality to Magento
- Replacing existing functionality of Magento
If both extensions add functionality technical compatibility is usually the easiest scenario, provided the added functionality is not doing exactly the same.
Once core functionality gets replaced (or circumvented) technical compatibility depends nearly always on how close to the original the replacements stays. Some real life examples we have come across where incomplete replacements are causing issues:
- offloading the tax calculation to a 3rd party service without taking into consideration taxation of potential custom totals
- importing orders into Magento from marketplaces like Amazon or Ebay without creating a complete tax record in Magento - when this order gets passed on to an ERP/ accounting system it starts with incomplete information vs an order that was taxed in Magento
- custom checkouts that replace the complete checkout bypassing any custom javascript on the checkout page
Technical compatibility can usually be achieved by adhering to good development practices, including writing defensively keeping replacements to a minimum. This is where projects like coding standards and resources like ExtDN's Magento 2 extension tipps are important.
Functional Integration
Once two extensions are installed and both are working independently another topic comes into the "Is it compatible?" consideration. And this covers functional integration between the two extensions. Simply put just because an extension adds new functionality the other extension does not magically know about this functionality, let alone knows how to handle it in its context. This is unfortunately often overlooked and we have dealt with our fair share of having to disappoint over the years. Checking requirements early in the project can provide clarity from the outset.
To make this more concrete let's take the example of our Email Attachments and Print Order Pdf extension. The first allows you to attach Magento pdfs to outgoing sales emails. The second allows the admin to create a pdf from the order. If we hadn't put any extra effort into the development of the two this is where the functionality would have stopped. Both can independently work from each other. However in the middle of the functionality of the two extensions there is something that only makes sense when both extensions are installed and that is the ability to attach the order pdf to the outgoing order confirmation email. Again this functionality is something that we specifically coded to make this possible out of the box. Effort like this is not likely when multiple extension vendors are involved. There are simply too many extensions out there for everything to integrate with everything. The best rule of thumb here is, if it's not mentioned assume there is no functional integration.
Another example is our Pdf Pickinglist extension and ShipperHQ. Again out of the box these two are technically compatible and "just work"™️ independently from each other. However when preparing the picking list it makes sense to be able to print out the delivery date and time that is captured by ShipperHQ as a column next to the other order information. By default our Pickinglist extension does not have any knowledge that ShipperHQ is present, so no functional integration. For a joint customer we created a new addon module that plugs into our Pickinglist extension to provide exactly this bit of functionality that sits in the middle of these two extensions.
However functional integration is not always as easily achieved as above. Another example from one of our extensions is our integration with Xero. It focusses on transferring your web sales data to Xero. There are some extensions out there that transform Magento into a complete purchase vendor management platform akin to an ERP lite. When we get asked if our Xero integration is compatible with these we answer that technically our extensions are compatible (both extension work just fine without any issue or interference), however they are not functionally integrated. Furthermore a functional integration between the two would likely require a doubling of the code base of our integration (we handle sales data, vendor management are purchases).
In commerce lots of requirements can be custom to the specific merchant and the devil might be in the details. It pays to check requirements early in the project, especially when functional integration between multiple extensions are involved.
Some Recommendations
- Install extensions early in the project to test compatibility
- Use the above guidelines to research what functionality is covered by extensions and where additional requirements are present. A quick email early on can save scrambling at the end when the project is due to launch.
Even with the above considerations taken into account there are still a lot of unknowns involved, for example we at Fooman do not know what other extensions are present in a given store and how they have been coded. So we can only go off past experiences (if we have had any) when we reply on compatibility questions. Due to these unknowns we strongly suggest choosing extensions from extension developers that offer a genuine money-back-guarantee.