Skip to content

Browse our blogs activity over the years…

  • Jan
  • Feb
  • Mar
  • Apr
  • May
  • Jun
  • Jul
  • Aug
  • Sep
  • Oct
  • Nov
  • Dec
  • Sun
  • Mon
  • Tue
  • Wed
  • Thu
  • Fri
  • Sat
2026
Design patterns in C# - The Facade Pattern

Design patterns in C# - The Facade Pattern

Carmel Eve

This blog is part of a series around design patterns. This post focuses on the facade pattern. The facade pattern provides an interface into a complex system, in order to simplify access to the functionality.
How do I know if my data solutions are accurate?

How do I know if my data solutions are accurate?

James Broome

Data insights are useless, and even dangerous (as we've seen recently at Public Health England) if they can't be trusted. So, the need to validate business rules and security boundaries within a data solution is critical. This post argues that if you're doing anything serious with data, then you should be taking this seriously.
The importance of specific & immutable dependency versions

The importance of specific & immutable dependency versions

Mike Evans-Larah

This post describes the reasons for choosing specific & immutable dependency versions in your software.
C# 8.0 nullable references: defeating the point with empty strings

C# 8.0 nullable references: defeating the point with empty strings

Ian Griffiths

Enabling C# 8's nullable references feature often produces a lot of warnings. Avoid the temptation to make some go away by initializing properties to empty strings.
Fix "You need permission to access workspace" in Azure Synapse

Fix "You need permission to access workspace" in Azure Synapse

Ed Freeman

Fix the "You need permission" error in Azure Synapse Analytics with this guide, addressing its causes and solutions for Data Engineers/Developers.
How to use the Azure CLI to manage access to Synapse Studio

How to use the Azure CLI to manage access to Synapse Studio

Ed Freeman

Assign roles in Synapse Studio for Azure Synapse Analytics devs using Azure CLI. Accessible by Owners/Contributors of the resource.
Design patterns in C# - The Decorator Pattern

Design patterns in C# - The Decorator Pattern

Carmel Eve

Investigate the decorator pattern in this blog post, a design pattern used to dynamically enhance object functionality.
GitOps: Not Just For Kubernetes!

GitOps: Not Just For Kubernetes!

James Dawson

GitOps — operations by pull request — isn't just for Kubernetes. See how the declarative, Git-as-source-of-truth model benefits any team managing infrastructure.
Public Health England Test & Trace Excel error: a one-step fix

Public Health England Test & Trace Excel error: a one-step fix

James Broome

Despite the subsequent media reporting, the loss of 16,000 Covid-19 test results at Public Health England wasn't caused by Excel. This post argues that a lack of an appropriate risk and mitigation analysis left the process exposed to human error, which ultimately led to the loss of data and inaccurate reporting. It describes a simple process that could have been applied to prevent the error, and how it will help if you're worried about ensuring quality or reducing risk in your own business, technology or data programmes.
Updating Microsoft Authenticator for a work or school account

Updating Microsoft Authenticator for a work or school account

Carmel Eve

Switching the Microsoft Authenticator App to a new phone for a work or school account requires updating your Security Info at office.com: here are the exact steps.
C# 8.0 nullable references: prepare today by not misusing 'as'

C# 8.0 nullable references: prepare today by not misusing 'as'

Ian Griffiths

Develop habits that smooth the path to C# 8.0 nullable references: starting with avoiding the common misuse of the 'as' operator. Use casts or pattern matching.
Does Azure Synapse Link redefine the meaning of full stack serverless?

Does Azure Synapse Link redefine the meaning of full stack serverless?

James Broome

Explore Azure Synapse Link for Cosmos DB's impact on 'full stack serverless', No-ETL, and pay-as-you-query analytics.
DevOps: Build Bridges not Silver Bullets

DevOps: Build Bridges not Silver Bullets

James Dawson

Building a system that solves even just 10% of a problem is a worthwhile endeavour, not just because of the value the 10% delivers but because its mere existence will lower the barrier-to-entry for your colleagues to collaboratively iterate on it - not so much 'Build it and they will come' as 'Build a road and they will come'
Design patterns in C# - The Adapter Pattern

Design patterns in C# - The Adapter Pattern

Carmel Eve

When legacy or external code doesn't fit your interfaces, the adapter pattern wraps it behind the expected API so your system can use it without modification.
Where are you going wrong when choosing to buy, not build?

Where are you going wrong when choosing to buy, not build?

Carmel Eve

Often when building software we need to outsource part of the solution to a third party. Common examples include authentication, payment, and email, but there are many others. When first designing a solution the decision around which provider to use can be difficult to tackle. At endjin we have developed a system for answering the question "which provider should I use?".
How to use Axios interceptors to poll for long running API calls

How to use Axios interceptors to poll for long running API calls

James Broome

Explore using Axios interceptors to streamline UI logic for async HTTP APIs, addressing long-running operations and client coordination efficiently.
SQL Notebooks for Azure Synapse SQL Pools & SQL on demand

SQL Notebooks for Azure Synapse SQL Pools & SQL on demand

Howard van Rooijen

Wishing Azure Synapse Analytics had support for SQL notebooks? Fear not, it's easy to take advantage rich interactive notebooks for SQL Pools and SQL on Demand.
Streamline .NET Dependency Management with NuGet Meta Packages

Streamline .NET Dependency Management with NuGet Meta Packages

James Dawson

Simplify dependency consumption & streamline integration with meta/virtual NuGet packages and tools like Dependabot.
ArrayPool vs MemoryPool—minimizing allocations in AIS.NET

ArrayPool vs MemoryPool—minimizing allocations in AIS.NET

Ian Griffiths

How we diagnosed unexpected allocations in AIS.NET, comparing ArrayPool<T> vs MemoryPool<T> to hit zero-allocation per-message GC targets in a .NET parsing library.
A simple System.CommandLine pattern with dependency injection

A simple System.CommandLine pattern with dependency injection

Carmel Eve

Explore building a command line tool with System.CommandLine packages, using dependency injection for quick and easy initialization.
C# 8.0 nullable references and serialization

C# 8.0 nullable references and serialization

Ian Griffiths

C# 8's nullable references feature can clash with common serialization techniques. This article shows how to deal with that.
A simple invite user flow for AAD B2C (without custom policies)

A simple invite user flow for AAD B2C (without custom policies)

James Broome

Explore an alternative "invite user" flow for Azure AD B2C, simplifying authentication without custom policies in SaaS applications.
C# 8.0 nullable references: when methods don't return

C# 8.0 nullable references: when methods don't return

Ian Griffiths

Explore the importance of DoesNotReturn & DoesNotReturnIf attributes in C# 8 nullable references, enhancing their long-standing role in C#.
Deploy an Azure Synapse Analytics workspace using an ARM Template

Deploy an Azure Synapse Analytics workspace using an ARM Template

Ed Freeman

Explore deploying Azure Synapse Analytics workspaces using ARM templates, a popular infrastructure deployment method for organizations.
Fully initialize types in C# constructor with async factory pattern

Fully initialize types in C# constructor with async factory pattern

Carmel Eve

Explore a pattern for async initialization, enabling readonly object construction & leveraging nullable references for fully instantiated classes.