<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: Rockdove</title>
    <description>The latest articles on Forem by Rockdove (@rockdove).</description>
    <link>https://forem.com/rockdove</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Forganization%2Fprofile_image%2F2922%2Ffb74f48f-5ee6-4e22-a1db-784dddf65923.png</url>
      <title>Forem: Rockdove</title>
      <link>https://forem.com/rockdove</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/rockdove"/>
    <language>en</language>
    <item>
      <title>I moved my website to Umbraco Cloud, this is how I got on</title>
      <dc:creator>Joe Glombek</dc:creator>
      <pubDate>Mon, 21 Dec 2020 05:00:00 +0000</pubDate>
      <link>https://forem.com/rockdove/i-moved-my-website-to-umbraco-cloud-this-is-how-i-got-on-3apl</link>
      <guid>https://forem.com/rockdove/i-moved-my-website-to-umbraco-cloud-this-is-how-i-got-on-3apl</guid>
      <description>&lt;p&gt;One weekend. One website. One rebuild.&lt;/p&gt;

&lt;p&gt;I have a confession to make. Up until this weekend, my website was hosted on Squarespace.&lt;/p&gt;

&lt;p&gt;This may seem counter-intuitive, for a software developer to use a service like Squarespace, but it made a lot of sense at the time. I needed a website fast while I was working full-time and didn't have the time or energy to build a site from scratch.&lt;/p&gt;

&lt;p&gt;I've mentioned in the past how &lt;a href="https://rockdove.uk/blog/integrate-don-t-imitate/"&gt;I'm not opposed to using third-party services where it makes sense&lt;/a&gt;, and this was certainly one of those occasions.&lt;/p&gt;

&lt;p&gt;Squarespace is, however, not without its faults: accessibility is poor and there aren't many ways to improve it; the drag and drop designer is a pain when you want consistency and repetition; and my CV on the Squarespace site never looked quite right on mobile. So, combined with the fact that I'm an Umbraco developer without an Umbraco website, it was time for a change.&lt;/p&gt;

&lt;h2&gt;
  
  
  Trial signup
&lt;/h2&gt;

&lt;p&gt;Investing evenings and weekends in building something I do for my day job has never really appealed to me, so I thought I might try out Umbraco Cloud. I like the idea of patch upgrades happening automatically and other upgrades possible without cloning locally. This means that going forwards I have less admin to do to keep my site up &lt;em&gt;and&lt;/em&gt; up-to-date. Using Umbraco Cloud also meant that I'd have more recent practice using Cloud, so I was at least learning something from my endeavour (I haven't used Cloud since it was in preview and called UaaS!)&lt;/p&gt;

&lt;p&gt;Signing up for the trial was fairly easy and promised 14 days to get my site in order before launching and paying for it. I had a repo up in no time.&lt;/p&gt;

&lt;h2&gt;
  
  
  Developing locally
&lt;/h2&gt;

&lt;p&gt;Although Cloud allows fully-online development (more on that later), I'm stuck in my ways. So decided to try out developing the Umbraco site locally. Developing locally enables compiled libraries for custom helpers and extension methods and installing packages via Nuget (sorry, Umbraco Packages!) which is all good practice as far as I'm concerned.&lt;/p&gt;

&lt;p&gt;Cloud is built around Git. Any changes you make are committed to Git and this automatically triggers a deployment to the Cloud site. In theory, this means working locally is as simple as cloning the URL Cloud provides and hitting run. But it's not &lt;em&gt;quite&lt;/em&gt; that simple because Cloud runs ASP.NET &lt;em&gt;Websites&lt;/em&gt; rather than their &lt;em&gt;Web Application&lt;/em&gt; counterpart, meaning there is no Visual Studio Solution that's source controlled. Umbraco, therefore, provide UaaS.cmd to help simplify this process.&lt;/p&gt;

