New Sitecore 9 Features That Matter For Developers Coming from Sitecore 8
You probably heard that Sitecore 9 was recently released. You may have even been at Sitecore Symposium in Las Vegas to witness the release first-hand (actually you probably missed it anyway, since it was silently released the afternoon of October 17 with little actual fanfare).
Sitecore 9 is a major release of Sitecore, with more new features and more architectural changes in a release than we've seen in a while from Sitecore. The biggest changes will affect day-to-day life for developers, architects, and marketers. There's already some great summaries of new features, so what follows is a high-level overview of new features, along with some of the ways they affect developers coming from Sitecore 8.
"Machine learning" and "AI" are the hot buzzwords of 2017 (and probably will be into the foreseeable future), and in practical terms, they bring lots of data analysis and automation to Sitecore. Cortex is Sitecore's bid to use machine learning to assist with marketing and content personalization features.
For developers, Cortex has not yet launched, and technical details about it are still scarce, so stay tuned for more information.
xDB has traditionally been tied to the web. It stores "visits" and "contacts" and information about the browsing session. To be truly omnichannel, however, the xDB has always needed to consume data from multiple devices and services. xConnect is a service layer that sits between xDB, Sitecore, and any device or service that wants to interact with xDB data.
For developers and architects, xConnect introduces a huge change for xDB: SQL Server support. For Sitecore 9.0, only SQL Server is supported for xDB - MongoDB support is coming at a later date ("a few months," according to Sitecore). This means that organizations hesitant to invest in MongoDB have an instant path to xDB with Sitecore 9.
Get started with xConnect documentation to learn about data modeling (with oData), facets, events, contacts, and interactions.
Web Forms for Marketers has been upgraded for Sitecore 9, but all eyes are on the new Sitecore Forms. Native to Sitecore 9, Forms uses a drag-and-drop interface and supports multi-page forms, among many other great features (form templates!).
For developers, Forms is built entirely on MVC and is easily extensible to allow for additional functionality, new fields, and custom validation. Most importantly, Forms is built-in to Sitecore 9 and available right away.
Sitecore Install Framework (SIF)
Known as "SIF" for short, Sitecore Install Framework is the biggest change that affects developers from the get-go. Sitecore has traditionally had two install options: a Windows executable installer for quick setup and a ZIP archive of the webroot for manual configuration. The ZIP archive option is still around, but because of the numerous database, service, and configuration requirements of new Sitecore features, SIF uses PowerShell and JSON configuration to roll out Sitecore instances.
For developers and architects, SIF turns Sitecore installation into configuration-based PowerShell scripting, which means deployments can be automated quite easily. For local Sitecore development, getting SC9 up and running is a bit more involved than before, but it is manageable after a few practice runs. Keep an eye out for the Sitecore community to simplify much of this process over the next few months.
UPDATE: That didn't take long.
Sitecore's configuration patching is both amazing (for example, it enables Helix architecture patterns) and notorious ("What the hell's overwriting my settings!?"). Config patch files have always been applied alphabetically by file/folder names, so changing the patching order typically requires files that looks like "zzz_MySettings.config" - functional, but not pretty. Sitecore 9 has added "Layers.config" - a file that specifies the load order of configuration files.
For developers, this means that the ordering of configuration patching can be managed in one place. Existing patching methods will continue to work, but this lets developers deliver cleaner solutions. What's more, this file can be transformed at build time, if necessary (although likely not needed, as Sitecore also introduced configuration roles - see this post on the topic).
100% SQL Server
xDB has always been a central part of Sitecore since 7.5, but getting IT buy-in to support a MongoDB-based solution in an otherwise Microsoft world has been a hard sell. With xConnect in Sitecore 9 supporting SQL Server (and SQL Azure) out of the gate, Sitecore's core functions are back on the Microsoft stack.
For developers and architects, MongoDB no longer needs to be deployed for xDB - just SQL Server 2016 or better. When using SIF to install Sitecore, installing and configuring xConnect/xDB is handled automatically. For those who have already invested in MongoDB, xConnect will support MongoDB (and Cosmos DB on Azure) in late 2017 or early 2018.
Deploying Sitecore on Azure has always been possible, but with drastically varying degrees of success based on what features and functionality were needed from the platform (don't get me started on module support). Even Sitecore 8.2 touted some major improvements, but the overall picture was still not perfect. Sitecore 9 is all-in on Azure, and version 9 is fully compatible for Azure deployments. Sitecore Experience Cloud on Azure has feature parity with the on-prem version of Sitecore 9.
For developers and architects, Sitecore 9 can be deployed on Azure from the Azure Marketplace, uses Azure SQL for content and xDB databases (with Cosmos DB support coming soon), and supports scaling in Azure.
Lucene and Solr have always been the standard search engine options for Sitecore. Lucene has always been fine for single-environment development or deployment, but Solr was the best bet for scaling out (as many Sitecore projects do). The new xConnect service layer requires Solr for its search functionality.
For developers, Solr is now the recommended go-to search solution for ALL Sitecore solutions. This will affect local developer environments quite a bit, since Solr is now a requirement for xConnect development. Setting up Solr (and configuring it to be secure) adds much more complexity to local development environments than Sitecore 8 developers were used to.
Sitecore 9 is configured out of the box to support HTTPS-based communication between services. While this can all be turned off, Sitecore is finally pushing for secure deployments.
For developers, local Sitecore development will likely use self-signed certificates, so if you haven't made the jump to using SSL/TLS security, now is a great time to learn the ins-and-outs of creating and managing certificates.
Sitecore documentation has always been somewhere between non-existant and abysmal. This situation improved with Sitecore 8 (http://doc.sitecore.net), and it's making huge leaps with Sitecore 9 documentation. Check out https://doc.sitecore.net/developers for the latest docs on Sitecore 9, xConnect, and Sitecore Commerce. Props to Martina Welander.
For developers, the new documentation site covers Sitecore 9 features with guides, configuration best-practices, and technical documentation. Look for this new documentation to be updated frequently, as Sitecore now has a team dedicated to documentation.
With so many features being standardized in Sitecore 9, Sitecore has standardized deployments on three common topologies: XP0, XM1, and XP1.
For developers and architects, XP0 deploys Sitecore and xConnect in a single instance (best for local development). This amounts to a combined Content Management/Content Delivery instance on one machine. XM1 is essentially "CMS-only" mode, with a combined CM/CD instance. xDB/xConnect is not available. XP1 is a full-blown Sitecore instance with all core roles available (CM, CD, processing, reporting, xConnect, xDB, etc.). The Sitecore Install Framework configuration scripts come with these three topologies pre-defined, so customizing for different topologies will be up to solution architects.
Do you have questions, comments, or corrections for this post? Find me on Twitter: @BrandonMBruno