<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>Opinion on But it works on my PC!</title>
    <link>https://blog.richardfennell.net/tags/opinion/</link>
    <description>Recent content in Opinion on But it works on my PC!</description>
    <image>
      <title>But it works on my PC!</title>
      <url>https://blog.richardfennell.net/images/papermod-cover.png</url>
      <link>https://blog.richardfennell.net/images/papermod-cover.png</link>
    </image>
    <generator>Hugo -- 0.147.0</generator>
    <language>en</language>
    <lastBuildDate>Mon, 18 Aug 2025 00:00:00 +0000</lastBuildDate>
    <atom:link href="https://blog.richardfennell.net/tags/opinion/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Your out of support DevOps tooling is hurting you</title>
      <link>https://blog.richardfennell.net/posts/your-out-of-support-devops-tooling-is-hurting-you/</link>
      <pubDate>Mon, 18 Aug 2025 00:00:00 +0000</pubDate>
      <guid>https://blog.richardfennell.net/posts/your-out-of-support-devops-tooling-is-hurting-you/</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Note that this is a repost of my &lt;a href=&#34;https://www.linkedin.com/pulse/your-out-support-devops-tooling-hurting-you-richard-fennell-z8wme/&#34;&gt;LinkedIn article&lt;/a&gt; of the same name&lt;/em&gt;&lt;/p&gt;&lt;/blockquote&gt;
&lt;h1 id=&#34;the-changing-face-of-devops&#34;&gt;The changing face of DevOps&lt;/h1&gt;
&lt;p&gt;Over the years the style of DevOps consultancy I have done has changed, along with its name. Changing from the simple &amp;lsquo;source control&amp;rsquo;, to SDLC, then ALM to now DevOps.&lt;/p&gt;
&lt;p&gt;Back in the days of Team Foundation Server (TFS), I used to do a lot of on-premise installs and upgrades. Getting our customers up and running, and helping them improve their adoption of the tools.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<blockquote>
<p><em>Note that this is a repost of my <a href="https://www.linkedin.com/pulse/your-out-support-devops-tooling-hurting-you-richard-fennell-z8wme/">LinkedIn article</a> of the same name</em></p></blockquote>
<h1 id="the-changing-face-of-devops">The changing face of DevOps</h1>
<p>Over the years the style of DevOps consultancy I have done has changed, along with its name. Changing from the simple &lsquo;source control&rsquo;, to SDLC, then ALM to now DevOps.</p>
<p>Back in the days of Team Foundation Server (TFS), I used to do a lot of on-premise installs and upgrades. Getting our customers up and running, and helping them improve their adoption of the tools.</p>
<p>With the move to cloud services the profile of this work changed to increasingly helping customers migrate their tooling and processes to the cloud. Specifically doing TFS/Azure DevOps Server to Azure DevOps Services cloud migrations, and then helping them get the best out of this new platform.</p>
<p>Today the profile has changing again. The majority of our clients have already moved to the cloud, so much of my engagements are focused on best practice usage of the tools, and the day to day development lifecycle. As opposed to installation, upgrade and migration.</p>
<p>That does not mean I don’t see installation, upgrade and migration projects in both the Azure DevOps and GitHub space, but certainly not in the volumes I used to.</p>
<h1 id="who-is-left-on-premises-and-why">Who is left on premises and why?</h1>
<p>Now we seem to be past the peak of cloud migrations, most clients who want to make the move have moved. Remaining on-premise we now have two broad groups:</p>
<ul>
<li>Companies with a governance reason, or maybe just a perceived reason, to stay on-premises. It is worth noting that I do see clients who assume a governance restriction, but don’t check with their regulatory/auditor body for current guidance to see what their options are. They are often surprised that the cloud, when used securely, is a viable option for them.</li>
<li>Companies who have neglected their on-premise server</li>
</ul>
<p>It is the latter I want to talk about in this article.</p>
<h1 id="falling-into-the-gap-between-it-and-development">Falling into the gap between IT and Development</h1>
<p>I have often seen that it is easy for a TFS/Azure DevOps Server to fall into a gap between the IT and Development teams. Wrongly, the server is not considered a business-critical server to be managed by IT, and not treated with rigor by the Development team as it would be by an IT team.</p>
<p>Because of this, I still see a number of old TFS/Azure DevOps Servers that could well have not been patched since their installation, maybe over a decade ago. The only reason they are being looked at now is the underlying Windows Operating Systems and SQL versions are reaching end of life and company wide IT audits are forcing changes to be made.</p>
<p>I have long said that for the on-premises TFS/Azure DevOps Server you should, on top of the usual OS patching, be looking at patching DevOps at least every 3 to 6 months. This is because this is the rough release cadence that features from the cloud version of Azure DevOps Services get packaged and made available to the on-premise version. These updates include not just new features, but also critical security patches.</p>
<p>It is common that in customers who have not patched their server that they have also not kept their development practices up to date. Often lacking CI/CD processes, which I feel are the core of modern DevOps good practice, the heartbeat of the process, and are commonly still using older source control patterns e.g. still on TFVC source control. This is not in itself wrong, but potentially limiting as modern practices and the skillsets of newer/younger developers are going to be based around the de-facto standard of Git.</p>
<h1 id="but-my-upgrade-is-too-complex">But my upgrade is too complex</h1>
<p>The issue with upgrades for such old systems is that there is often no direct path to the current version of Azure DevOps Server. Upgrades may require multiple steps, using temporary intermediate environments to address the complexities due to the limitations of supported SQL and OS versions that underpin TFS/Azure DevOps Server.</p>
<p><img alt="Azure DevOps Migration Path" loading="lazy" src="https://learn.microsoft.com/en-us/azure/devops/server/upgrade/media/upgrade-2022.png"></p>
<p>A common question from clients is ‘how long is this upgrade going to take’? A very difficult one to answer as everyone’s systems are different. You can think of the time required for this upgrade as taking the time for all the smaller updates you should have done over the life of your server and bundling it up into one massive job.</p>
<p>The majority of the time in a TFS upgrade is related to SQL operations, backups, copies, restores and schema/data updates. The sheer volume of data to be moved is usually the limiting factor. Anything involving potentially Terabytes of data takes time.</p>
<p>For major upgrades such as this, I always recommend a dry run to make sure the process is understood, timings known and to give the client&rsquo;s staff the opportunity for training and adoption of the new tooling available, such as Git and modern CI/CD.</p>
<p>But you can’t get away from the fact that you will probably need an amount of downtime, while your old TFS server is not available, before the new Azure DevOps Server is ready.</p>
<h1 id="but-cant-i-jump-to-the-cloud-now">But can’t I jump to the cloud now?</h1>
<p>Once I start this form of major upgrade engagement it is common for clients to ask &ldquo;can’t I just bypass all this and go to the cloud?&rdquo;. Of course the answer is ‘yes, but&hellip;’.</p>
<p>If they wish to do a full fidelity migration to Azure DevOps Services then they still have to get to the current version of Azure DevOps Server as the migration start point. So they cannot avoid the on-premise upgrades.</p>
<p>If they don’t need a full fidelity upgrade, or are considering a move to another toolset such as GitHub Enterprise, there are more options that do not require an update to the on-premise server, but these come with constraints and compromises, as you would expect whenever you swap toolsets.</p>
<h1 id="so-are-you-in-this-position">So are you in this position?</h1>
<p>The moral of the story is don’t neglect your DevOps tools, a craftsman does not let their tools get rusty and neither should you.</p>
<p>If you are not keeping your DevOps tool chain up to date you are hampering the efficiency and potentially the recruitment/retention of your developers as they look to work on projects using modern tooling.</p>
<p>So, if this sounds like your situation, why not get in touch with me or <a href="https://www.blackmarble.com/contact/">Black Marble</a> to discuss your DevOps options?</p>
]]></content:encoded>
    </item>
    <item>
      <title>Personal Access Tokens (PATs) are not your friends</title>
      <link>https://blog.richardfennell.net/posts/pats-are-not-your-friends/</link>
      <pubDate>Fri, 22 Mar 2024 00:00:00 +0000</pubDate>
      <guid>https://blog.richardfennell.net/posts/pats-are-not-your-friends/</guid>
      <description>&lt;h2 id=&#34;background&#34;&gt;Background&lt;/h2&gt;