&lt;p&gt;Foolishly, I initially only skim-read the &lt;a href="https://our.umbraco.com/documentation/Umbraco-Cloud/Set-Up/Working-With-Visual-Studio/#generate-a-visual-studio-solution"&gt;documentation&lt;/a&gt; here before diving in. But after following the official guidance, this process was actually quite simple.&lt;/p&gt;

&lt;p&gt;Then, after configuring my two (that's how it works!) git repos (and also setting up a mirror for the Umbraco Cloud repo because, although not necessary, I couldn't help feeling it was better practice somehow), I hit the run button...&lt;/p&gt;

&lt;p&gt;Well, that didn't work. It's at this point I'd usually document the steps I went through to get it working properly but, in all honesty, I had no idea what I did to get it happy again. It was a bit of trial and error and likely specific to my setup, so we shan't dwell on this! The important thing is that it's working now!&lt;/p&gt;

&lt;h2&gt;
  
  
  Project setup
&lt;/h2&gt;

&lt;p&gt;Let's take a moment to discuss the setup when developing locally.&lt;/p&gt;

&lt;p&gt;UaaS.cmd sets up two Git repositories, one at the root (that you need to source control yourself) and one in &lt;code&gt;*.Web&lt;/code&gt; (where &lt;code&gt;*&lt;/code&gt; is the name of your project).&lt;/p&gt;

&lt;p&gt;&lt;code&gt;*.Web&lt;/code&gt; contains your Umbraco site as an ASP.NET &lt;em&gt;Website&lt;/em&gt; (not Web Application - there is no &lt;code&gt;.csproj&lt;/code&gt; file).&lt;/p&gt;

&lt;p&gt;The root directory contains the solution file as well as a folder and &lt;code&gt;csproj&lt;/code&gt; file called &lt;code&gt;*.Core&lt;/code&gt; which, according to &lt;a href="https://our.umbraco.com/documentation/Umbraco-Cloud/Set-Up/Working-With-Visual-Studio/#working-with-visual-studio"&gt;the docs&lt;/a&gt;, is where controllers, models, data access and extension methods should ideally live.&lt;/p&gt;

&lt;h3&gt;
  
  
  Models!?
&lt;/h3&gt;

&lt;p&gt;Using ModelsBuilder is a bit of a pain. To get Intellisense working, &lt;a href="https://our.umbraco.com/documentation/Umbraco-Cloud/Set-Up/Working-With-Visual-Studio/#using-modelsbuilder-and-intellisense"&gt;the docs&lt;/a&gt; recommend using ModelsBuilder mode &lt;code&gt;AppData&lt;/code&gt; (classes are generated upon request) or &lt;code&gt;AppDataLive&lt;/code&gt; (classes are generated automatically when models change) and then overriding the path to place them in the &lt;code&gt;App_Code&lt;/code&gt; folder, where they'll get compiled on the fly. This is quite clever. Visual Studio can pick these up automatically as ASP.NET Websites include files automatically (some of the time... it involves a lot of hitting the "Refresh" menu option) and they're compiled dynamically meaning you can change models on Umbraco Cloud (not developing locally) and they'll update dynamically.&lt;/p&gt;

