My DF24 - The Dutch Umbraco Experience highlights

On Thursday, September 19, 2024, it was time again for DF24 - The Dutch Umbraco Experience. This year, there were plenty of sessions, but unfortunately, more of them ran simultaneously rather than back-to-back. As a result, I was able to attend fewer sessions compared to last year. In this blog post, I’ll discuss the sessions I attended.

Keynote - The Umbraco of Past, Present and Future, Umbraco DXP & More!

Umbraco has long focused on developing the new backoffice, but now that Umbraco 14 has been released, many exciting new features are on the horizon. For Umbraco 15, work is underway on Block Level Variations and HybridCache, while the focus for Umbraco 16 is on External Search Providers.

Several other Umbraco products were also highlighted. For instance, Umbraco.com has been redeveloped using the import/export functionality of Umbraco Deploy. In Umbraco Workflow, it will soon be possible to work with content versions, similar to how it works in Sitecore. For Umbraco Commerce, all APIs are being made asynchronous, and finally, uMarketingSuite was discussed, which Umbraco has acquired. However, the new name has not yet been revealed. Umbraco Cloud is getting flexible environments, and the next major feature in development is load-balancing, although this remains a challenge.

The presentation concluded with the 4 lighthouses. The focus remains on Generative AI, Personalization, Search, and Orchestration. These are all areas where Umbraco can still grow, so I’m eager to see what the future holds!

Maximizing SaaS Power: Integrating Systems with Umbraco

After the keynote, it was time for lunch. My colleague Sem Snel took advantage of this break to set up for his presentation. Unfortunately, there were a few technical issues beyond his control. This year, there was a new setup where five presentations were held simultaneously in the same room, and everyone wore headphones to listen to the session of their choice. However, the system didn’t work optimally, as the headphones frequently cut out. As a result, Sem had to restart his presentation a few times and repeat certain sections.

Despite the challenges, Sem handled the situation remarkably well. He stayed calm and delivered a strong presentation. He explained how Umbraco was originally built as a monolithic system, but that more and more features have been added to fit within a composable DXP solution. For example, Umbraco 12 introduced the Content Delivery API, version 13 brought webhooks, and version 14 added the Content Management API. Sem used vacancies as an example to show how they can be imported from an external system via the Content Management API into Umbraco and how Umbraco can forward them via webhooks to, for instance, a search provider. To ensure proper communication between these systems, a custom database can be used in combination with RabbitMQ.

Why aren't you on Umbraco Cloud yet?!?!

The next session, presented by Frans de Jong, was in Dutch and covered why you should choose Umbraco Cloud. He began by explaining why they made the switch. For example, a VPS ages quickly, and costs are often unclear. He then discussed the benefits of Umbraco Cloud, such as predictable hosting costs for clients and the ability to use your own workflow with CI/CD. It was refreshing to see that the drawbacks of Umbraco Cloud were also addressed, such as the learning curve and the fact that costs can escalate quickly once a certain threshold is exceeded. Although the costs were mentioned multiple times, I appreciated their philosophy of not wanting to profit from hosting. Their focus is on building websites, so they simply pass the hosting costs on to the client.

An important part of Umbraco Cloud is Umbraco Deploy, which is included for free. It allows you to easily transfer document types and content. A migration from Umbraco 8 to Umbraco 13 was also smooth using the import/export functionality. With migrators, old property editors (like Nested Content) can be converted to newer ones (such as the Block List). Since many websites are developed in a similar way, upgrades are becoming easier as you can reuse components.

Another handy feature of Umbraco is baselines. This allows you to easily carry through changes from one site to others, similar to how forks work on GitHub. They use their own website as a baseline to first test improvements, and once everything works, these updates are pushed to their clients’ websites. This ensures their own site is always up to date.

Global Umbraco Cloud

Callum Whyte started the session by explaining how to scale Umbraco traditionally. The CMS environment itself should never be load-balanced, so only the application can be load-balanced. Each environment needs its own cache and indexes, but there’s always only one database. With Redis and ExamineX, it’s possible to decouple the cache and indexes so they can auto-scale. The new HybridCache feature in Umbraco 15 improves boot time performance and offers more flexibility around caching.

He then discussed other options, such as Traffic Manager and Azure Front Door. Key features include a globally deployed gateway, advanced routing rules, an optional built-in CDN and WAF, and internal routing on Azure's network. He also demonstrated how personalization can be applied using Cloudflare geo-location headers. There was a demo showing how an IsAllowed property via Contentment could determine whether content should be displayed for a particular region. For example, a credit card component was only shown in the US.

Umbraco V14 Backoffice Development, what I wish I had known beforehand.

The last session of the day, also delivered in Dutch by Richard Soeteman, focused on what he learned while migrating his packages to Umbraco 14. He started with the benefits of TypeScript, noting that many of its features are similar to C#, making it easy for C# developers to understand. He then went into detail on web components and how you can easily add them as property editors, dashboards, or workspace views (formerly content apps).

With Hey API, you can generate TypeScript code from your endpoints, allowing you to use the generated code in a strongly typed way. Unfortunately, two-way binding is no longer available by default, but with some adjustments, it’s still possible if you need it.

Richard wasn’t able to attend Codegarden this year, where several sessions covered similar topics. If he had attended, he might not have had to discover this on his own. However, with the help of documentation and source code, it’s still possible to learn. It’s clear that many of these things are mostly front-end work, while most package developers are back-end developers. This presents a steep learning curve for them, and I wonder if Umbraco HQ has taken this into account. Time will tell.

Conclusion

It was another interesting day with solid sessions. Unfortunately, there were fewer sessions than last year, and almost every session experienced issues with the headphones. Because of that, I found the editions from previous years a bit better, but it was still a great day. I’ll definitely be back next year!