Gareth Evans of Sniper Systems probably knows Umbraco better than anyone else in New Zealand. We spoke with him about his business’s development niche, his favourite CMS, and the pitfalls of self-hosting.
Sniper Systems founder Gareth Evans has been working at the intersection of systems development and web development for two decades. For most of that time he’s been deeply involved in Umbraco CMS, both as a developer and as a core contributor to Umbraco itself. We spoke with him about some of Sniper’s greatest hits and why Umbraco was so often the right system to build them in.
SiteHost: Hi Gareth, thanks for your time today. What’s the elevator pitch for Sniper Systems?
Gareth: The overall story is that we’re a niche business that develops business systems. Ultimately I like developing systems and building solutions for customers.
SiteHost: How did Sniper come about? How long have you been running it?
Gareth: I started Sniper Systems nearly 20 years ago. I was working as a consultant at another company and I wasn't particularly happy. I felt that our development wasn’t being sold as a direct service, but more like an add-on. There was a niche that we were missing, in doing custom software development.
SiteHost: This must have been back when web development was mostly brochure sites and systems development was very separate.
Gareth: Exactly. I like to create systems for clients, but that wasn’t what my boss was selling. Later, I was working as a consultant developer and I got lumped with a solution that had been poorly engineered and couldn’t scale. I was basically monkey patching it for two years, trying to keep this thing alive.
While that was my day job I had this business, Sniper, that I’d started with a friend from school years ago. This was still early days in terms of web platforms. It was just a background thing that I'd been doing after hours but my partner was full-time. He really wanted me to come on board full-time. He said, “I think Sniper's really going somewhere.”
So I thought, yeah, let’s give this a go. It was definitely the right decision.
SiteHost: Was Umbraco built into Sniper Systems from the start, or was it something you brought in?
Gareth: At the time, CMS wasn’t really a thing. We were building brochure sites in static HTML but started using Umbraco 3, which was a fairly new concept at the time.
Umbraco had been started by a guy in Europe who was building static sites. He built a system and he made it open source. Then other people discovered it and went, “hey, this thing’s got legs”.
SiteHost: That choice you made many years ago puts you in a pretty small pool of local Umbraco developers, doesn’t it?
Gareth: It’s very prominent overseas, particularly in Europe and America, but not so much in Australia and New Zealand. Here in New Zealand, I think there are about five or six agencies that have Umbraco as one of their main platforms.
SiteHost: Do you have any theories about why Umbraco didn’t take off in New Zealand?
Gareth: I think agencies can find it hard to sell because there’s this perception that it doesn’t provide a lot of stuff out-of-the-box. I think that perception comes from comparisons with WordPress, but Umbraco is a software engineers’ CMS. It’s not like WordPress.
"You can hand me a graphic design of absolutely anything and I can build it with Umbraco. We'll make the page look like you want, and we'll build the CMS features to generate the data to make that design work. That’s the developers’ approach."
SiteHost: One of the positives about WordPress is that you don’t need to be a software engineer, but you're saying that Umbraco flips that.
Gareth: WordPress has got a lot of stuff out of the box, and a lot of plugins you can install. It's quite flexible, in that you can just add just everything except the kitchen sink into it. But with all these third-party plugins WordPress is not exactly known for its rock-solid security.
Just throwing things into a big mixing pot of functionality isn’t a recipe for something that's secure and scalable and stable. Those things are going to interact with each other and you can’t always control it all.
We work with our clients to find the solution that best meets their business goals. When clients want a secure site that's scalable and supported and solid, we usually recommend Umbraco.
SiteHost: When you call Umbraco a “software engineers’ CMS”, what do you mean?
Gareth: I mean it has some building blocks and it has APIs. But it doesn't have very much out-of-the-box. Why that's important is because you can hand me a graphic design of absolutely anything and I can build it with Umbraco. We'll make the page look like you want, and we'll build the CMS features to generate the data to make that design work. That’s the developers’ approach.
SiteHost: Your website links to some impressive sites that you’ve built on Umbraco, with a good amount of systems development sitting alongside the website work.
Gareth: WineFriend is there, and it’s an example of an Umbraco front-end system which we bolted onto an existing .NET-based system.
The business system that we implemented handles all of their customer management and order fulfilment processes. WineFriend mostly do subscription-based boxes of wine, and in the early days they would manually choose which bottles each customer would get. There would be the 30 wines we're packing from this month, and this customer mostly likes pinot noir but we've got a really nice syrah for them to try, that sort of thing. We built a system that takes each customer's preferences into account and aids the team in making their personalised recommendations. The selection is revealed to the customer when it arrives on their doorstep.
When we came in there were a bunch of unmanaged, static HTML pages on the front end of the WineFriend website. It was convenient that we already knew Umbraco, and we could kind of strap it on to manage the front end.
"Once we stacked Umbraco into the system we were able to use it to deliver more value to the customer. It’s been a three or four-year journey."
SiteHost: That tight integration sounds ideal.
Gareth: With Umbraco being .NET, you don't have to start with an Umbraco core. You can start with a .NET-based system and then bring Umbraco in to manage aspects like the content. And you can configure the routing so that some pages are directed to the existing infrastructure and some pages are directed to Umbraco.
We’ve extended the system over time. Now it exports final subscription orders to the 3PL [third-party logistics] company that packs and distributes the orders. For another project we re-architected all these mini sales channels that were individually implemented on the site. These were for products like gift cases or prepackaged products, all these different little checkout flows scattered throughout the site, which we consolidated into one cart.
As part of that, we introduced a bunch of Umbraco features to manage those items that are available on the front end of the site. We've really doubled down on Umbraco by building on what we already had. Once we stacked Umbraco into the system we were able to use it to deliver more value to the customer. It’s been a three or four-year journey.
SiteHost: A lot of businesses today might not consider custom development. As you say, WordPress plug-ins solve a lot of problems, and there are obviously ecommerce platforms like Shopify, too.
Gareth: Right. The WordPress-esque way is to install a plugin and get extra functionality, like a pop-up box to gather newsletter subscriptions, by clicking a few boxes. That’s a perfectly legitimate approach but you don't get tight integration to your other systems and data, without building out APIs.
With a platform like Shopify you get a lot of functionality anda lot of really great things around managing orders. But there are the bits that you aren’t told when you're looking at something like Shopify. Product limitations that aren't always explicitly described.
SiteHost: Like what?
Gareth: We discovered that Shopify has a limitation of 100 variants per product.
This came up when we did a project for a promotional company selling pens and stressballs and whatnot. They had a white-label printing provider with a catalogue of products, their colours and specs, and all the ways they can print on each of them. That catalogue comes in via an API with all of the data and options.
Our client wanted a website that showed products in categories and lets you choose all the relevant options. But then, instead of checking out, just provide a quote and begin a direct enquiry.
Shopify looked like a good fit. We built a Shopify site, wrote an API integration to pull in all the third-party data, installed a plugin to disable the checkout and turn the cart into a quoting function, and got everything working.
Then we discovered the limitation on product variants. Shopify allows a maximum of 100, but some of these products had 600. Take a t-shirt with 5 colours and 6 sizes. That’s 30 variants before any printing options like one-, two-, or three-colour screen printing. The multiplication just meant that we could not make Shopify bend to our will.
"We did a project for a promotional company selling pens and stressballs and whatnot. Shopify looked like a good fit...then we discovered the limitation on product variants."
SiteHost: So what did you do?
Gareth: We ended up scrapping the whole solution and rebuilding in Umbraco! Which we should have done to begin with, but we were trying to save time and money by using something out of the box.
The point I take from that is that if you choose a product like Shopify to customise, you actually have to fit your business to the product, not the other way around.
SiteHost: As well as developing on Umbraco, you’ve also been a core contributor to the CMS itself. How did that come about?
Gareth: My core contributions were basically because Umbraco itself was limited and I saw a way that I could improve on that.
Back in 2011 they introduced a new approach to templating your website. In Umbraco you create your document types, or your data structure, and then template the front end - what we want to see on the page - using that data. You get data objects and you can then iterate on a collection to produce a bulleted list or whatever the template calls for.
They made a massive change where they introduced the Microsoft language Razor to templating. Prior to that, Umbraco used XSLT, which is an XML transformation language. That was revolutionary at the time because Razor was a much richer language for doing that front-end templating. However, the implementation left a lot to be desired around filtering and conditionals, type-checking, and a lot of low-level complicated stuff. And while it was great from a front-end perspective, it was actually really hard to do a lot of things.
So I decided to see if I could fix this. And then I ended up doing a massive implementation and getting it included in the core of Umbraco. It was a good example of the open source mentality in motion.
SiteHost: It’s good to know that the Umbraco community, which is centred in Europe, was so welcoming to someone all the way away in New Zealand.
Gareth: Yes. Umbraco has an annual Code Garden conference in Copenhagen, and in the week before they have a gathering of all the core contributors. It’s a retreat that I was invited to a couple of years running. They basically all go to a farmhouse and everybody just hacks and chats. That was a great opportunity.
"I ended up doing a massive implementation and getting it included in the core of Umbraco. It was a good example of the open source mentality in motion."
SiteHost: Were they really just chats, or were there serious discussions there too?
Gareth: I was actually involved in the decision to throw out Umbraco 5, which was meant to be a ground-up rewrite of everything from core principles.
SiteHost: What was the background to that?
Gareth: Umbraco 4 was around for a very long time. The idea was to throw it away, and to make version 5 awesome, with everything that everybody wanted all built in. It was going to be beautifully engineered and beautifully structured.
So, about two years into that project they realised, we’ve made some horrible mistakes and this might be unrecoverable. What do we do? Do we push on and try and fix this, or do we throw it out?
The core team discussed it and decided that we could save it, but the work would be too complicated and too risky. So we decided to throw version 5 out after two years, take version 4, and progressively enhance it to become what it should be. Which is a longer and more complicated project overall, but actually provides a path for people to upgrade and get the new features sooner. That was the reason we did it.
SiteHost: As an Umbraco user, how did that decision affect you?
Gareth: I had never started using version 5! I looked at it and thought, this is too complicated and just too different. People who were using it were complaining about performance and about features that should have worked.
That was a nightmare of software engineering. A lot of lessons learned there.
SiteHost: Those lessons were definitely visible in later versions of Umbraco.
Gareth: Yes, version 7 was really the evolution of Umbraco 4. It encompassed the lessons learned from version 5, and quite a few years of development and iteration on version 4. Umbraco 7 was a really good platform, released in 2013 with big fanfare.
There was a nice upgrade path from versions 4-6, so lots of people jumped into 7, which lasted for quite a while. A lot of sites have actually stayed on Umbraco 7.
SiteHost: More recent versions have come out much closer together, haven’t they?
Gareth: Umbraco changed their versioning strategy, so major versions come out more frequently. Version 11 would previously have been, say, 10.2.
Umbraco 9, 10, and 11 are written in .NET Core. There’s a divergence in .NET, where you’ve got your original .NET Framework stuff which stopped at version 4, and now everything's .NET Core. Core runs multi-platform, which means it works on Linux and on Windows.
SiteHost: That’s a big change, especially from our point of view. How long has Umbraco been Linux-compatible?
Gareth Evans: Since Umbraco 9 came out two years ago. But funnily enough Sniper still doesn't have many sites in it because we're maintaining lots of old sites. Just the way the business has been recently, we're building features on existing sites more than building new sites.
That said, we will migrate all the websites that we support over to version 10+. You can’t overlook the advantages in terms of hosting, performance and the use of more modern technology.
SiteHost: That will open up more options on the Umbraco hosting front, but for now you’re obviously on Windows. What products are you using?
Gareth: We've got a couple of VDSs and a couple of VPSs with SiteHost. We used to have our own servers - physical hardware in a data centre - and we were spending a lot of time maintaining them and checking on them when they crashed.
I was sick of it! I was driving to the data centre a couple of times a week to work on it myself. I've got better things to do than that.
We had tried to build out a really complicated infrastructure with load balancing and redundancy, which was going to be our selling point, but we didn't invest enough into that model to make it actually work out.
"Umbraco 9, 10, and 11 are written in .NET Core, which means it works on Linux and on Windows."
SiteHost: What issues were you trying to manage your way around?
Gareth: We had two Windows servers sharing the same sites, each with its own local file system. But then shared content, like website content, needed to be available to both web servers. So we used a Linux-based NAS to create a Samba share, but file change notifications were getting lost. IIS, the Microsoft web server, listens to those events to clear its internal memory caches.
We'd change something on the disk, and IIS would be completely unaware of it and wouldn't clear its caches. The file system would go offline and every website would go offline, and the only solution was to drive to the data centre and shut this down, shut this down, shut this down, turn this back on, turn this back on, wait for this to boot, then turn it on. It would take about an hour, and everything's down in the meantime.
In Linux logs we could see the event being raised, but we’d look at Windows events and it just never arrived. We went through so much work trying to fix this. But ultimately it came down to the fact that we didn't buy a Windows-based NAS. At the time that was $10,000+ of investment.
SiteHost: So you found us instead?
Gareth: I got fed up with our infrastructure and one of the team said to me, “Why don't we just virtualise this?”
We were already working with SiteHost a little bit. I talked to Quintin and we basically moved everything over to VDSs and VPSs at SiteHost. We did a big cut-over in 2013 and have been working closely with the amazing team at SiteHost ever since. We’ve done a lot of work, but the plan hasn’t changed.
SiteHost: In terms of time saved, or time you can devote to things you’d rather be doing than driving to a data centre, what difference have you noticed?
Gareth: It’s been quite a long time now, and I'd say that SiteHost changed my business for the better. While I'm still technically on call to my customers. I'm not on call to the same degree - not for a hosting solution.
SiteHost: We have .NET Core support in Cloud Containers, so Umbraco 9+ runs well on that Linux-based platform. Do you have any advice for people comparing Windows and Linux?
Gareth: I've only got a little bit of experience with Linux hosting, so the only advice I have is try to stick to one platform. Don’t try to mix your Linux and Windows platforms, because there are hidden complexities and incompatibilities. That’s ultimately because Microsoft is a walled garden.
When we were self-hosting, we never got to the bottom of the issue we had with file change notifications. It was in between the two platforms somewhere.
SiteHost: We’re just glad that we could solve that problem for you, and let you focus on building great systems instead.