&lt;p&gt;However, this means that the &lt;code&gt;*.Core&lt;/code&gt; project has no access to any ModelsBuilder models, which makes writing some of my common extension methods difficult. Normally I'd create a &lt;code&gt;SiteSettings()&lt;/code&gt; extension method on IPublishedContent to get the settings node but, without access to models, I resorted to a generic method &lt;code&gt;GetSite&amp;lt;Settings&amp;gt;()&lt;/code&gt; where Settings is the model for my Settings node.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;public static T GetSite&amp;lt;T&amp;gt;(this IPublishedContent page) where T : class, IPublishedContent
{
    return page.Root().FirstChild&amp;lt;T&amp;gt;();
}

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;There are other options here but they all have their own downsides. You can the &lt;code&gt;*.Core&lt;/code&gt; project altogether and put all your code in the &lt;code&gt;~/App_Code&lt;/code&gt; folder, but this means you miss out on any compilation ahead of time. You can also &lt;a href="https://our.umbraco.com/forum/umbraco-cloud/83723-modelsbuilder-generate-models-to-umbraco-cloud-core-project"&gt;set your models to be generated within the &lt;code&gt;*.Core&lt;/code&gt; project&lt;/a&gt;, but then you won't be able to utilise the ability to develop on the live site (more on that later). A third option may be (I've not yet tested it) to use the &lt;code&gt;Dll&lt;/code&gt; or &lt;code&gt;LiveDll&lt;/code&gt; ModelsMode (in the &lt;a href="https://github.com/modelsbuilder/ModelsBuilder.Original"&gt;full version of ModelsBuilder&lt;/a&gt;) and reference the generated DLL in your &lt;code&gt;*.Core&lt;/code&gt; project. This allows for development on the live site, but means you'll have to either manually generate models (&lt;code&gt;Dll&lt;/code&gt;) or have site restarts every time you change a document type (&lt;code&gt;LiveDll&lt;/code&gt;).&lt;/p&gt;

&lt;h3&gt;
  
  
  Website vs. Web Application
&lt;/h3&gt;

&lt;p&gt;As indicated above, a website is mildly annoying to have as opposed to a web application. I've always seen applications as more superior, but the only reason I think this would be is because an application can generate DLLs, while websites can only have C# in the &lt;code&gt;App_Code&lt;/code&gt; folder, where it's only compiled on application startup (think of it as the opposite of &lt;a href="https://gunnarpeipman.com/asp-net-mvc-precompiling-views/"&gt;precompiled views&lt;/a&gt;).&lt;/p&gt;

&lt;h3&gt;
  
  
  Being a git about Git
&lt;/h3&gt;

&lt;p&gt;And now, lets get onto the Git setup. This is a little weird. If you want to use Visual Studio to build your Umbraco site, the docs suggest you'll need two git repositories (although if you're feeling brave I'm sure you could use one and then use subtree or submodules and mirror to the Cloud repo... but that's a story for another day!): one for the &lt;code&gt;*.Web&lt;/code&gt; folder, and one for everything else. The &lt;code&gt;*.Web&lt;/code&gt; repo is hosted by Cloud (and is where it deploys from), while you'll need to create your own repo for the rest. Although I'm sure it's unnecessary, I also decided to mirror the Cloud repo because it feels like the right thing to do!&lt;/p&gt;

&lt;p&gt;It's not really an issue, just a mild niggle. I'm sure someone more confident with Git than I could find a nicer way to handle this setup, but this one will do for now.&lt;/p&gt;

&lt;h2&gt;
  
  
  Umbraco Deploy
&lt;/h2&gt;

&lt;p&gt;I've heard bad things about it but so far, for me, Umbraco Deploy has just worked. When Umbraco releases Deploy for non-cloud projects, I'm sure I'll have to do a full comparison between Deploy and uSync.Publisher, but for now I'm happy to use Deploy for Cloud and uSync for everything else.&lt;/p&gt;

&lt;h2&gt;
  
  
  Ability to develop on the live site! 🤠
&lt;/h2&gt;

&lt;p&gt;I've always found the Settings area of Umbraco a bit odd, personally I'd rather do all my development within my IDE not partially in the browser. Working in a CI/CD world, I'd also have to disable the Settings section in any environment except locally.&lt;/p&gt;

&lt;p&gt;But in Cloud, the Settings section makes so much sense for the simple reason that any changes you make on your Cloud environments and committed to the Git repo automatically. This makes my inner "&lt;a href="https://en.wikipedia.org/wiki/Cowboy_coding"&gt;cowboy coder&lt;/a&gt;" very happy. If I need to hotfix a live site, I can! If I want to tweak code from my phone, halfway up a mountain, I can! If I'm too lazy to open up Visual Studio to make a minor change to my personal site, I can!&lt;/p&gt;

