Heroku Connect Retrospective
The Problem
Salesforce sells itself, in fact prides itself, on being a developer-less solution for many organization’s needs. I don’t have a view into all organizations and what they are doing with Salesforce, perhaps there are plenty of organizations that are content to have Salesforce and just use Salesforce to access that data. However, from my experience any organization with more than one system will eventually need to move data into or out of Salesforce. Price data needs to get pulled from an ERP, account payable or invoice information, etc.
How then to get data in and out of Salesforce? There are several solutions for this task. There is a robust API provided by salesforce, but there are limitations on this, particularly if you are dealing with a lot of data since there is an limit on the number of calls you can make before cost becomes prohibitive. Mulesoft has some tools, however Mulesolft is extremely costly as well, and Mulesoft, like Heroku connect, is not a master data management system.
Definitions
First, what is master data management? It’s a common point of reference for data. Simple. MDM exists because if you have two or more systems with common data entities that must be updated transactionally, then without an authoritative source of data you will quickly run into synchronization issues.
Second, what is Heroku connect? It is a postgres database that sits a top Salesforce’s cloud competitor, Heroku. The ‘connect’ piece of Heroku connect synchronizes data between selected salesforce objects, and postgres tables with a user friendly point and click interface. The idea being your application can interact with the Salesforce data by SQL CRUD operations on the postgres database. Changes from Salesforce will be reflected in the database and then presumbably your application, and vice versa back to Salesforce.
How it works
Heroku connect works by polling salesforce for changes and pulling them into postgres and it creates triggers in postgres to update data in Salesforce when updates are made to the database. Records are tied together by salesforce ids.
How it doesn’t work
How is this not master data management? There is no system of record. Your second party application can update a record while a user or system updates that same record in Salesforce. You must understand at a fundamental level what your technology is before you can understand what you can do with that technology.
In this instance Heroku connect might be perfectly suited for a second party application to view data from Salesforce or for Salesforce to view your application’s data. And Heroku connect is even smart enough that it will not clobber an entire record any time there is an update, just the effected fields. Heroku connect should never be used for two-way synchronization of the same data. There is no guarantee of data consistency. When there is a conflict data will be lost on one side or the other with no guarantee of who wins (as of this writting).
If there is a large update from one side or the other, it could take minutes or even an hour for the database to synchronize with salesforce. I’ve personally witnessed updating ten or twenty thousand records on the postgress side taking close to two hours to syncronize to salesforce. What happens if users or systems are updating during this time? It’s a good question and if you are worried about it then Heroku connect might not be the tool for you. What about if you read data from postgres and while users are viewing or editing the data, Heroku connect comes along and modifies the underlying data? Is that a problem for you application? Perhaps Heroku connect is not the correct tool for your needs.
Conclusion
Unfortunately, in the real world, architectural decisions are often driven by sales processes and not the best interests or needs of customers or users.