Recently Paul, one of our Umbraco consultants, spent some time out of the office at Umbraco Spark, both as a speaker and an attendee. Here Paul reflects on the event and shares some of the key things he learnt whilst he was there. So, grab yourself a coffee, sit back, relax and let Paul take you to Umbraco Spark…

Last week I went to Umbraco Spark 2020 with my colleague Matt Hart. I also went last year, so I knew what to expect in terms of the venue and of Bristol itself. This year was a bit different for me, however, because instead of just attending the other talks, I had signed up to give a talk with Tim Payne. I was a bit nervous about it, but the fact that I was doing the talk with someone else was very helpful. We had been working on the code and content of the talk for a few months, so we were fairly confident with the material.

Arriving at the conference

When we got to the venue and walked up the stairs to the top floor, there was a buzz in the air from the other attendees talking while they got coffees, water, croissants, and cookies. We picked up our name tags and swag and hung our coats up in the cloak area.

Once the preamble was finished, we made our way through to the main room and sat down. The MD from Gibe welcomed us all with a brief talk and told us the safety advice about Coronavirus. The foot shake and 'eye five you rock' were the recommended methods of greeting each other.

Jon Skeet's talk

The first talk was about the difficulty with Dates and Times in .NET by Google’s Jon Skeet. Jon is a very well-known speaker and has written several editions of the book ‘C# in Depth’. Not only that, but he has written many libraries such as NodaTime (which is what he was talking about), and he has more reputation points on Stack Overflow than anyone else. In short, he’s the true definition of an expert!

I've heard Jon talk about date problems and how his library could help solve it several times before, so I was well aware of the issues, but I wasn't sure how they would affect me in my day to day practice. One of the main points that hit home with me this time was that if you are going to support local times, then don't think you can just store the DateTime.UtcNow and convert it to the user's local time. He gave many examples of when this would break, for instance, during daylight saving time or leap years. Another good point was about making incorrect assumptions, for example, assuming if you add a month and then subtract a month that you would be back to the original date. If you had the date 30th January 2017 and you tried to add a month like this. AddMonths(1), you would get 28th February 2017 and then if you decided to go back a month using. AddMonths(-1) you wouldn't be back to where you started, you would be on 28th January 2017.


Matt Brailsford's talk about his new eCommerce package “Vendr” was my favourite of the day. I knew Matt had been working hard on his new package and the talk, so I was keen to see the results and was looking forward to see him speak.

The premise of Matt's talk was to show you Vendr through the lens of a fictional client engagement. To begin with, the customer wanted a simple portfolio site where they could showcase their products. Then the fictional client updated the brief, also adding the ability to sell products via the same website - all while maintaining the same look and editing experience.

What was impressive about this talk, and Vendr as a solution, is how you can turn any Umbraco node into a product by adding some simple properties (like Sku and Price). Matt also showed us some simple views that could be used to add the product to the basket, and later edit the basket.

In the talk, Matt's fictional small business owner also wanted to have a shopping cart icon in the navigation. Again, Matt showed how to achieve this easily using the Vendr API to get the basket contents and count the items.

Matt also showed us the Checkout Package for Vendr, which is installed via NuGet. Adding the package creates a dashboard in the backoffice - you then click on the button to install the content items and your checkout is setup. I like this approach for install, and it made me think about how I could use this approach to enable me to put my Umbraco Starter kits onto NuGet.

With the Checkout package installed and the pre-built integrations with Stripe, PayPal and more, Vendr looks like a good fit for eCommerce websites built on v8. I can't wait to try it out myself!

I spoke to Matt and Lucy at lunchtime about Vendr, and we talked about the different audiences they are aiming for and also the different pricing models they have considered. The first full release is out at the end of March 2020, with further updates to follow.

Hallway track

After Matt's talk, it was Umbracoffee, however, because Tim and I were speaking next, I decided instead to get some coffee and chat in the breakout area - one of my favourite things to do while at an Umbraco conference.

I had a great chat with Nurhak Kaya, who has been blogging for about eight years now. He blogs for the same reason as me, which is to help his future self and others. Also, the act of writing itself can help lead to deeper understanding and learning.

Talk time

At midday, it was time to give my talk with Tim. We had been working on the code for this talk for a few months, and we had the statistics to back up all our assertions. I was so pleased to see a full room, with people even standing at the doorway.

Our talk was about high performance querying with Umbraco v8. We started by showing some stats about the performance of different querying methods in v7, which Tim had researched for his earlier Skrift article.

Next, we looked at what had changed in v8 and how well it performed. We found that because NuCache was so fast, LINQ methods such as ‘.Children’ were a lot faster than using XPath and Examine. This approach is in stark contrast to v7, where the LINQ methods are often viewed as an anti-pattern.

I think the stats surprised some people who hadn't played with Umbraco v8 yet or conducted in depth testing. We got through our talk, and it felt good. It was a great experience talking with Tim; I felt safe up there like he had my back, and I had his. I also tried to remember that the audience wanted us to succeed.


