Apple popularized the idea of the “App” with the release of the App Store on the iPhone. It was a great conception and implementation! I love it because it makes apps very easy to purchase and install, and you can pretty much assume that they will ‘just work’. These apps flourished on the iOS, and developers flocked to the device because of the money-making potential that they weren’t seeing on other platforms. Android and Windows Phone 7 played suit with their own app markets, quite similar to the original App Store on iOS. And recently, Apple has created an app store on their desktop platform, even going so far as to distribute their latest OS upgrade through it exclusively. Beyond the OS, the digital app store model has spread to other applications, like Salesforce with its AppExchange. While there are similarities with the app store model on a mobile or desktop OS, the AppExchange is fundamentally different in one important aspect - the guaranteed ‘just works’ user experience. I’ll explain this after walking us through a likely user scenario.
Here’s a likely story. You have a business and you’re shopping around for a CRM solution. You hear about how Salesforce is an excellent choice, so you decide to get an org for your company. You’re quite happy with having your data in the cloud and accessible from any device, and your company grows as a result of the increased productivity and the new intelligence gathered from its reporting facilities. Due to company growth and newly discovered needs, you start to accumulate a list of things that you wish your Salesforce org could do. “Hark!”, you exclaim, when you discover that Salesforce has an app market. Look, there is an app for everything on your wish list! You can easily install them and quickly use the new functionality!
Now this is where the experiences diverge and a Salesforce administrator can run into problems with application errors. It is important to remember that Salesforce is not an OS like iOS or Android. Salesforce was designed to manage access to a database, not to run apps. A database is a single shared memory space, unlike OS apps, each of which has its own memory space and runs completely independently of each other. A Salesforce app from the AppExchange can only operate on this single database. Because all Salesforce apps are playing in the same memory space, there are a multitude of possibilities for unexpected interactions between apps that can cause errors. This problem is inherent of the platform for which the AppExchange was built, and can’t be avoided.
Now, I believe that the AppExchange is a big part of the success and usefulness of Salesforce and it gives Salesforce terrific flexibility and value, but if you are considering adding an app to your org, there are choices to make. You have to make sure that your selection of apps will play well together in your org. There may have been an oversight in your consideration, and problems won’t show up until a few days after introducing the app to your org, so be prepared, either to communicate with the app author and get a fix, or to decide that it just won’t work with your existing selection of apps and an app uninstall is required.
So, what are some significant factors to consider when choosing to add an app to your org? You might start by asking about the triggers from which an app executes, and what triggers an app will cause to fire. There will probably be a good chance of error if you are installing a third app that executes from a Lead trigger.
Another thing to ask about is how an app makes use of future calls. Suppose app A executes from a Lead trigger and spawns a future call, then app B spawns a future call in which a Lead record is inserted or updated. This will throw an exception, and possibly break app A’s functionality, because Salesforce does not allow a future process to spawn another future process.
These are just two factors that I pulled from recent experience, but maybe you have an experience with inter-app failures that I did not mention. When shopping for Salesforce apps, what else should one look out for? What are some pitfalls that you have encountered?