&lt;p&gt;Programmatic connection to Azure DevOps cannot be done with your Active Directory credentials. This is because this involves a dialog being shown, and these days usually an MFA check too.&lt;/p&gt;
&lt;p&gt;Historically, the solution to this problem was to enable &lt;a href=&#34;https://aka.ms/vstspolicyaltauth&#34;&gt;Alternate Credentials&lt;/a&gt;, which could be passed as username and password, without the dialog being shown. However, the use of these has been deprecated since 2020, and &lt;a href=&#34;https://devblogs.microsoft.com/devops/final-notice-of-alternate-credentials-deprecation/&#34;&gt;they have been completely removed since Jan 2024&lt;/a&gt;.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<h2 id="background">Background</h2>
<p>Programmatic connection to Azure DevOps cannot be done with your Active Directory credentials. This is because this involves a dialog being shown, and these days usually an MFA check too.</p>
<p>Historically, the solution to this problem was to enable <a href="https://aka.ms/vstspolicyaltauth">Alternate Credentials</a>, which could be passed as username and password, without the dialog being shown. However, the use of these has been deprecated since 2020, and <a href="https://devblogs.microsoft.com/devops/final-notice-of-alternate-credentials-deprecation/">they have been completely removed since Jan 2024</a>.</p>
<p>So for a number of years the recommended way to programmatically authenticate with Azure DevOps has been to use a <a href="https://learn.microsoft.com/en-us/azure/devops/organizations/accounts/use-personal-access-tokens-to-authenticate?view=azure-devops&amp;tabs=Windows">Personal Access Token (PAT)</a>. However, PATs are not without their own issues.</p>
<h2 id="the-problem-with-pats">The problem with PATs</h2>
<p>The most critical problem is that PATs expire. By default they expire after 30 days, and the longest you can set them to expire after is a maximum of 1 year. This means that you have to remember to renew them, and if you forget then your automation that rely on them will stop working.</p>
<p>Obviously it is very tempting to just set the expiry to 1 year, but this is not the best idea. The longer the expiry the more time there is for the PAT to be compromised. Just like SSL certificates, or any access token, the shorter period before the expiry the better.</p>
<p>Of course like any authentication and permission model you can grant too many permissions to a PAT, and then if it is compromised you have a problem, but that is on you not following the principle of least privilege, not a fundamental issue of PATs.</p>
<h2 id="but-what-is-the-alternative">But what is the alternative?</h2>
<p>Azure DevOps now offers support for <a href="https://learn.microsoft.com/en-us/azure/devops/integrate/get-started/authentication/service-principal-managed-identity?view=azure-devops">Managed Identity &amp; Service Principals</a>. These are a much better way to provide a means to programmatically authenticate. Critically, they do not expire, and the tokens they generate for the actual connections are short lived, and you can of course grant them privileges in line with the principle of least privilege.</p>
<p>When used to access Azure DevOps resource, the only downside is they consume a basic user license.</p>
<p>This form of authentication is perfect for use in automation from locations like <a href="https://learn.microsoft.com/en-us/azure/azure-functions/functions-identity-based-connections-tutorial">Azure Functions</a>, or from the <a href="https://learn.microsoft.com/en-us/cli/azure/authenticate-azure-cli-managed-identity">Az CLI</a>.</p>
<h2 id="what-about-github">What about GitHub?</h2>
<p>The issue of PATs is not just one for Azure DevOps, the same problems are true for GitHub. On GitHub the solution is to use a <a href="https://devopsjournal.io/blog/2022/01/03/GitHub-Tokens">GitHub App to authenticate with the GitHub API</a>, and then use the short term token it can generate to authenticate with the GitHub API.</p>
<h2 id="what-about-other-outgoing-services-from-azure-devops">What about other outgoing services from Azure DevOps?</h2>
<p>Another place you will see a move away from expiring secrets in Azure DevOps are Service Connections to services to such as Azure. You can now use <a href="https://learn.microsoft.com/en-us/azure/devops/pipelines/library/connect-to-azure?view=azure-devops#create-an-azure-resource-manager-service-connection-using-workload-identity-federation">Workload Identity Federation</a> to authenticate with Azure.</p>
<p>Converting to use Workload Identity Federation is simple, you just press a button in the Azure DevOps UI, and it will create a Service Principal in Azure AD, and then update the Service Connection to use this to authenticate with Azure.</p>
<p><img alt="Swap to Workload Identity Federation" loading="lazy" src="/images/rfennell/pat-serviceprinciple.png"></p>
<p>Once this is done there will be no need to remember to renew the Service Connection, as it will use the Service Principal to authenticate, and this does not expire.</p>
<h2 id="summary">Summary</h2>
<p>So, when using Azure DevOps in many cases you can now avoid the use of PATs, and hence the need to remember to renew them. Giving you one less thing to remember to do, and one less thing to go wrong.</p>
]]></content:encoded>
    </item>
    <item>
      <title>It is really time to get off Azure DevOps TFVC source control</title>
      <link>https://blog.richardfennell.net/posts/it-is-really-time-to-get-off-tfvc/</link>
      <pubDate>Thu, 21 Mar 2024 00:00:00 +0000</pubDate>
      <guid>https://blog.richardfennell.net/posts/it-is-really-time-to-get-off-tfvc/</guid>
      <description>&lt;h2 id=&#34;a-history-lesson&#34;&gt;A History Lesson&lt;/h2&gt;
&lt;p&gt;Team Foundation Version Control (TFVC) has been around since 2005, since the first release of Team Foundation Server (TFS) in 2005. In 2013, over 10 years ago, Microsoft added Git support to TFS (later renamed as Azure DevOps), Git had already been around for 8 years at that point.&lt;/p&gt;
&lt;p&gt;10 years is a long time in the software industry, I always think of &amp;lsquo;IT years&amp;rsquo; like &amp;lsquo;dog years&amp;rsquo; i.e. 7 to 1, so over 70 years has passed, a lifetime. Over this period Git has become the de facto standard for source control. So if you are still using TFVC as your source control system you really need to ask yourself why?&lt;/p&gt;</description>
      <content:encoded><![CDATA[<h2 id="a-history-lesson">A History Lesson</h2>
<p>Team Foundation Version Control (TFVC) has been around since 2005, since the first release of Team Foundation Server (TFS) in 2005. In 2013, over 10 years ago, Microsoft added Git support to TFS (later renamed as Azure DevOps), Git had already been around for 8 years at that point.</p>
<p>10 years is a long time in the software industry, I always think of &lsquo;IT years&rsquo; like &lsquo;dog years&rsquo; i.e. 7 to 1, so over 70 years has passed, a lifetime. Over this period Git has become the de facto standard for source control. So if you are still using TFVC as your source control system you really need to ask yourself why?</p>
<h2 id="the-advantages-of-git-over-tfvc">The advantages of Git over TFVC</h2>
<p>The advantages of Git over TFVC are numerous, but here are a few:</p>
<ul>
<li>Git is distributed, meaning you can work offline and commit changes locally</li>
<li>Git has better branching and merging (pull request) support</li>
<li>Many newer features of Azure DevOps are Git only i.e YAML based pipelines</li>
<li>Cloud services like Azure Functions, Azure App Service, Azure Logic Apps, Azure API Management etc. all have built-in support for Git</li>
<li>Git repositories are portable, they are easy to migrate to new systems e.g GitHub, GitLab, Bitbucket etc.</li>
<li>Any new hires/students will probably have Git experience</li>
</ul>
<p>From talking to clients who are still on TFVC, the main reason they are still using TFVC is just because they have always used it. There is a fear a change, something you might not expect to see in the technology sector, but all too common.</p>
<p>This fear might be wrappered in the perceived complexity of migrating from TFVC to Git, or that an audit or regulatory requirement means they can&rsquo;t change processes. But these are just excuses. Updates to process and tooling cannot be ignored, you don&rsquo;t have to be the first to move, but the longer you leave it the harder it will be to change.</p>
<p>As an example, one of the most obvious limitations for me of TFVC is how it works with Azure DevOps Pipelines. It is true you have to use the &lsquo;classic&rsquo; pipelines, which are not as flexible as the YAML based pipelines, and have reached <a href="https://devblogs.microsoft.com/devops/disable-creation-of-classic-pipelines/">a &lsquo;done&rsquo; state</a> and so will get no further development. However, more me the big limitations are not the editor experience but that:</p>
<ul>
<li>For each TFVC branch you have to create/clone a new pipeline</li>
<li>You cannot make CI/CD part of your branch protection</li>
<li>You cannot source control your pipeline definitions and review them via a PR</li>
</ul>
<p>These reasons alone should be enough to make you want to move to Git from TFVC.</p>
<h2 id="so-how-can-i-migrate">So how can I migrate?</h2>
<p>You have three basic options to migrate from TFVC to Git:</p>
<ul>
<li>&lsquo;Tip&rsquo; migration: This is the simplest, you just migrate the latest version of your code to a new Git repository. This is the quickest and easiest, but you lose all the history of your code.</li>
<li><a href="https://learn.microsoft.com/en-us/azure/devops/repos/git/import-git-repository?view=azure-devops">Azure DevOps Importer</a>: This is a tool that can be used to import a TFVC repository into a new Git repository, with the last 180 days of history. Why you would want neither none of the history or all of the history has always been beyond me!</li>
<li><a href="https://github.com/git-tfs/git-tfs">Git TFS</a>: A command line extension for Git that can be used to migrate a TFVC repository to a new Git repository, with all the history. A powerful and flexible tool, but it can be complex to use, and is &lsquo;brittle&rsquo; in that it can fail if the TFVC repository has a complex history of branching and renames.</li>
</ul>
<p>I would always favour the first option. It is the simplest and quickest, and you can always keep the old TFVC repository around for historical purposes. Also remember Git is not TFVC, so what is a good structure in TFVC might not be the best in Git, so you might want to take the opportunity to restructure your codebase.</p>
<p>The other important factor to consider in any migration is that of training. You need to make sure your team is comfortable with Git <strong>before</strong> you start the migration. This is not just about the commands, but also the concepts of distributed source control, and the different branching and merging strategies that Git enables.</p>
<p>A TFVC to Git migration will be a major change and should be considered as a project in its own right, with planning, training, pilot studies as well as the main migration itself. But remember you don&rsquo;t have to move all your TFVC source control to Git at once, you can do it incrementally, maybe as you start a new version of a product.</p>
<h2 id="summary">Summary</h2>
<p>So if you are still using TFVC I urge you to consider migrating to Git. It is not as hard as you might think, and the benefits are numerous.</p>
<p>Happy to discuss this further, please reach out to me via the usual channels</p>
]]></content:encoded>
    </item>
    <item>
      <title>Bit rot is killing my pipelines</title>
      <link>https://blog.richardfennell.net/posts/bit-rot-is-killing-my-pipelines/</link>
      <pubDate>Wed, 26 Apr 2023 00:00:00 +0000</pubDate>
      <guid>https://blog.richardfennell.net/posts/bit-rot-is-killing-my-pipelines/</guid>
      <description>&lt;p&gt;In a modern hybrid cloud world we have to accept constant change as the norm. You can&amp;rsquo;t just build something and forget about it. You have to keep it up to date as newer tools/libraries appear. This is to at least address security issues, even if you don&amp;rsquo;t want to adopt the new features.&lt;/p&gt;
