I can use some advice on an interesting architectural challenge for an organization in the travel industry :-) Sorry for the long read...
The situation:
- The company has multiple brands that are all migrating towards Sitecore
- Information on countries/regions/cities/accommodations/trips is stored in a custom developed Product Management System (PMS)
- The database contains 100k+ accommodations currently but is expected to grow over time (1 million is not unthinkable)
- They use the PMS to enrich information received from multiple third-party feeds. Think texts, (hotel) images, key/value pairs, properties and so on.
- The PMS contains brand-specific information as the accompanying content/images for label A can differ from label B for the same accommodation
- Not all accommodations/trips are available for all brands
- PMS data is stored in an MS SQL database
- The PMS offers an API that can be called to retrieve data
I have done quite some research and have also read this article (What are some appropriate uses for Sitecore Data Providers?) extensively.
Initially, the client had the plan to keep Sitecore 'dumb' in the sense that they planned to use wildcard pages in Sitecore for countries/regions/cities/accos that directly interact with the PMS API to retrieve the content. As you can imagine this could lead to a lot of inflexibility on the Sitecore end:
- No specific presentation details for individual pages, so workarounds are required for deviations from the generic wildcard presentation details (also for optimization/personalization)
- Sitecore Analytics is also a potential drawback. I'm not sure about the experience profile, but for one I know that the Path Analyzer does not handle wildcard items correctly
- SEO: this is very important for the client. Using wildcard items this should be taken care of in the PMS, which is currently not supported
There are three high-level approaches here IMO, with potentially a lot of hybrid variants in between.
- Keep the wildcard setup, but take measures to counterfeit the inflexibility. Create custom rules that interact with the PMS API to support deviations/personalization on the generic presentation details;
- Implement a custom data provider
- Use the Data Exchange Framework to map/transform/synchronize data from PMS to Sitecore items
Internally we have a discussion mainly between options 1 and 3.
Option 1 would be the easiest to implement. But I'm questioning if this is a sound solution in the long run. Potentially you would have a single accommodation wildcard item with loads and loads of personalization rules. It seems unmanageable from my perspective.
If we would choose option 3, other questions arise. How are we going to map PMS to Sitecore? As I said, the company has multiple brands. The approach I'm thinking about now is to create a specific Data Exchange Framework implementation for each of the brands. While highly similar, it allows to prepare the data in exactly the correct format for use within the brand websites. So I would extract only the data relevant for the specific brand, and transform and map it directly to the page structure required for the specific brand. As I mentioned, it would require to sync a lot of data.
Other options we thought about:
A hybrid solution where we would create the countries/regions/cities manually in Sitecore, and use a wildcard accommodation item below it. The idea is that most deviations from the generic presentation details would be on the country/region/city level and not so much on specific accommodation level.
Use option 1, but create specific items for every personalization rule below the wildcard accommodation item. This would require some customizations, but ultimately you would have a list of deviations/personalization rules under the generic accommodation item. Easier to manage, since it would also become possible to use the publication mechanism and publish/unpublish dates
I'd love to get some feedback from you guys. How would you handle this?