After our talk, it was time for lunch. There was a fairly big queue, but it soon went down, and there was no shortage of food. It was very tasty, and they catered for meat-eaters and vegetarians. I even saw specific plates of food wrapped up for people with allergies, which was good to see.

Umbraco .NET Core Status

After lunch, I went to watch Bjarke Berg’s talk about the project to move Umbraco to .NET Core. This interesting talk gave us an insight into the current progress and future roadmap. I was interested to hear about the challenges they are facing, especially trying to migrate away from System.Web. They have made new classes and interfaces and are using services for most things which were in System.Web.

If you missed the talk and you want to hear Bjarke talk about the challenges he is facing migrating Umbraco to .NET Core, you can listen to him on this episode of the .NET Core Podcast.

The future of Umbraco

The next talk I went to was Callum’s talk about the future of Umbraco. I have to say this talk was what Umbraco Spark is all about, innovation. He was using AI in different ways to improve the back-office for users. He was using an anomaly API to detect patterns in how you work, enabling the back-office to predict what you want to do next. It was like Clippy for Umbraco...

He also used a machine learning API to work out the sentiment of messages in a particular thread in the Our Umbraco forum. There wasn't enough data to prove anything, of course. Still, it was an interesting approach, and with the right volume of data, I'm sure you could use this for alerting moderators or the HQ about unhappiness in the forums.

Not your Grandmother's headless

Next, I decided to sneak back into track two to watch the talk given by Mikkel from Novicel about their headless solution. At first, I was expecting it just to be some Rest API endpoints, but it turned out to be something much smarter.

In their approach, when you publish a page on a site, an event fires which takes the data from that page and transforms it into a model that they then use on the front end - storing it as JSON somewhere with a Redis cache over it. Then on the front end, they call an API which gets the data from the Redis cache, in the format that they need, and they use it for rendering the page.

The benefits of doing it this way are that it is super-fast, highly available, decoupled, and CMS agnostic.

This approach means that they can do the same with something like Sitecore or Episerver etc., transforming the data on save into the JSON model and storing it in Redis. What was even more brilliant than being CMS agnostic is that it was CMS version agnostic, meaning that they were quickly able to start using Umbraco v8. Simply by adding the event handlers for transforming the data, they were up and running very quickly.

Another clever thing to come out of this was the ability to preview a page from within the back-office. Back-office preview is something you don't usually get with a headless CMS. They would create a slightly different model for the preview so it worked in the back-office. If someone presses ‘Save and Publish’, it creates the preview model and the front-end model, and if they just pressed ‘Save’ it would only create the preview model.

Lee Kelleher - Contentment

Lee’s talk was supposed to be about his new package Contentment – a collection of property editors.

But to give us some context of how he got to where he is now and how he felt about it, Lee wanted us to understand what he's gone through in the last year.

Reflecting on his previous talk at last year's 'Umbraco Spark', he said that half-way through he had realised that he was bored with what he was saying. He didn't care about it and was just going through the motions. When he said it, I immediately recalled being in the room at that talk the year before and remembered that I wasn't really feeling that talk either because there was no passion coming from him.

Lee then went on to tell us about the burnout he had experienced around the same time that Umbraco 8 was released. As soon as it had dropped, everyone started asking where the popular packages from v7 were, such as 'Stacked Content'.

Image from Laura Weatherhead on Twitter

He spoke about how this pressure to update his packages had left him drained and somewhat demoralised, so instead he had started working on something that people weren't pushing for, working almost in secret for the pleasure of creation only. All in all, it was a candid and moving tale - one which showed that through the making of the 'Contentment' package, contentment the state was achieved.

He then showed us some of the brilliant property editors in his new package. I particularly liked that one editor can be used to service the next editor. They're not just great editors in their own right; they can become part of your toolkit for creating other property editors.

To combat burnout and to encourage participation, Lee has decided to use the Mozilla licence rather than an MIT licence. This licence means that if someone modifies one of the files, they have to contribute the changes back to the main project.

Definitely not a keynote

The last talk of the day was from Umbraco's founder Niels Hartvig. In keeping with the conference's theme of innovation, he spoke about innovation itself, the general gist of which was that we need to keep changing to be able to stay the same.

Closing drinks and Afterparty

In the tradition of many Umbraco events, everything was wrapped up with drinks and an afterparty. These more causal parts of the event are where many fascinating conversations happen and where some of the best value of conferences is found.

I had a good chat with Callum Whyte about his new package called Umbraco Sidecar. This package enables you to have a console app which is aware of the Umbraco context, allowing the use all of the Umbraco APIs like the content service etc. But the part which blew me away was that he said he’d managed to get it working in an Azure function.

Final thoughts

I enjoyed Umbraco Spark. It was well organised from start to finish. I hope Spark is held in Bristol again next year because they did such an excellent job of hosting it and it's a beautiful city.

All of the talks were technical talks and, as you have read above, I got a lot out of them. I would recommend Spark to any Umbraco enthusiast.