&lt;p&gt;So I am expecting a degree of maintenance work on my Azure DevOps pipelines. However, this is becoming more awkward as many of the tasks used by Azure Pipelines, even ones from Microsoft, are themselves not being maintained.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>In a modern hybrid cloud world we have to accept constant change as the norm. You can&rsquo;t just build something and forget about it. You have to keep it up to date as newer tools/libraries appear. This is to at least address security issues, even if you don&rsquo;t want to adopt the new features.</p>
<p>So I am expecting a degree of maintenance work on my Azure DevOps pipelines. However, this is becoming more awkward as many of the tasks used by Azure Pipelines, even ones from Microsoft, are themselves not being maintained.</p>
<p>As well as tasks that are running out of date versions of underlying tools, there also seems to be no end of them that when run report the following warning. A classic sign of a lack of maintenance as this guidance is a few years old:</p>
<pre tabindex="0"><code>##[warning]Task &#39;Some task&#39; (1.2.3) is using deprecated task execution handler. The task should use the supported task-lib: https://aka.ms/tasklib
</code></pre><p>Because of this lack of maintenance, I am becoming more reticent to use tasks from the Azure DevOps Marketplace, especially if they are not from maintainers I trust. Rather I am starting to favour using simple PowerShell or Bash scripts to do the work. So I can control the versioning of the underlying tools.</p>
<p>In the past I would have written my own custom tasks to provide these wrapper functions, but of late it does not seem worth the effort.</p>
<p>So of late, it seems an approach of writing scripts and including them, with the tools they run, via a <a href="https://learn.microsoft.com/en-us/azure/devops/pipelines/process/resources?view=azure-devops&amp;tabs=schema#define-a-repositories-resource">YAML Pipeline Repository Resource</a> is just easier.</p>
<p>Am I alone in this change of approach?</p>
]]></content:encoded>
    </item>
    <item>
      <title>Book Review - Code: The Hidden Language of Computer Hardware and Software</title>
      <link>https://blog.richardfennell.net/posts/code-the-hidden-language-of-computer-hardware-and-software/</link>
      <pubDate>Wed, 11 Jan 2023 00:00:00 +0000</pubDate>
      <guid>https://blog.richardfennell.net/posts/code-the-hidden-language-of-computer-hardware-and-software/</guid>
      <description>&lt;p&gt;Late last year at (DDDNorth](&lt;a href=&#34;https://twitter.com/dddnorth&#34;&gt;https://twitter.com/dddnorth&lt;/a&gt;) my session had the title &lt;a href=&#34;https://github.com/rfennell/Presentations&#34;&gt;&amp;lsquo;Why don&amp;rsquo;t people seem to be able to diagnose problems these days?&amp;rsquo;&lt;/a&gt;. Between anecdotes, a key theme was tha people too often don&amp;rsquo;t make sensible diagnostic steps. A problem caused, in my opinion, by the fact they have not been exposed to the fundamentals of how a computer works, due to the way computing is taught today, as opposed to how it was taught in my youth in the 80s&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>Late last year at (DDDNorth](<a href="https://twitter.com/dddnorth">https://twitter.com/dddnorth</a>) my session had the title <a href="https://github.com/rfennell/Presentations">&lsquo;Why don&rsquo;t people seem to be able to diagnose problems these days?&rsquo;</a>. Between anecdotes, a key theme was tha people too often don&rsquo;t make sensible diagnostic steps. A problem caused, in my opinion, by the fact they have not been exposed to the fundamentals of how a computer works, due to the way computing is taught today, as opposed to how it was taught in my youth in the 80s</p>
<p>So, I was really please to discover the 2nd Edition of Charles Petzold&rsquo;s book <a href="https://amzn.to/3XptzMs">Code: The Hidden Language of Computer Hardware and Software</a>.</p>
<p><img alt="Code: The Hidden Language of Computer Hardware and Software" loading="lazy" src="/images/rfennell/Petzold-Code.png"></p>
<p>This book covers exactly the journey I discussed. Starting with simple codes and electronics, building up to how a computer actually functions.</p>
<p>Highly recommended for anyone who wants to understand how a computer works, so to better diagnose problems.</p>
]]></content:encoded>
    </item>
    <item>
      <title>You need a license to touch that (revised 18 years on)</title>
      <link>https://blog.richardfennell.net/posts/you-need-a-license-to-touch-that-revised/</link>
      <pubDate>Mon, 05 Dec 2022 00:00:00 +0000</pubDate>
      <guid>https://blog.richardfennell.net/posts/you-need-a-license-to-touch-that-revised/</guid>
      <description>&lt;h1 id=&#34;you-need-a-license-to-touch-that-the-case-for-licensing-of-individuals-within-the-software-engineering-profession&#34;&gt;“You need a license to touch that!”. The case for licensing of individuals within the software engineering profession.&lt;/h1&gt;
