Andrew Wilson's Blog

{ ... Plan - Architect - Develop - Reflect - Improve - Repeat ... }

The Requirements Ambiguity Paradox

The Requirements Ambiguity Paradox With the context of software requirements, I regularly encounter an understood but often ignored scenario: the less detailed the initial requirements, the more expansive the client’s expectations become as the project progresses. It’s a phenomenon I refer to as the Requirements Ambiguity Paradox. Imagine initiating a project with a brief requirements document, aiming for agility and speed. At first glance, this seems efficient. However, this brevity often leads to divergent interpretations:

Automating Semantic Versioning in Azure DevOps CI/CD Pipelines with GitVersion

Overview Versioning is the unsung hero of software development—often overlooked but absolutely essential. Imagine trying to manage a project without a clear way to track changes, communicate updates, or ensure compatibility. Chaos, right? That’s where versioning steps in, providing structure and clarity. In this post, I’ll share how I streamline versioning in my projects by combining the power of Semantic Versioning (SemVer) with GitVersion, an automation tool that eliminates the manual effort of version management.

Bicep | Existing Resource Dependencies

Background The Bicep existing keyword is a powerful capability that allows us to reference a resource that wasn’t deployed as part of the current Bicep file. One of the typical use cases that I often see is where a resource is deployed as part of a module called by the parent template, the resource that was deployed as part of the module is then required later in the parent template and therefore an existing resource definition is used.

Logic App | Access Key Revocation and Regeneration

Overview In previous articles I have subtly referenced risks and best practices regarding HTTP triggered workflows and their use of Access Keys for security, such as: Some Potential Risks: If a Key is leaked, it can be used by anyone who obtains it to call your Logic App Workflow. If a Key has expired or been invalidated then services, applications, and or users who have not been provided a new key will cease to be able to invoke your workflow.

Logic App | Try-Catch Pattern, Nested Scopes, And Compensating Transaction Pattern

The Try-Catch Pattern Following the idea of defensive programming or as I like to call it for Logic Apps (being low code): defensive processing, it is considered good practice to wrap your workflows in a try-catch pattern to handle the unexpected. The pattern makes use of a mixture of Run After conditions and the Scope block. Run After Conditions | used to define the execution order based on the state of the previous action or scope Scope Block | provides the ability to group a series of actions.