&lt;p&gt;Cloud is where Umbraco seems most at home, largely because of this.&lt;/p&gt;

&lt;h2&gt;
  
  
  Domain configuration... AKA 9 hours of downtime
&lt;/h2&gt;

&lt;p&gt;I assume due to how Umbraco Latch works, domains will need to be configured to point to the Cloud site before an SSL certificate is generated. Unfortunately for existing sites, this means there will be a short moment of downtime while your domain points to a site with an invalid HTTPS certificate. However, in my case, basic authentication was not automatically disabled when I purchased my Cloud license (and by the time I realised it was too late!)&lt;/p&gt;

&lt;p&gt;I decided to leave the setup overnight in the hope the problem would resolve itself with time, which it, unfortunately, did not. Support was, however, very helpful and resolved the issue quickly after I notified them of the issue.&lt;/p&gt;

&lt;p&gt;Azure Web Apps allow domains to be preconfigured (with DNS text records) prior to mapping the domain, which may mean as &lt;a href="https://umbraco.com/blog/the-future-of-umbraco-cloud/"&gt;Umbraco Cloud moves to Web Apps and uses Cloudflare&lt;/a&gt; in place of the existing Latch process for HTTPS, we may see an improvement here.&lt;/p&gt;

&lt;h2&gt;
  
  
  Umbraco cloud issues
&lt;/h2&gt;

&lt;p&gt;I don't think it's unfair to say that Umbraco Cloud has a bit of a reputation when it comes to stability... and not a good one. And so far, I'm not helping that reputation, having already detailed an issue I had with my site not coming out of trial mode.&lt;/p&gt;

&lt;p&gt;I did also experience a short amount of downtime on Saturday night.&lt;/p&gt;

&lt;p&gt;But that's it so far. And support has been great at fixing the issues I have had.&lt;/p&gt;

&lt;p&gt;I also had an issue with a bug in Umbraco Forms, which the support team fixed without having to delve into the database myself.&lt;/p&gt;

&lt;h2&gt;
  
  
  The price is right... sometimes
&lt;/h2&gt;

&lt;p&gt;So who is this for? It's a question that's asked again and again. And I wasn't sure until I tried it properly myself.&lt;/p&gt;

&lt;p&gt;I think the answer is, Umbraco Cloud is great for me. My use case is that I have a small low-traffic site which I don't want to have to invest huge swathes of time keeping patched and up to date, but I do want to quickly develop and launch new features.&lt;/p&gt;

&lt;p&gt;It's not ideal for complex custom setups, or sites requiring "four-nines" of uptime. It might also outprice individuals or small charities. But for those in the middle, it seems to suit quite well. I won't be recommending Cloud to every client, but I think I now know who the target market is, and will recommend to those clients going forwards.&lt;/p&gt;

&lt;p&gt;It will be interesting to see how &lt;a href="https://umbraco.com/blog/the-future-of-umbraco-cloud/"&gt;the new planned infrastructure for Cloud&lt;/a&gt; will affect this target demographic and whether we'll see a more stable platform going forwards.&lt;/p&gt;

&lt;p&gt;As for the relatively high cost vs self-hosting, I think this comes down to the quality and speed of the support team. If you consider the month price as a time-saver, it's easily worth it in my opinion.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>How to set Windows Terminal as GitKraken's default terminal</title>
      <dc:creator>Joe Glombek</dc:creator>
      <pubDate>Fri, 11 Dec 2020 06:34:00 +0000</pubDate>
      <link>https://forem.com/rockdove/how-to-set-windows-terminal-as-gitkraken-s-default-terminal-4geo</link>
      <guid>https://forem.com/rockdove/how-to-set-windows-terminal-as-gitkraken-s-default-terminal-4geo</guid>
      <description>&lt;p&gt;GitKraken allows you to open the current repository in the terminal by hitting Alt + T but by default, this won't be the new Windows Terminal.&lt;/p&gt;