&lt;blockquote&gt;
&lt;h2 id=&#34;background&#34;&gt;Background&lt;/h2&gt;
&lt;p&gt;Back in 2004 I completed my BSc Degree in Computer Science at Bradford University; only 20 years after I started. My year in industry got out of hand!&lt;/p&gt;
&lt;p&gt;One module I did involved me writing a paper on a legal area concerning computing. I chose to discuss licensing of engineers.&lt;/p&gt;
&lt;p&gt;Whilst at the &lt;a href=&#34;https://www.dddnorth.co.uk/&#34;&gt;DDDNorth&lt;/a&gt; community conference last weekend (Dec 2022) I got chatting on aspects of staff development, problem solving and training with a fellow MVP &lt;a href=&#34;https://twitter.com/MattVSTS&#34;&gt;Matteo Emili&lt;/a&gt; and I mentioned this paper I had written. We both thought it might be interesting to revisit it and see if it still held true, best part of 20 years on.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<h1 id="you-need-a-license-to-touch-that-the-case-for-licensing-of-individuals-within-the-software-engineering-profession">“You need a license to touch that!”. The case for licensing of individuals within the software engineering profession.</h1>
<blockquote>
<h2 id="background">Background</h2>
<p>Back in 2004 I completed my BSc Degree in Computer Science at Bradford University; only 20 years after I started. My year in industry got out of hand!</p>
<p>One module I did involved me writing a paper on a legal area concerning computing. I chose to discuss licensing of engineers.</p>
<p>Whilst at the <a href="https://www.dddnorth.co.uk/">DDDNorth</a> community conference last weekend (Dec 2022) I got chatting on aspects of staff development, problem solving and training with a fellow MVP <a href="https://twitter.com/MattVSTS">Matteo Emili</a> and I mentioned this paper I had written. We both thought it might be interesting to revisit it and see if it still held true, best part of 20 years on.</p>
<p>So enjoy, remembering this was originally written 18 years ago&hellip;</p></blockquote>
<h2 id="introduction">Introduction</h2>
<p>Throughout the history of science and technology there has been a trend in the development spectrum away from the gentleman amateur and towards the professional engineer. This report explores at which point on this spectrum Software Engineering currently lies and, if it is found to lie at the fully professional end, whether or not there is a need for licenses to practice.</p>
<h2 id="software-engineering-professionalism">Software Engineering Professionalism</h2>
<p>Computing in general, and software engineering in particular, is a young discipline. Its professional societies are only around 50 years old, the <a href="https://www.bcs.org/">BCS</a> was formed in 1957; it is now only reaching a point where it is not uncommon that when retiring, practitioners have had their whole career in the field.</p>
<p>Due to this relative youth the formal call for professionalisation is only recently being brought to the fore. This is not to say that people working in computing have not had the need to be professional - this has always been important - but since the mid 1990s, there has been serious talk of some formality, maybe even of a license to practice, as in other professions.
This debate can be seen at least as a sign of puberty, if not one of maturity, for the industry.</p>
<h2 id="what-are-the-real-benefits-of-licensing">What are the Real Benefits of Licensing?</h2>
<p>The key factor behind any call to licensing is one of public confidence. The license to practice provides a standard by which the purchaser of any service can see that a practitioner has met a minimum level of competence. This does not mean that they are a good Doctor or Accountant, bad practitioners still exist, but, if they do not maintain this standard, there are processes through which their license may be revoked.</p>
<h2 id="perception-of-the-computing-industry">Perception of the Computing Industry</h2>
<p>Currently such a position of public confidence is not enjoyed by the computing industry. The media coverage is usually concentrated on perceived-failing systems, such as the Swanwick Air Traffic Control Centre and the new NPfIT NHS records project (even before the project has really started). The media does not talk of computing success, it is not newsworthy.</p>
<p><img alt="Figure 1 [RL04]" loading="lazy" src="/images/rfennell/licensing-1.png"></p>
<p>This media slant is not unsurprising, given the project success rates shown in Figure 1. If this were figures in the Civil Engineering industry, would anyone be crossing bridges?</p>
<p>In fact, the route to licensing of Civil Engineering came from failing constructions such as bridges. Canadian engineering folk law [<strong>SM99a</strong>] has it that the iron used to make the rings given to graduating engineers comes from the collapsed Quebec City Bridge of 1907, as a reminder of their public duty. Licensing of engineers in Texas came about after a boiler explosion that killed 300 school children [<strong>SM99a</strong>].</p>
<p>Another factor in the perception of computing in many people’s eyes is that they say ‘I have a computer and use it OK, so how hard can this software thing be?’</p>
<p>This viewpoint is not limited to the ‘man in the street’, but also to many corporate managers.</p>
<p>A figure regularly reported at Microsoft conferences is that 70% of corporate development is done using the Visual Basic family of languages, commonly not by specialist programmers but by end users. These users have little knowledge of software engineering principles, and hence often produce initially functional but poorly maintainable or un-scalable systems. It is often the reliability of these systems that shape public perception of computing.</p>
<h2 id="is-there-need-for-universal-licensing">Is there need for universal licensing?</h2>
<p>Given these facts, would requiring all IT professionals to have a license be the right move? The answer has to be no.</p>
<table>
  <thead>
      <tr>
          <th>Discipline</th>
          <th>Licensed</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>Civil</td>
          <td>44%</td>
      </tr>
      <tr>
          <td>Mechanical</td>
          <td>23%</td>
      </tr>
      <tr>
          <td>Electrical</td>
          <td>9%</td>
      </tr>
      <tr>
          <td>Chemical</td>
          <td>8%</td>
      </tr>
      <tr>
          <td>All Engineering</td>
          <td>18%</td>
      </tr>
  </tbody>
</table>
<p><strong>Table 1: Percentage of licensed Engineering graduates in the US as of 1996</strong> [<strong>SM99a</strong>]</p>
<p>In other engineering professions only a small percentage of people are licensed [Table 1]. The remainder of the workforce are working towards licensing, or are responsible to a licensed engineer.</p>
<p>Given this data Steve McConnell suggest only 5-10% of software engineers need to be licensed, specifically those working on safety-critical systems [<strong>SM99b</strong>].</p>
<h2 id="a-move-to-licensing">A Move to Licensing</h2>
<p>In 1999 the Texas Society for Professional Engineers passed a resolution to license Software Engineers [<strong>LHW99</strong>]. The scheme was based on applicants providing nine references and meeting one of the following criteria:</p>
<ul>
<li>16 years’ engineering experience</li>
<li>12 years’ engineering experience, plus a bachelor’s degree from an accredited program.</li>
<li>6 years’ engineering experience, plus a PhD in engineering or related subject from a university with an accredited undergraduate program.</li>
</ul>
<p>In June 2001 the Canadian Engineering Accreditation Board (CEAB) accredited three degree programs [<strong>DLP02a</strong>] and instigated a licensing program with similar requirements to that in Texas.</p>
<h2 id="the-current-bcs-position">The Current BCS Position</h2>
<p>Currently there is no plan to license Software Engineers in the UK or the EU, only voluntary professional schemes are in place.</p>
<p>Historically the BCS had a membership system which provided a means to get an Engineering Council Charter Engineer (CEng) qualification. In 2002 the BCS underwent a radical restructure to provide a more outward-looking system in an aim to promote professionalism in the industry. The major change in the membership system was a new grade of Chartered Information Technology Professional (MBCS CITP) that sits along side the CEng qualification.</p>
<p>Initial results seem to show that the changes have been approved by the industry as ‘The British Computer Society has reported a 200% leap in membership applications since the launch of its new grading structure, - reports chief executive David Clarke’ [<strong>BCS04a</strong>]</p>
<p>There has also been a change in the culture at the BCS. At the West Yorkshire BCS branch AGM (25th May 2004) David Clarke the Chief Executive of the BCS gave an example of how, when he joined the BCS, there was no standard way for the public to ask it questions; they had been asked by a national newspaper for comments on the Home Secretary’s proposed ID card scheme. It had taken three weeks for his team to find a person willing to speak on the subject. Changes to the BCS now see it taking a more active role in advising bodies such as government committees on IT related issues [<strong>BCS04b</strong>]. This is a key area that a professional organisation must address in the current media-centric world.</p>
<p>For the foreseeable future the BCS is not making moves toward licensing, preferring certification based on internationally recognised products that it provides such as European Computer Driving License (ECDL) and the European Certification for IT Professionals (EUCIP).</p>
<h2 id="certification-as-an-alternative">Certification as an alternative</h2>
<p>Usually certification is not compulsory, unlike licensing, and is often vendor-led. Other than the BCS, the major certification schemes are from vendors such as Microsoft, Cisco and Novell.
Certification is well established, and aims to give all parties benefits; the customer knows the engineer has been trained, the vendor reduces their support calls due to engineer training, and the engineer gets a way to differentiate themselves from their competitors.</p>
<p>The problem is that such qualifications age rapidly - usually re-certification is required every 3 to 5 years as vendor products are dropped and new ones replace them. Also, some of the qualifications have become devalued due to ‘boot camps’  and ‘brain-dumps’ , passing the certification exams is often dependant on the students budget and ability to cram, not their fundamental knowledge of the subject.</p>
<p>Certification is a valuable tool to the industry, providing good specific product training, but not a replacement for good basic grounding provided by a degree or similar.</p>
<h2 id="has-licensing-worked-thus-far">Has licensing worked thus far?</h2>
<p>A view on the success or failure of licensing can be found in the ‘Communications of ACM’ [<strong>KK02</strong>]</p>
<blockquote>
<p>“…after four years, what has been the overall impact of software engineering licensing in Texas? In our view, the news is good: licensing had practically no effect…”</p></blockquote>
<p>The key factor cited in reviews of the state of licensing is the lack of a stable core of knowledge that a practitioner is required to study [<strong>KK02</strong>] [<strong>DLP02b</strong>]. In other engineering disciplines there is a well defined boundary between research science and engineering. For example if you wished to make TVs for the consumer market you could hire a physicist; they could make you a TV, but it would no doubt be expensive, unreliable but revolutionary. The normal practice would be to hire experienced electronics and production engineers, who would draw on the core knowledge of their fields, originated by research scientists, to make a suitable specified product on time and on budget.</p>
<h2 id="are-we-tackling-the-right-problem">Are we tackling the right problem?</h2>
<p>An interesting point of view is put forward by Pete McBreen in ‘Software Craftsmanship’, this again states the problems with lack of a stable core of knowledge, but highlights that ‘The concept of a single, responsible engineer signing off a complete work is not feasible for software’. [<strong>PM02a</strong>]. Software projects are just too large and complex and, unlike Civil Engineering building codes, there is no agreed legal standard to sign off against anyway.</p>
<p>McBreen goes on to propose that Software Engineering, not just licensing, fails not because of the lack of experience or skill, but due to the lack of personal responsibility. He argues that it is better to have a master-apprentice approach to software development, with a senior programmer taking juniors under their wing for a number of years, with their systems being developed and handed on like a prize heirloom - the EMACS product is held up as an example [<strong>PM02b</strong>].</p>
<p>This structure has its appeal. It seems to fit well with other professions, and while they may not be called master and apprentice similar structures occur in the legal, medical and accountancy professions. Though, interestingly, they appear less frequently in traditional engineering, where in many ways the personal craftsman’s responsibility has been replaced by a corporate regulation framework.</p>
<h2 id="is-licensing-round-the-corner">Is Licensing Round the Corner?</h2>
<p>Software engineering is not ready for universal licensing, the core body of knowledge is still growing too fast to allow any true foundation engineering degrees to be stabilised. It could reasonably be argued that this stabilisation may never occur, the rate of technology change and tre ihe huge variety of projects for which software is developed may defeat all efforts for universal standards for licensing. However, this does not mean that licensing may not appear in specialised areas, if they can be formalised to a sufficient degree. The most likely area is safety-critical systems.</p>
<p>In general, for the foreseeable future the industry will have to rely on voluntary membership of organisations such as the BCS and vendor certifications. This in effect means that the onus of good practice and professionalism falls, as always, on the shoulders of the individual. Maybe what is required is the personal responsibility of the gentleman amateur and craftsman to build the confidence of the general public rightly expects.</p>
<blockquote>
<h2 id="-and-18-years-on">.. And 18 years on</h2>
<p>So what has changed 18 years on, well not a lot that I can see. There is no clamour for licensing, our media only cover stories of failure, and projects of all sizes are still failing.</p>
<p>There is still no agreement on best practice, at least to the level required for licensing. IT is still just too fast moving, another week another framework, language or pattern.</p>
<p>We as individuals and teams are still, and always will be, responsible for our own actions, and we still have to strive to deliver high quality solutions that meet our client business needs.</p>
<p>What are the chances of a change in the next 20 years? Or will it become an irrelevance as we move to the use of more AI tools?</p>
<p>Maybe I will come back to this post around 2043 and see what has changed.</p></blockquote>
<h2 id="references">References</h2>
<table>
  <thead>
      <tr>
          <th>Code</th>
          <th>Details</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>BCS04a</td>
          <td>BCS Press Releases, “New BCS Membership Campaign Results in 200% Application Rise”, 20 September 2004</td>
      </tr>
      <tr>
          <td>BCS04b</td>
          <td>“Identity Cards”, BCS News Jan 2004 “Response from the British Computer Society regarding the call for statements to House of Commons Home Affairs Committee enquiry into Identity Cards”ResponseJan2004.htm</td>
      </tr>
      <tr>
          <td>DLP02a</td>
          <td>P96 “Licensing software engineers in Canada”: David Lorge Pamas, “Communications of the ACM” Volume 45 Issue 11 November 2002, ACM Digital Library</td>
      </tr>
      <tr>
          <td>DLP02b</td>
          <td>P98 “Licensing software engineers in Canada”: David Lorge Pamas, “Communications of the ACM” Volume 45 Issue 11 November 2002, ACM Digital Library</td>
      </tr>
      <tr>
          <td>KK02</td>
          <td>P95 “A Rice University perspective on software engineering licensing”: Ken Kennedy and Moshe Y. Vardi, “Communications of the ACM” Volume 45 Issue 11 November 2002, ACM Digital Library</td>
      </tr>
      <tr>
          <td>LHW99</td>
          <td>P27 “Licensing software professionals: where are we?”: Laurie Honour Werth “The proceedings of the thirtieth SIGCSE technical symposium on Computer science education”, 1999 ACM Digital Library</td>
      </tr>
      <tr>
          <td>PM02a</td>
          <td>P40 “Licensing is an attempt to solve the wrong problem”: Pete McBreen “Software Craftsmanship: The new imperative”, Addison Wesley 2002</td>
      </tr>
      <tr>
          <td>PM02b</td>
          <td>P66 “Being the Maintainer of an Application is a High-Status Position”: Pete McBreen “Software Craftsmanship: The new imperative”, Addison Wesley 2002</td>
      </tr>
      <tr>
          <td>RL04</td>
          <td>ARC220 - Slide 6, Rafel Lukawiecki, “New Developments in Microsoft Solutions Framework”, Microsoft TechEd Europe 2004 Post Conference DVD</td>
      </tr>
      <tr>
          <td>SM99a</td>
          <td>P56 “Need for Engineering”: Steve McConnell, “After the gold rush, creating a true profession of software engineering”, Microsoft Press 1999</td>
      </tr>
      <tr>
          <td>SM99b</td>
          <td>P103-104 “Stinking Badges, Licensing” : Steve McConnell, “After the gold rush, creating a true profession of software engineering”, Microsoft Press 1999</td>
      </tr>
  </tbody>
</table>
]]></content:encoded>
    </item>
    <item>
      <title>Ignite 2022 Azure DevOps &amp; GitHub Announcements - GitHub Advanced Security comes to Azure DevOps</title>
      <link>https://blog.richardfennell.net/posts/ignite-2022-azure-devops-and-github-announcements/</link>
      <pubDate>Wed, 12 Oct 2022 00:00:00 +0000</pubDate>
      <guid>https://blog.richardfennell.net/posts/ignite-2022-azure-devops-and-github-announcements/</guid>
      <description>&lt;p&gt;Today at &lt;a href=&#34;https://ignite.microsoft.com/&#34;&gt;Microsoft&amp;rsquo;s Ignite Conference&lt;/a&gt; there have been some very interesting announcements related to Azure DevOps and GitHub.&lt;/p&gt;