&lt;p&gt;The new Windows Terminal has many benefits over the Command Line or Powershell applications but you won't find Windows Terminal as an option for the default terminal in GitKraken's settings.&lt;/p&gt;

&lt;p&gt;There is a simple fix, however. Open up GitKraken's preferences (File &amp;gt; Preferences) and scroll down to and check "Use Custom Terminal Command" (below "Default Terminal" dropdown). Then, in the "Custom Terminal Command" field that appears above, enter:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;wt -d %d

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;wt&lt;/code&gt; is the command for Windows Terminal, to which we're passing the &lt;code&gt;-d&lt;/code&gt; directory parameter. The value of &lt;code&gt;%d&lt;/code&gt; is then swapped out by GitKraken for the directory of the current repository.&lt;/p&gt;

&lt;p&gt;It's as simple as that!&lt;/p&gt;

&lt;p&gt;At the time of writing, there is a bug in GitKraken which launches the terminal twice when using the File &amp;gt; Open Terminal option, but Alt + T works just fine.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Easily open uSync Sync-Pack files</title>
      <dc:creator>Joe Glombek</dc:creator>
      <pubDate>Tue, 16 Jun 2020 11:38:03 +0000</pubDate>
      <link>https://forem.com/rockdove/easily-open-usync-sync-pack-files-af2</link>
      <guid>https://forem.com/rockdove/easily-open-usync-sync-pack-files-af2</guid>
      <description>&lt;p&gt;uSync Sync-Pack files (with the .uSync extension) are simply ZIP files and can be viewed in any ZIP viewer, including the one built into Windows.&lt;/p&gt;

&lt;p&gt;One option is to rename your Sync-Pack to have a .zip extension and then open it as you would any compressed folder.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--fWfplePx--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/i/e7d4z0yyyygtrhusbfaz.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--fWfplePx--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/i/e7d4z0yyyygtrhusbfaz.png" alt="A screenshot of a Sync-Pack file" width="116" height="147"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The other option, however, which is very useful if you’re looking inside uSync files more often, is to let Windows know that the .uSync file is a ZIP file and to treat it as such.&lt;/p&gt;

&lt;p&gt;There’s no point-and-click setting for this like there is for associating a filetype with a program, because we’re doing something subtly different: telling Windows this file &lt;em&gt;is&lt;/em&gt; a ZIP file.&lt;/p&gt;

&lt;p&gt;All you need to do, though, is open a command prompt as administrator and run:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;assoc .uSync=CompressedFolder
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--vSdMXCMb--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/i/2rrvcr2y1z28la0qntqh.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--vSdMXCMb--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/i/2rrvcr2y1z28la0qntqh.png" alt="Screenshot of Command Prompt with the above command entered" width="487" height="141"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>umbraco</category>
      <category>usync</category>
      <category>zip</category>
    </item>
    <item>
      <title>Integrate, don't imitate - when an API beats rolling your own</title>
      <dc:creator>Joe Glombek</dc:creator>
      <pubDate>Wed, 06 May 2020 22:14:30 +0000</pubDate>
      <link>https://forem.com/rockdove/integrate-don-t-imitate-when-an-api-beats-rolling-your-own-1on8</link>
      <guid>https://forem.com/rockdove/integrate-don-t-imitate-when-an-api-beats-rolling-your-own-1on8</guid>
      <description>&lt;p&gt;It wasn’t long ago that every agency and freelancer had their own custom CMS they’d use for client projects. We decided that was a bad idea. But we’ll often be seen writing custom code within that standardised CMS. Are we making the same mistakes again?&lt;/p&gt;




&lt;p&gt;This blog accompanies my talk at the &lt;a href="https://www.meetup.com/Thames-Valley-Umbraco-User-Group"&gt;Thames Valley Umbraco User Group&lt;/a&gt; on 30 April 2020. I also have &lt;a href="https://www.beautiful.ai/player/-M7qx4D9k4IkrxrkBFvn"&gt;the slides for my talk&lt;/a&gt; available.&lt;/p&gt;