&lt;p&gt;In the recent past, I have seen confusion from our clients as to what is Microsoft&amp;rsquo;s recommended  DevOps solution, given they have both Azure DevOps and GitHub.&lt;/p&gt;
&lt;p&gt;It is true that Microsoft have said, and continue to say, that GitHub is the &amp;rsquo;north star&amp;rsquo; the long term destination for all users. However, that does not help clients today. Many of mine ask &amp;lsquo;but I am using Azure DevOps, but all Microsoft seem to talk about is GitHub, is Azure DevOps dead?&amp;rsquo;.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>Today at <a href="https://ignite.microsoft.com/">Microsoft&rsquo;s Ignite Conference</a> there have been some very interesting announcements related to Azure DevOps and GitHub.</p>
<p>In the recent past, I have seen confusion from our clients as to what is Microsoft&rsquo;s recommended  DevOps solution, given they have both Azure DevOps and GitHub.</p>
<p>It is true that Microsoft have said, and continue to say, that GitHub is the &rsquo;north star&rsquo; the long term destination for all users. However, that does not help clients today. Many of mine ask &lsquo;but I am using Azure DevOps, but all Microsoft seem to talk about is GitHub, is Azure DevOps dead?&rsquo;.</p>
<p>Well today&rsquo;s announcements in the conference session <a href="https://ignite.microsoft.com/en-US/sessions/8847d725-4863-4cea-961f-52e1df342709">&lsquo;Accelerate innovation with the world&rsquo;s most complete cloud developer platform&rsquo;</a> and the blog post <a href="https://devblogs.microsoft.com/devops/integrate-security-into-your-developer-workflow-with-github-advanced-security-for-azure-devops/">&lsquo;Integrate security into your developer workflow with GitHub Advanced Security for Azure DevOps&rsquo;</a> goes a long way to answering that question with a positive answer.</p>
<p>&lsquo;Cool features&rsquo; from GitHub Enterprise, specifically Code Advanced Security, are coming to Azure DevOps, along with other Azure DevOps specific investments. Thus greatly re-enforcing the &lsquo;better together&rsquo; story for Azure DevOps and GitHub, and that Azure DevOps has a future.</p>
<p>These changes could be taken two ways, depending on your position</p>
<ul>
<li>You could argue it makes it much clearer for both existing Azure DevOps and GitHub users to see their road-map, with both products sharing a common set of share services</li>
<li>Conversely you could argue it muddles the waters and slows the inevitable move to GitHub</li>
</ul>
<p>I suspect which position you take is dependent as to whether you are an Azure DevOps or GitHub Enterprise user.</p>
<p>If this is an area of interest, I will be talking more about these changes at Black Marble&rsquo;s next free webinar titled <a href="https://www.blackmarble.com/events/43">&lsquo;Which is best for me&hellip; GitHub, Azure DevOps, or Better Together?&rsquo;</a> on 26th October 2022.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Book Review &#34;Accelerate DevOps with GitHub&#34; by Michael Kaufmann</title>
      <link>https://blog.richardfennell.net/posts/book-review-accelerate-devops-with-github/</link>
      <pubDate>Sun, 04 Sep 2022 00:00:00 +0000</pubDate>
      <guid>https://blog.richardfennell.net/posts/book-review-accelerate-devops-with-github/</guid>
      <description>&lt;p&gt;The contents  of this book is not at all what I was expecting from the title ‘&lt;a href=&#34;https://www.amazon.com/Accelerate-DevOps-GitHub-software-performance-ebook-dp-B0B4DW7NSL/dp/B0B4DW7NSL/ref=mt_other?_encoding=UTF8&amp;amp;me=&amp;amp;qid=1660231179&#34;&gt;Accelerate DevOps with GitHub&lt;/a&gt;’. Usually books that aim to provide up to date walkthroughs for a specific current tools tend to not place them within the large tapestry of the ecosystem. This is not the case with this book from &lt;a href=&#34;https://github.com/wulfland&#34;&gt;Michael Kaufmann&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Each section is delivered in broadly three parts, which I found really effective&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>The contents  of this book is not at all what I was expecting from the title ‘<a href="https://www.amazon.com/Accelerate-DevOps-GitHub-software-performance-ebook-dp-B0B4DW7NSL/dp/B0B4DW7NSL/ref=mt_other?_encoding=UTF8&amp;me=&amp;qid=1660231179">Accelerate DevOps with GitHub</a>’. Usually books that aim to provide up to date walkthroughs for a specific current tools tend to not place them within the large tapestry of the ecosystem. This is not the case with this book from <a href="https://github.com/wulfland">Michael Kaufmann</a>.</p>
<p>Each section is delivered in broadly three parts, which I found really effective</p>
<ul>
<li>the history as to why we got to where we are</li>
<li>theory as to how we should use a process/technology</li>
<li>and what practical we can do to best adopt this practice with GitHub within our organisation.</li>
</ul>
<p>Taken all together it gives coherent examples of what does, and does not work, based on different teams sizes and common external/company constraints.</p>
<p>As with all books based on a technology stack, in this case GitHub, it is going to age quickly. Cloud based tools move on, walkthroughs become outdated. However, because of the emphasis this book places on background history and core theories as to why we use a technology, it will stand the test of time better than most.</p>
<p>So I think it is well worth a read, irrespective of your experience with DevOps and GitHub. There is something in it for any individual or company no matter where you are on your DevOps journey</p>
]]></content:encoded>
    </item>
    <item>
      <title>The importance of blogging - or how to do your future self a favour</title>
      <link>https://blog.richardfennell.net/posts/the-importance-of-blogging-or-how-to-do-your-future-self-a-favour/</link>
      <pubDate>Fri, 14 Jan 2022 10:34:33 +0000</pubDate>
      <guid>https://blog.richardfennell.net/posts/the-importance-of-blogging-or-how-to-do-your-future-self-a-favour/</guid>
      <description>&lt;p&gt;Yesterday, yet again, I was thankful for my past self taking time to blog about a technical solution I had found.&lt;/p&gt;
&lt;p&gt;I had an error when trying to digitally sign a package. On searching on the error code I came across my &lt;a href=&#34;https://blogs.blackmarble.co.uk/rfennell/2019/04/30/a-fix-for-error-signersign-failed-2146958839-0x80080209-with-signtool-exe/&#34;&gt;own blog post&lt;/a&gt; with the solution. This was, as usual, one I had no recollection of writing.&lt;/p&gt;
&lt;p&gt;I find this happens all the time. It is a little disturbing when you search for an issue and the only reference is to a post you made and have forgotten, so you are the defacto expert, nobody knows anymore on the subject, but better than having no solution.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>Yesterday, yet again, I was thankful for my past self taking time to blog about a technical solution I had found.</p>
<p>I had an error when trying to digitally sign a package. On searching on the error code I came across my <a href="https://blogs.blackmarble.co.uk/rfennell/2019/04/30/a-fix-for-error-signersign-failed-2146958839-0x80080209-with-signtool-exe/">own blog post</a> with the solution. This was, as usual, one I had no recollection of writing.</p>
<p>I find this happens all the time. It is a little disturbing when you search for an issue and the only reference is to a post you made and have forgotten, so you are the defacto expert, nobody knows anymore on the subject, but better than having no solution.</p>
<p>Too often I ask people if they have documented the hints, tips and solutions they find and the response I get is &lsquo;I will remember&rsquo;. Trust me you won&rsquo;t. Write something down where it is discoverable for your team and your future self. This can be any format that works for you: an Email, OneNote, a Wiki or the one I find most useful a blog. Just make sure it is easily searchable.</p>
<p>Your future self will thank you.</p>
]]></content:encoded>
    </item>
    <item>
      <title>My cancer story – thus far</title>
      <link>https://blog.richardfennell.net/posts/my-cancer-story-thus-far/</link>
      <pubDate>Mon, 23 Aug 2021 21:00:36 +0000</pubDate>
      <guid>https://blog.richardfennell.net/posts/my-cancer-story-thus-far/</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a somewhat different post to my usual technical ones…&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;In December 2017 I had major surgery. This was to remove an &lt;a href=&#34;https://www.cancerresearchuk.org/about-cancer/adrenal-gland-cancer/adrenal-cortical-cancer&#34;&gt;adrenal cortical carcinoma (ACC)&lt;/a&gt; that had grown on one of my adrenal glands and then up my inferior vena cava (IVC) into my heart.&lt;/p&gt;
&lt;p&gt;Early on I decided, though not hiding the fact I was ill, to not live every detail on social media. So, it is only now that I am back to a reasonable level of health and with some distance that I feel I can write about my experiences. I hope they might give people some hope that there can be a good outcome when there is a cancer diagnosis.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p><em>This is a somewhat different post to my usual technical ones…</em></p>
<p>In December 2017 I had major surgery. This was to remove an <a href="https://www.cancerresearchuk.org/about-cancer/adrenal-gland-cancer/adrenal-cortical-cancer">adrenal cortical carcinoma (ACC)</a> that had grown on one of my adrenal glands and then up my inferior vena cava (IVC) into my heart.</p>
<p>Early on I decided, though not hiding the fact I was ill, to not live every detail on social media. So, it is only now that I am back to a reasonable level of health and with some distance that I feel I can write about my experiences. I hope they might give people some hope that there can be a good outcome when there is a cancer diagnosis.</p>
<p>I had known I was ill for a good while before I was diagnosed in May 2017. I had seen my Parkrun times slowing week on week to the point where I could not run at all, and I had also had a couple of failed blood donations due to low haemoglobin levels.</p>
<p>It was clear I was unwell, and getting worse, but there was no obvious root cause. All sorts of things had been considered from heart to thyroid. Cancer was suspected, but a tumour could not be found. Try as they might, my GP had failed to find a test that showed anything other than my blood numbers were not right. I was just continuing to get weaker, by that spring I was unable to walk more than a few hundred meters without getting out of breath with my heart beating at well over 170 BPM.</p>
<p>The problem was that ACC is a rare form of cancer and mine had presented in a hard to find way. There are two basic forms of ACC. One shuts down your adrenal system, and you notice this very quickly. The other form shows no symptoms until the tumour starts to physically impact something. This was the form I had. In my case, the tumour was increasingly blocking blood flow in my IVC and heart.</p>
<p>In the end, the tumour was found because of a lower abdominal ultrasound. By the time I had the ultrasound scan it was about the only diagnostic that had not been tried. It was a strange mixture of shock and relief to be immediately told after the scan by the sonographer that ‘the doctor would like a word before you go home’. So, at least I knew the cause of why I felt so ill. I left the hospital that day with a diagnosis of an adrenal tumour that was most likely benign but may be malignant, on blood thinning injections and with a whole set of appointments to find out just how bad it was.</p>
<p>At this point the NHS did what it does best, react to a crisis. Over the next couple of weeks, I seemed to live at the regional cancer centre at St James Hospital in Leeds having all sorts of tests.</p>
<p>My health, and the time I was spending at the hospital, meant there was no way I could continue to work. I was lucky I was able to transition quickly onto long term sick in such a way that meant I did not have the financial worries many cancer patients have to contend with on top of their illness. I would not be seeing work again for over 9 months.</p>
<p>The next phase of diagnostic tests were wide ranging. Plenty of blood was taken, I had to collect my urine for 48 hours, there were CT scans and PET Scans, all to get a clearer idea of how bad it was. The real clincher test as to whether the tumour was benign or malignant was a biopsy. One of those strangely pain free tests, due to the local anaesthetics, but accompanied by much poking, pushing and strange crunching noises. Then a 6 hour wait flat on my back on a recovery ward before I could sit up, let alone go home.</p>
<p>It was whilst laying down post-test I had probably my best meal on the NHS. Having just missed the lunch service on the recovery ward, a good move from past experience, a nurse produced a huge pile of toast and jam. A perfect meal for the reclined patient.</p>
<p>It was also during this post test recovery time that I first met other cancer patients and had a chance to have a proper chat with them. No matter how bad your case seems to be you always seem to be meeting people with a worse prognosis. Whilst on the biopsy recovery ward I met a man who told me his story. A check-up because he did not feel well led to the discovery of a large brain tumour which then spread throughout his body. He knew he only had a short time left. The conversation opened my eyes to the reality of my and other patients’ situations.</p>
<p>A couple of weeks later we got the bad news that the cancer was malignant and very advanced. We had clung onto the hope it was benign. The news was delivered in a very matter of fact way, that I probably would not see Christmas unless a treatment plan could be found, and the options were not good. There were tears.</p>
<p>However, there was at least some good news, the tumour was a single mass, it had not spread around my body. The problem was that there was no obvious surgical option due to its size and position. All that could be done was to start chemotherapy to see if the tumour could be shrunk. So, a very ‘old school’, and hence harsh, three cycle course of chemotherapy was started in July 2017.</p>
<p>I dealt with all of this in a very step by step way. People seemed surprised by this, that I was not more emotionally in pieces. I assume that is just my nature. I think this whole phase of my illness was much harder on my partner and family. They had to watch me getting more ill with no obvious route to recovery. For me it was just a case of get up and doing whatever the tasks were for the day. Whether they be tests, treatments or putting things in place like a Lasting Power of Attorney.</p>
<p>Life became a cycle of three-day eight-hour blocks of chemotherapy, then a month to try to recover. On each cycle I recovered less than the previous one.</p>
<p>The chemotherapy ward is strangely like flying business class. The seats look comfortable, but after eight hours they are not. You can’t go to the toilet without issues, on an airplane it is getting out of the row, on the chemotherapy ward it is taking the drip with you. In both cases, the toilet is too small. You feel tired all the time, just like jet lag, and of course, the food is questionable at best.</p>
<p>As I had seen on other wards, there was a strong camaraderie on the chemotherapy ward. Everyone is going through life changing treatment. Some people looked very ill, others as if there is nothing obviously wrong with them, but irrespective of their condition I found the patients, as well as the staff, very supportive. It was far from an unhappy place. Not something I had expected.</p>
<p>In many ways the worst side effect of chemotherapy, beyond the expected weight loss, hair loss, nausea and lack of energy was that my attention span disappeared. For the first time in my adult life I stopped reading. I struggled to make it through a single paragraph without forgetting where I was. I remember one afternoon in a hospital waiting room, whilst waiting for yet more test results, trying to read a page in a novel. I never got to the end of the page, just starting it over and over. It was also at this time I realised I had to stop driving, I felt my attention was too poor and my reactions too slow.</p>
<p>As I said, by this point I was very weak. This made most day-to-day activities very hard, but the strange thing was I found I could still swim. I had had the theory that though my IVC was blocked, hence not bringing blood from the lower half of my body, if I swam with a pull-buoy just using my arms, I would be OK. This turned out to be correct, much to the surprise of the medical professionals. So, I started to do some easy swimming in the recovery phases between chemotherapy cycles when I was able. It turned out the biggest issue was I got cold quickly due to my weight loss. So, swim sessions were limited to 15 to 20 minutes and just a few hundred metres.</p>
<p>After the planned three chemotherapy cycles all the tests were rerun and it was found that the tumour seemed unaffected. It was always a very low chance of success. I had already decided I was unlikely to start a 4th cycle as I felt so ill, it was just no life. I did not want any more chemotherapy when the chance of success was so low. Better to have some quality of life before the end.</p>
<p>This is where I got lucky because I was being treated at a major cancer research centre. I had been told there was no adrenal cancer surgical option for the way my ACC had presented. However, the hospital’s renal cancer surgical team had seen something similar and were willing to operate with the support of the cardiac and vascular teams. A veritable who’s who of senior surgeons at St James as I was informed by the nurse when I was being admitted for the operation in December 2017.</p>
<p>My operation meant stopping the heart, removing the tumour along with an adrenal gland, and a kidney (collateral damage as there was nothing wrong with it other than its proximity to the tumour) and then patching me all back together. Over 10 hours on the operating table and a transfusion of a couple of pints of blood.</p>
<p>When you see a very similar version of your operation on the <a href="https://www.bbc.co.uk/programmes/b09m60sk">BBC series on cutting edge surgery ‘Edge of Life’</a> you realise how lucky you are. Just a few years ago or living in another city and the operation would not have been possible.</p>
<p>Given my heart had to be stopped, I was treated as a cardiac patient, and the cardiac department moves you through recovery fast. Most of the people on the ward were having heart bypasses, so I was &rsquo;the interestingly different&rsquo; case to many of the staff. I did take longer than the usual 5 days on the ward taken by bypass patients, but I still managed to get out of hospital in 10 days, in time for Christmas. It is surprising how fast you can get over being opened up from the top of your chest to your groin, and how little pain there was.</p>
<p>At this point I was in theory cured, the tumour was removed, blood was flowing again but I was very weak and recovery was going to be a long road. I started with walks of only a few minutes and then the rest of the day resting. The great news was that I could walk again without getting out of breath and my heart rate going through the roof.</p>
<p>So, over the next few months, I gradually regained my health, some weight, some hair and my attention span. I was able to ease back into work part time in the early summer of 2018.<br>
However, the surgery was not the end of my treatment. The surgeons were confident they had got all the tumour they could see. They said it was well defined, so cancerous and normal tissue could be differentiated, but there was always the chance of microscopic cancerous cells remaining. So, I was put on two years of Mitotane tablet-based chemotherapy. This was the treatment with the best evidence base, but that is not saying much. There are not that many research studies into ACC treatment options as it is so rare. My treatment plan was based on <a href="https://www.ncbi.nlm.nih.gov/pmc/articles/PMC6182924/">a small Italian and German study of 177 people</a>, most of which did not complete the plan, but it did show a statistically significant reduction in the chance of remission after 5 years.</p>
<p>Mitotane stops cell division and I had not realised how hard this would make my recovery and specifically regaining some fitness. I was OK for day to day living, but an activity like running was not possible. I twice started <a href="https://www.nhs.uk/live-well/exercise/couch-to-5k-week-by-week/">Couch to 5K</a> but had to give up as I could not progress beyond the walking stages.</p>
<p>The mental weight of everything did not catch up with me until a good year or so after surgery, by which time I was back at work and living a ‘normal’ life. Previously people had kept asking ‘how are you doing?’. As I said, I felt they expected me to be in pieces, and I was just going step by step. It is only when the main treatment stopped and life returned to normal that everything that had occurred hit me. A seemingly unrelated fairly small in the scheme of things family incident caused it all to come flooding back and completely stopped me in my tracks.</p>
<p>It was that this time I reached out to the support services of the <a href="https://www.macmillan.org.uk/">Macmillan</a> charity and specifically the <a href="https://www.leedsth.nhs.uk/a-z-of-services/leeds-cancer-centre/leeds-cancer-support/the-sir-robert-ogden-macmillan-centre/">Robert Ogden Centre at St James</a> for help. This was something I had not done prior to this time, though my partner had used their family support services earlier in my treatment. With their counselling help, I worked my way through my problems and got back to some form of normal.</p>
<p>In the autumn of 2019 I came off Mitotane and once it was out of my system I could at last try to get fit again. So, it was back to Couch to 5K and with a few repeated weeks I was able to run 5K again. I was back running Parkrun in November 2019. It was great to get back to my local Roundhay Parkrun community, though I had been volunteering whenever my health allowed throughout my illness. I was running much slower than before I was ill, but running.</p>
<p>Since then, I have to say Covid lockdown has helped me, giving me a structure to my training. I have certainly got a reasonable level of endurance back, but any speed seems to elude me.</p>
<p>I have always had a fairly high maximum heart rate, over 200 well into my 40s, and before getting cancer it was still in the 190s. Now, post illness, I struggle to reach 160 and my bike and run maximum heart rates are very similar. I have tried to do a maximum heart rate test, it is as if I get to a heart rate around 150-160 for a tempo run, but it barely goes any higher when I sprint. So, I have a question for anyone with experience of training after cancer and heart surgery. Is it expected after stopping the heart that my maximum heart rate should be way lower? Or is the problem my hormone levels are different due to the lack of one of my adrenal glands? Or is it just I am getting older and have just lost muscle mass? I am not sure I will ever know the answer to that one, it is not exactly a question the NHS is set up to answer. All their post-operative guidance is aimed at day-to-day levels of exertion not the elevated levels caused by sports.</p>
<p>But that is a minor gripe, I am reasonably fit again. I have recently completed my first triathlon in 5 years and between lockdowns walked the 268 miles of the Pennine Way with my partner. I am not as fast as I was, but I am 5 years older and have had major heart surgery. Hell, I am alive.</p>
<p>Like all cancer patients, this is not the end of the road for my treatment. I am still on steroids and have annual CT scans, but all the signs seem good that the surgery got the tumour and there is no reason I should not live to a ripe old age.</p>
<p>I would not have got here without the support of my partner and family, and the unbelievable work of the NHS and the support services I have used. I can’t thank you all enough.</p>
<p><a href="https://www.leedshospitalscharity.org.uk/Listing/Category/make-a-donation">Leeds Hospital Charity</a> - the charity of Leeds Teaching Hospitals<br>
<a href="https://donation.macmillan.org.uk/">Macmillan Cancer Support</a> - support or cancer patients and their families<br>
<a href="https://www.blood.co.uk/">NHS Blood Transfusion Service</a> – please consider giving blood, without regular donations surgery like mine is not possible.</p>
<h3 id="update-18-aug-2022">Update 18 Aug 2022</h3>
<p>I have just had my five year checkup at the Leeds Cancer Centre and I am pleased to say all is good, there are no signs of any reoccurrence of my cancer.</p>
<p>For my type of adrenal cancer, the statistics say if you survive to five years after treatment without problems, your reoccurrence risk levels fall back to the baseline level for the general population.</p>
<p>So, I am currently cancer free and my chances of a reoccurrence are no higher than that for the general population. This is a real success story, and I hope gives hope to others starting their cancer journey</p>
]]></content:encoded>
    </item>
    <item>
      <title>Where do I put my testing effort?</title>
      <link>https://blog.richardfennell.net/posts/where-do-i-put-my-testing-effort/</link>
      <pubDate>Thu, 17 May 2018 20:28:40 +0000</pubDate>
      <guid>https://blog.richardfennell.net/posts/where-do-i-put-my-testing-effort/</guid>
      <description>&lt;p&gt;In the past I have blog on the subject of &lt;a href=&#34;https://blogs.blackmarble.co.uk/rfennell/2013/02/26/for-those-hard-to-mock-moments-microsoft-fakes-or-typemock-isolator/&#34;&gt;using advanced unit test mocking tools to ‘mock the unmockable’&lt;/a&gt;. It is an interesting question to revisit; how important today are units tests where this form of complex mocking is required?&lt;/p&gt;