&lt;p&gt;Let’s start with a couple of scenarios.&lt;/p&gt;

&lt;h2&gt;
  
  
  Scenario 1: John the roller coaster enthusiast
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--CkURdgOy--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/i/f0jt6go5bkoofqnwd836.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--CkURdgOy--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/i/f0jt6go5bkoofqnwd836.jpeg" alt="Man standing in front of a roller coaster" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Meet John. He’s a rollercoaster enthusiast and he’s decided that he wants to ride a roller coaster at least once a week. He’s got a good budget and money is no object.&lt;/p&gt;

&lt;p&gt;How could we solve his problem?&lt;/p&gt;

&lt;h3&gt;
  
  
  Option 1: Build a roller coaster in John’s back garden
&lt;/h3&gt;

&lt;p&gt;We could recommend to John that we build a roller coaster in his back garden. This could be quite fun and he could ride the roller coaster as often as he liked, with no need to queue. But on the downside, the estimated cost of this solution is £2.5 million to £25 million (&lt;a href="https://www.bbc.co.uk/news/technology-24553630"&gt;source: BBC&lt;/a&gt;).&lt;/p&gt;

&lt;h3&gt;
  
  
  Option 2: Go to a theme park
&lt;/h3&gt;

&lt;p&gt;Alternatively, we could just recommend that he goes to his local theme park. He’d have his choice of various rides with no build-time, planning permission, health and safety, insurance, etc.&lt;/p&gt;

&lt;p&gt;As for cost, a “premium season pass” at a well known theme park costs £85 (notice the lack of the word “million” as a suffix), plus the cost of fuel (which, no matter how far you’re travelling is negligible, again due to the lack of the “million” suffix).&lt;/p&gt;

&lt;p&gt;I’ll let you decide which option to pitch to John.&lt;/p&gt;

&lt;h2&gt;
  
  
  Scenario 2: National Bushcraft Association website
&lt;/h2&gt;

&lt;p&gt;Some of you may know about the time I lived in the woods for 6 months and taught wilderness survival skills to school children. So, I've created a scenario around the fictional National Bushcraft Association, a membership organisation for bushcraft instructors.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--VC6t3BRv--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/i/niuip5gxy50kjmy8k7wv.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--VC6t3BRv--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/i/niuip5gxy50kjmy8k7wv.jpeg" alt="Bushcraft tools including an axe and knife resting on a tree stump" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Members pay an annual fee to gain benefits such as networking, client referrals, news sharing capabilities and the obligatory newsletter. They want a Content Management System (CMS) with member management functionality to manage membership fees, expiry of unpaid memberships and mass mailing.&lt;/p&gt;

&lt;p&gt;So the obvious solution?&lt;/p&gt;

&lt;p&gt;Umbraco! That’s my go-to CMS, and I love working with it. Of course simply being my favourite CMS doesn’t justify the choice on its own, Umbraco is open source with an enthusiastic community meaning its free and actively developed. Umbraco will easily cover the requirement the Bushcraft Association has for content management. It also has a highly extensible membership management system.&lt;/p&gt;

&lt;p&gt;The membership management functionality in Umbraco by default, however, is comparatively basic. So we’d need to build custom functionality to allow sending newsletters, membership payment and expiring members who haven’t paid.&lt;/p&gt;

&lt;p&gt;But wait! Isn’t this the theme park scenario all over again; are we building a roller coaster? And if so, what are our other (“season pass”) options here?&lt;/p&gt;

&lt;p&gt;As for membership management, there are dozens of pre-built systems available that have this down to a tee, and many of them have an API we could integrate with. A third party system would handle the membership fees, expiry and renewal reminders in the requirements, but also take GDPR off our hands and give us extra functionality to, for example, allow members to manage their own details and upgrade their membership tier as they need to, without phoning up the office team.&lt;/p&gt;