&lt;p&gt;Of late I have certainly seen a bit of a move towards using more functional style tests; still using unit test frameworks, but relying on APIs as access points with real backend systems such as DBs and WebServices being deployed as test environments.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>In the past I have blog on the subject of <a href="https://blogs.blackmarble.co.uk/rfennell/2013/02/26/for-those-hard-to-mock-moments-microsoft-fakes-or-typemock-isolator/">using advanced unit test mocking tools to ‘mock the unmockable’</a>. It is an interesting question to revisit; how important today are units tests where this form of complex mocking is required?</p>
<p>Of late I have certainly seen a bit of a move towards using more functional style tests; still using unit test frameworks, but relying on APIs as access points with real backend systems such as DBs and WebServices being deployed as test environments.</p>
<p>This practice is made far easier than in the past due to cloud services such as <a href="https://azure.microsoft.com/en-gb/">Azure</a> and tools to treat creation of complex environments  as code such as <a href="https://docs.microsoft.com/en-us/azure/azure-resource-manager/resource-group-overview">Azure Resource Manager</a> and <a href="https://azure.microsoft.com/en-gb/services/devtest-lab/">Azure DevTest Labs</a>. Both <a href="https://blogs.blackmarble.co.uk/rfennell/tag/devtest-labs/">myself</a> and my colleague <a href="https://blogs.blackmarble.co.uk/rhepworth/category/lability/">RIk Hepworth</a> have posted widely on  the provisioning of such systems.</p>
<p>However, this type of functional testing is still fairly slow, the environments have to be provisioned from scratch, or spun up from saved images, it all takes time. Hence, there is still the space for fast unit tests, and sometimes, usually due to limitations of legacy codebases that were not designed for testing, there is a need to still ‘mock the un-mockable’.</p>
<p>This is where tools like <a href="https://www.typemock.com/">Typemock Isolator</a> and <a href="https://docs.microsoft.com/en-us/visualstudio/test/isolating-code-under-test-with-microsoft-fakes">Microsoft Fakes</a> are still needed. </p>
<p>It has to be said, both are premium products, you need the top Enterprise SKU of Visual Studio to get Fakes or a Typemock Isolator license for Isolator, but when you have a need them their functionality they are the only option. Whether this be to <a href="https://blogs.blackmarble.co.uk/rfennell/2010/04/22/mocking-sharepoint-for-design-with-typemock-isolator/">mock out a product like SharePoint for faster development cycles</a>, or to provide a great base to write <a href="http://www.everydayunittesting.com/2014/09/from-legacy-code-to-testable-code-introduction.html">unit tests on for a legacy code base prior to refactoring</a>.</p>
<p><a href="https://blogs.blackmarble.co.uk/rfennell/2013/02/26/for-those-hard-to-mock-moments-microsoft-fakes-or-typemock-isolator/">As I have said before</a>, for me Typemock Isolator easily has the edge over Microsoft Fakes, the syntax is so much easier to use. Hence, it is great to see the Typemock Isolator being have further extended with updated versions for <a href="https://www.typemock.com/isolatorpp-product-page/">C++ and now Linux</a>.</p>
<p>So in answer to my own question, testing is a layered process. Where you put your investment is going to be down to your systems needs. It is true, I think we are going to all invest a bit more in functional testing on ‘cheap to build and run’ cloud test labs. But you can’t beat the speed of tools like Typemock for those particularly nasty legacy code bases where it is hard to create a copy of the environment in a modern test lab.</p>
]]></content:encoded>
    </item>
  </channel>
</rss>