&lt;p&gt;Similarly, a newsletter sending platform would handle sending newsletters and managing subscriptions and unsubscriptions as required while also handling GDPR and providing the Bushcraft Association with analytics.&lt;/p&gt;

&lt;p&gt;In this scenario, I think building a basic CMS site and integrating with some third party services is the clear winner.&lt;/p&gt;

&lt;h2&gt;
  
  
  The problem solver mindset?
&lt;/h2&gt;

&lt;p&gt;But where does this “backyard roller coaster” attitude in developers come from?&lt;/p&gt;

&lt;p&gt;Personally, I think it’s due to the problem solver in us. We’re in this career because we like to solve problems and when someone gives us a brief we like to find an “ideal” solution, built exactly the way we think it should work.&lt;/p&gt;

&lt;p&gt;As well as this, as a premium service provider, we might feel it’s our duty to build everything bespoke rather than “cheating” by using other people’s work.&lt;/p&gt;

&lt;p&gt;It seems to take some maturity as a developer to realise we’re not taking the easy way out by using other people’s work, but standing on the shoulders of giants.&lt;/p&gt;

&lt;p&gt;We’re all too keen to use open source packages to speed up development and provide our users with a better experience, so why not complete services too?&lt;/p&gt;

&lt;h2&gt;
  
  
  Benefits of integration
&lt;/h2&gt;

&lt;p&gt;For us developers, integrating makes life less repetitive, I get to spend more time writing new code rather than making poor imitations.Being honest, I just find building integrations more fun; I don't get too excited about another document type or building another news page. Writing more in depth C# is more interesting to me!&lt;/p&gt;

&lt;p&gt;But how do we sell an integration to higher ups, project managers or the client?&lt;/p&gt;

&lt;h3&gt;
  
  
  Over-delivery and extra features
&lt;/h3&gt;

&lt;p&gt;Integrating with more complete systems can result in over-delivery. Third party systems likely have more features built into them over the years than you could do with the budget, the client’s going to get an industry-standard application, rather than the bare minimum.&lt;/p&gt;

&lt;p&gt;Not to mention the fact that the client may get extra features “for free” as the third party developer continues to improve their application over time.&lt;/p&gt;

&lt;h3&gt;
  
  
  Less scope creep
&lt;/h3&gt;

&lt;p&gt;Since a client is buying into an existing system, chances are they can trial that system before they commit to using it. Since the client knows exactly what they’re getting and has already taken part of the system for a test drive, the requirements are less likely to change, reducing scope creep.&lt;/p&gt;

&lt;h3&gt;
  
  
  Less support
&lt;/h3&gt;

&lt;p&gt;Since you’re building less, it means you handle less of the support after launch. There can be positives to this for the client too such as a reduced retainer cost and perhaps a better response rate than your team could provide. This also means that the client is less reliant on you or your company in the future, which could go a long way towards easing their minds!&lt;/p&gt;

&lt;h3&gt;
  
  
  A solid platform
&lt;/h3&gt;

&lt;p&gt;By buying into an existing ecosystem, some of your application has been built and tested already.&lt;/p&gt;

&lt;h2&gt;
  
  
  A balancing act
&lt;/h2&gt;

&lt;p&gt;Of course, it’s not always as simple as integrating. If nobody built their own roller coasters, there wouldn't be a theme park to buy an annual pass for!&lt;/p&gt;

&lt;p&gt;It wasn’t long ago that every agency and freelancer had their own custom CMS they’d use for client projects. We decided that was a bad idea. But equally, not every website should be built with Wix, Squarespace or Shopify. There’s often a trade off between bespoke and prebuilt. Every project needs an evaluation. Integration may not always be the answer, but it should always be considered.&lt;/p&gt;

</description>
      <category>umbraco</category>
      <category>integration</category>
      <category>value</category>
      <category>casestudy</category>
    </item>
  </channel>
</rss>
