Browse our archives by topic…
Editions
.NET Development
View all (369)
LINQ Max and nullable value types
LINQ's projecting Max operator has a trap for the unwary when used with value types. Understand what goes wrong, and how to avoid it.
Integration Testing Azure Functions with Reqnroll and C#, Part 5 - Using Corvus.Testing.ReqnRoll in a build pipeline
If you use Azure Functions on a regular basis, you'll likely have grappled with the challenge of testing them. In the final post in this series, we show how to ensure specs written using Corvus.Testing can run as part of your build pipeline.
Integration Testing Azure Functions with Reqnroll and C#, Part 4 - Controlling your functions with additional configuration
If you use Azure Functions on a regular basis, you'll likely have grappled with the challenge of testing them. In the fourth of this series of posts, we look at how configuration can be supplied from your tests to the functions apps being tested.
AI
View all (7)
AI-assisted coding is four decisions, not one
A simple mental model for making sense of the AI-assisted coding landscape: four layers, four decisions.
From Prompt Engineering to AI Programming: Building Enterprise-Ready Generative AI Solutions
Shift from prompt engineering to AI programming by applying rigorous software engineering principles to your LLM integrations.
What is Retrieval-Augmented Generation (RAG)?
What is RAG? Learn how RAG combines retrieval, augmentation & generation to ground GenAI responses in your data while reducing hallucinations & improving accuracy.
Analytics
View all (164)
What is Retrieval-Augmented Generation (RAG)?
What is RAG? Learn how RAG combines retrieval, augmentation & generation to ground GenAI responses in your data while reducing hallucinations & improving accuracy.
The Data Product Canvas: The Theory Behind The Canvas
The Data Product Canvas fuses the Business Model Canvas with Data Mesh's 'data as a product' principle, combining visual strategic collaboration with product-minded data ownership.
The Data Product Canvas in Action
See the Data Product Canvas in action with a real-world scenario. Follow along as we work through each building block to design a high-impact, feasible data product for a national garden center chain facing revenue challenges.
API
View all (18)
ASP.NET Core + Razor + HTMX + Chart.js
How to combine ASP.NET Core, Razor, and HTMX to power interactive Chart.js visualisations.
How to design APIs for Accessibility
Learn how accessibility-aware API design creates a great experience for all developers, not just those with accessibility needs.
Correctly configuring ASP.NET Core MVC authentication when hosting in Azure Container Apps
A short rundown of why you need the ForwardedHeadersMiddleware when using Azure Container Apps to host an ASP.NET Core MVC app requiring authentication
Apprenticeship
View all (61)
Guest Blog Post: Hello World! I'm Ray and I'm doing work experience.
Ray, a Year 10 student, spent a week at endjin doing work experience.
Retrospecting on my career at endjin
Liam joined endjin as part of the Software Engineering Apprenticeship 2021 cohort. In this post he looks back on his time at endjin before moving on.
Life as an Apprentice Engineer at endjin
Eli joined endjin as part of the Software Engineering Apprenticeship 2021 cohort. In this post she reflects on her first two years.
Architecture
View all (75)
The Data Product Canvas: The Theory Behind The Canvas
The Data Product Canvas fuses the Business Model Canvas with Data Mesh's 'data as a product' principle, combining visual strategic collaboration with product-minded data ownership.
The Data Product Canvas in Action
See the Data Product Canvas in action with a real-world scenario. Follow along as we work through each building block to design a high-impact, feasible data product for a national garden center chain facing revenue challenges.
The Data Product Canvas: Deep Dive into the Building Blocks
The Data Product Canvas has nine building blocks, best completed right-to-left starting with Audience and Actionable Insight, to keep data products purpose-driven and user-centred.
Automation
View all (6)
Power Query - Where can you use it? - Power BI
In this series of posts, we look at all the places where you can integrate Power Query as part of your data solutions. Here we look at Power BI.
Power Query - Where can you use it? - Microsoft 365
In this series of posts, we look at all the places where you can integrate Power Query as part of your data solutions. Here we look at Microsoft 365.
Using the Playwright C# SDK to automate 2FA authentication for AAD and MSA
Learn to configure AAD or MSA 2FA profiles for UI automation testing with Time-based One-Time Passwords.
Azure
View all (194)
Integration Testing Azure Functions with Reqnroll and C#, Part 5 - Using Corvus.Testing.ReqnRoll in a build pipeline
If you use Azure Functions on a regular basis, you'll likely have grappled with the challenge of testing them. In the final post in this series, we show how to ensure specs written using Corvus.Testing can run as part of your build pipeline.
Integration Testing Azure Functions with Reqnroll and C#, Part 4 - Controlling your functions with additional configuration
If you use Azure Functions on a regular basis, you'll likely have grappled with the challenge of testing them. In the fourth of this series of posts, we look at how configuration can be supplied from your tests to the functions apps being tested.
Integration Testing Azure Functions with Reqnroll and C#, Part 3 - Using hooks to start Functions
If you use Azure Functions on a regular basis, you'll likely have grappled with the challenge of testing them. In the third of a series of posts, we look at using classes in the Corvus.Testing library to run functions apps via scenario and feature hooks.
Azure Container Apps
View all (1)
Scaling API Ingestion with the Queue-of-Work Pattern
The queue-of-work pattern enables massive parallelism for API ingestion by breaking large jobs into thousands of independent work items processed by concurrent workers. This approach reduced data ingestion time for our use case from 15 hours to under 2 hours while providing automatic retry handling and fault tolerance at a fraction of the cost of traditional orchestration tools.
Azure Synapse Analytics
View all (54)
Scaling API Ingestion with the Queue-of-Work Pattern
The queue-of-work pattern enables massive parallelism for API ingestion by breaking large jobs into thousands of independent work items processed by concurrent workers. This approach reduced data ingestion time for our use case from 15 hours to under 2 hours while providing automatic retry handling and fault tolerance at a fraction of the cost of traditional orchestration tools.
Batch Processing Triggered Pipeline Runs in Azure Synapse
This post describes a pattern for batch processing triggered pipeline runs in Azure Synapse
Reliably refreshing a Semantic Model from Azure Data Factory or Synapse Pipelines
This post describes a pattern for reliably refreshing Power BI semantic models from Azure Data Factory or Azure Synapse Pipelines.
Big Compute
View all (28)
What is a Data Lakehouse?
What exactly is a Data Lakehouse? This blog gives a general introduction to their history, functionality, and what they might mean for you!
Azure Synapse Analytics: How serverless is replacing the data warehouse
Serverless data architectures enable leaner data insights and operations. How do you reap the rewards while avoiding the potential pitfalls?
Benchmarking Azure Synapse Analytics - SQL Serverless, using Polyglot Notebooks
New Azure Synapse Analytics service offers SQL Serverless for on-demand data lake queries. We tested its potential as a Data Lake Analytics replacement.
Big Data
View all (22)
Scaling API Ingestion with the Queue-of-Work Pattern
The queue-of-work pattern enables massive parallelism for API ingestion by breaking large jobs into thousands of independent work items processed by concurrent workers. This approach reduced data ingestion time for our use case from 15 hours to under 2 hours while providing automatic retry handling and fault tolerance at a fraction of the cost of traditional orchestration tools.
Polars Workloads on Microsoft Fabric
Polars now ships inside Microsoft Fabric by default. Here's how to use it alongside Fabric's other analytics tools and what that means for your data workflows.
Practical Polars: Code Examples for Everyday Data Tasks
Unlock Python Polars with this hands-on guide featuring practical code examples for data loading, cleaning, transformation, aggregation, and advanced operations that you can apply to your own data analysis projects.
Cloud
View all (11)
FabCon Vienna 2025: Day 3
FabCon is a conference dedicated to everything Microsoft Fabric. Day 3's sessions included migration, Databricks, Spark optimisation, and more.
FabCon Vienna 2025: Day 2
FabCon is a conference dedicated to everything Microsoft Fabric. Day 2 featured deep dives into OneLake, Maps in Fabric, and multi-agent AI systems.
FabCon Vienna 2025: Day 1
FabCon is a conference dedicated to everything Microsoft Fabric. Day 1 was mostly focused around the hundreds of new feature announcements.
Culture
View all (128)
Returning to Work After a Career Break: How Remote Work Made It Possible
After years away, I returned to work in the UK. Here's how remote flexibility protected my mental health and made that transition possible!
Guest Blog Post: Hello World! I'm Ray and I'm doing work experience.
Ray, a Year 10 student, spent a week at endjin doing work experience.
Retrospecting on my career at endjin
Liam joined endjin as part of the Software Engineering Apprenticeship 2021 cohort. In this post he looks back on his time at endjin before moving on.
Data
View all (110)
The Data Product Canvas: The Theory Behind The Canvas
The Data Product Canvas fuses the Business Model Canvas with Data Mesh's 'data as a product' principle, combining visual strategic collaboration with product-minded data ownership.
The Data Product Canvas in Action
See the Data Product Canvas in action with a real-world scenario. Follow along as we work through each building block to design a high-impact, feasible data product for a national garden center chain facing revenue challenges.
The Data Product Canvas: Deep Dive into the Building Blocks
The Data Product Canvas has nine building blocks, best completed right-to-left starting with Audience and Actionable Insight, to keep data products purpose-driven and user-centred.
Data Engineering
View all (49)
Scaling API Ingestion with the Queue-of-Work Pattern
The queue-of-work pattern enables massive parallelism for API ingestion by breaking large jobs into thousands of independent work items processed by concurrent workers. This approach reduced data ingestion time for our use case from 15 hours to under 2 hours while providing automatic retry handling and fault tolerance at a fraction of the cost of traditional orchestration tools.
Polars Workloads on Microsoft Fabric
Polars now ships inside Microsoft Fabric by default. Here's how to use it alongside Fabric's other analytics tools and what that means for your data workflows.
Practical Polars: Code Examples for Everyday Data Tasks
Unlock Python Polars with this hands-on guide featuring practical code examples for data loading, cleaning, transformation, aggregation, and advanced operations that you can apply to your own data analysis projects.
Data Storytelling
View all (1)
How to Build Mobile Navigation in Power BI
This is follow guide to designing a mobile navigation in Power BI, covering form, icons, states, actions, with a view to enhancing report design & UI.
Databricks
View all (10)
What is a Data Lakehouse?
What exactly is a Data Lakehouse? This blog gives a general introduction to their history, functionality, and what they might mean for you!
Notebooks in Azure Databricks
Azure Databricks Notebooks combine live code in Python, SQL, Scala, or R with visualisations and markdown. Here's how to set them up, attach clusters, manage libraries, and integrate them into ADF/Synapse pipelines.
Intro to Microsoft Fabric
Microsoft Fabric unifies data & analytics, building on Azure Synapse Analytics for improved data-level interoperability. Explore its offerings & pros/cons.
Dataverse
View all (3)
How to access multi-select choice column choice labels from Azure Synapse Link for Dataverse with PySpark or SQL
Learn how to access multi-select choice column choice labels from Azure Synapse Link for Dataverse using PySpark or SQL.
How to access choice labels from Azure Synapse Link for Dataverse with SQL
Learn how to access the choice labels from Azure Synapse Link for Dataverse using T-SQL through SQL Serverless and by using Spark SQL in a Synapse Notebook.
How to access choice labels from Azure Synapse Link for Dataverse with PySpark
Learn how to access the choice labels from Azure Synapse Link for Dataverse using PySpark.
DevOps
View all (35)
Adventures in Least Privilege: When an owner isn't an owner
A troubleshooting journey through Microsoft Entra ID that reveals the subtle but critical distinction between App Registration ownership and Service Principal ownership - and why it matters for least-privilege automation.
Supercharge Your Dev Containers on Windows
Running VS Code Dev Containers on Windows? Clone repos inside WSL filesystem to eliminate I/O bottlenecks and boost performance dramatically.
Polyglot Notebooks for Ops
Polyglot Notebooks' PowerShell support enhances IT Ops with robust, repeatable processes via 'executable documentation'.
DuckDB
View all (10)
Polars Workloads on Microsoft Fabric
Polars now ships inside Microsoft Fabric by default. Here's how to use it alongside Fabric's other analytics tools and what that means for your data workflows.
Practical Polars: Code Examples for Everyday Data Tasks
Unlock Python Polars with this hands-on guide featuring practical code examples for data loading, cleaning, transformation, aggregation, and advanced operations that you can apply to your own data analysis projects.
Under the Hood: What Makes Polars So Scalable and Fast?
Polars gets its speed from a strict type system, lazy evaluation, and automatic parallelism. Here's how each piece works under the hood.
Engineering Practices
View all (151)
AI-assisted coding is four decisions, not one
A simple mental model for making sense of the AI-assisted coding landscape: four layers, four decisions.
Integration Testing Azure Functions with Reqnroll and C#, Part 5 - Using Corvus.Testing.ReqnRoll in a build pipeline
If you use Azure Functions on a regular basis, you'll likely have grappled with the challenge of testing them. In the final post in this series, we show how to ensure specs written using Corvus.Testing can run as part of your build pipeline.
Integration Testing Azure Functions with Reqnroll and C#, Part 4 - Controlling your functions with additional configuration
If you use Azure Functions on a regular basis, you'll likely have grappled with the challenge of testing them. In the fourth of this series of posts, we look at how configuration can be supplied from your tests to the functions apps being tested.
Innovation
View all (34)
The Data Product Canvas: The Theory Behind The Canvas
The Data Product Canvas fuses the Business Model Canvas with Data Mesh's 'data as a product' principle, combining visual strategic collaboration with product-minded data ownership.
The Data Product Canvas in Action
See the Data Product Canvas in action with a real-world scenario. Follow along as we work through each building block to design a high-impact, feasible data product for a national garden center chain facing revenue challenges.
The Data Product Canvas: Deep Dive into the Building Blocks
The Data Product Canvas has nine building blocks, best completed right-to-left starting with Audience and Actionable Insight, to keep data products purpose-driven and user-centred.
Internet of Things
View all (14)
How to use SQL Notebooks to access Azure Synapse SQL Pools & SQL on demand
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.
ArrayPool vs MemoryPool—minimizing allocations in AIS.NET
Tracking down unexpected allocations in a high-performance .NET parsing library.
Talking about Azure Synapse on Microsoft Mechanics!
I was recently invited on to Microsoft Mechanics to talk about the new on-demand SQL Serverless offering within Azure Synapse. If you have been following along with my previous blog posts you will know that we've been hard at work applying Azure Synapse against real customer workloads. In the video I take you through the service by solving a real-world IoT problem for one of our telco customers.
Machine Learning
View all (28)
What is Retrieval-Augmented Generation (RAG)?
What is RAG? Learn how RAG combines retrieval, augmentation & generation to ground GenAI responses in your data while reducing hallucinations & improving accuracy.
What is a Data Lakehouse?
What exactly is a Data Lakehouse? This blog gives a general introduction to their history, functionality, and what they might mean for you!
Data and AI Engineering Maturity - Fix our problems before we hit the buffers
As data and AI become the engine of business change, we need to learn the lessons of the past to avoid expensive failures.
Microsoft Fabric
View all (36)
Scaling API Ingestion with the Queue-of-Work Pattern
The queue-of-work pattern enables massive parallelism for API ingestion by breaking large jobs into thousands of independent work items processed by concurrent workers. This approach reduced data ingestion time for our use case from 15 hours to under 2 hours while providing automatic retry handling and fault tolerance at a fraction of the cost of traditional orchestration tools.
Building data quality into Microsoft Fabric
Data quality issues are one of the biggest silent killers of analytics initiatives. This post explores how to build data quality into Microsoft Fabric from the ground up.
Top Features of Notebooks in Microsoft Fabric
Discover the top key features of notebooks in Microsoft Fabric.
Modern Compute
View all (3)
Modern Compute: Compute-Intensive Workloads
We have a wide range of computational mechanisms at our disposal, some of which emerged thanks to recent advances in AI. In this post, we look at the kinds of workloads that can take advantage of these.
Modern Compute: Unavoidable Practicalities
Thanks in part to recent advances in AI, we have a range of computational mechanisms at our disposal. However, certain universal truths apply to all of them.
After the AI Storm: Modern Compute
AI's current hype cycle has driven massive hardware investment. Even if AI disappoints, those hardware capabilities remain. What else can we do with them?
Open Source
View all (67)
Ix.NET v7.0: .NET 10 and LINQ for IAsyncEnumerable<T>
Ix.NET 7.0.0 is now available. Because .NET 10.0 now includes LINQ for IAsyncEnumerable, Ix.NET's System.Linq.Async has had to step back. This post explains what has changed and why.
Rx.NET v6.1 Now Available
Rx.NET 6.1 is now available, adding some useful new features.
Guest Blog Post: Hello World! I'm Ray and I'm doing work experience.
Ray, a Year 10 student, spent a week at endjin doing work experience.
OpenChain
View all (4)
Exploring OpenChain: From License Compliance to Security Assurance
Open-source software has become an essential part of many organisation's software supply chain, however, this poses challenges with license compliance and security assurance.
The OpenChain specification explained
When implementing OpenChain, understanding the specification will help guide your organisation to having processes in place to review and manage open-source software
What are the risks with open-source software?
The key risks associated with open-source software, from whether you use it minimally, to using it throughout all your systems.
Power BI
View all (78)
Top Features of Notebooks in Microsoft Fabric
Discover the top key features of notebooks in Microsoft Fabric.
Reliably refreshing a Semantic Model from Azure Data Factory or Synapse Pipelines
This post describes a pattern for reliably refreshing Power BI semantic models from Azure Data Factory or Azure Synapse Pipelines.
Reliably refreshing a Semantic Model from Microsoft Fabric Pipelines
This post describes a pattern for reliably refreshing Power BI semantic models from Microsoft Fabric Pipelines.
Python
View all (26)
Scaling API Ingestion with the Queue-of-Work Pattern
The queue-of-work pattern enables massive parallelism for API ingestion by breaking large jobs into thousands of independent work items processed by concurrent workers. This approach reduced data ingestion time for our use case from 15 hours to under 2 hours while providing automatic retry handling and fault tolerance at a fraction of the cost of traditional orchestration tools.
Polars Workloads on Microsoft Fabric
Polars now ships inside Microsoft Fabric by default. Here's how to use it alongside Fabric's other analytics tools and what that means for your data workflows.
Practical Polars: Code Examples for Everyday Data Tasks
Unlock Python Polars with this hands-on guide featuring practical code examples for data loading, cleaning, transformation, aggregation, and advanced operations that you can apply to your own data analysis projects.
Security and Compliance
View all (29)
Adventures in Least Privilege: When an owner isn't an owner
A troubleshooting journey through Microsoft Entra ID that reveals the subtle but critical distinction between App Registration ownership and Service Principal ownership - and why it matters for least-privilege automation.
No-code/Low-code is software DIY - how do you avoid DIY disaster?
No-code/Low-code democratizes software development with little to no coding skills needed. But how do you evaluate if software DIY is the right choice for you?
Exploring OpenChain: From License Compliance to Security Assurance
Open-source software has become an essential part of many organisation's software supply chain, however, this poses challenges with license compliance and security assurance.
Snowflake
View all (3)
Endjin is a Snowflake Partner
Snowflake is a cloud native data warehouse platform, that enabled data engineering, data science, data lakes, data sharing and data warehousing. Endjin are very excited to announce our partnership.
Snowflake Connector for Azure Data Factory - Part 2
Integrate Snowflake into your Azure Data Factory pipelines using custom Azure Functions. Learn how to load data and run queries in our detailed step-by-step guide.
Snowflake Connector for Azure Data Factory - Part 1
Explore the lack of a native Azure Data Factory connector for Snowflake and discover alternatives for integration between these popular platforms.
Spark
View all (5)
Writing structured data to SharePoint from Synapse Notebooks
This post describes an approach to write data to SharePoint from Synapse Notebooks.
Reading structured data from SharePoint in Synapse Notebooks
This post describes an approach to copy files and data from SharePoint into Azure using Synapse Notebooks.
Spark dev containers: packaging code for testability
Once you've thoroughly tested your code against the local Spark service in your dev container, you'll want to run it in a real Spark cluster. This posts shows how to deploy such code to Microsoft Fabric.
Startups
View all (15)
How to Monetize APIs with Azure API Management
Explore monetizing APIs with our guide. We offer strategies, videos, and code via Azure API Management to fast-track your business model.
10 ways working with Microsoft helped endjin grow since 2010
Microsoft recently shot a video interviewing endjin co-founder, Howard van Rooijen, and Director of Engineering, James Broome, about how Microsoft has helped endjin grow over the past decade. This posts the top 10 ways in which Microsoft helped - from providing access to valuable software and services, to opening up sales channels, to helping to navigate the minefield of UK Financial Services regulations around cloud adoption.
What makes a successful FinTech start-up?
In this post we discuss the characteristics of a great FinTech startup, and the importance of the API Economy to innovation in Financial Services.
Strategy
View all (74)
The Data Product Canvas: The Theory Behind The Canvas
The Data Product Canvas fuses the Business Model Canvas with Data Mesh's 'data as a product' principle, combining visual strategic collaboration with product-minded data ownership.
The Data Product Canvas in Action
See the Data Product Canvas in action with a real-world scenario. Follow along as we work through each building block to design a high-impact, feasible data product for a national garden center chain facing revenue challenges.
The Data Product Canvas: Deep Dive into the Building Blocks
The Data Product Canvas has nine building blocks, best completed right-to-left starting with Audience and Actionable Insight, to keep data products purpose-driven and user-centred.
UX
View all (25)
Learning from Disaster - A Creative Walkthrough of the Titanic Power BI Report
In Paul Waller's final, and posthumously published blog post, he takes you through a creative walk-through of the Titanic Power BI Report he created with Barry Smart.
How to Build Mobile Navigation in Power BI
This is follow guide to designing a mobile navigation in Power BI, covering form, icons, states, actions, with a view to enhancing report design & UI.
Power BI Images That Pop: A Guide to Intuitive, Easy-to-Maintain Reports
Explore integrating icons, pictograms and images into Power BI in the optimal way to enhance the user experience and minimise effort required to build and maintain reports.
Visualisation
View all (18)
Learning from Disaster - A Creative Walkthrough of the Titanic Power BI Report
In Paul Waller's final, and posthumously published blog post, he takes you through a creative walk-through of the Titanic Power BI Report he created with Barry Smart.
How to Build Mobile Navigation in Power BI
This is follow guide to designing a mobile navigation in Power BI, covering form, icons, states, actions, with a view to enhancing report design & UI.
Power BI Images That Pop: A Guide to Intuitive, Easy-to-Maintain Reports
Explore integrating icons, pictograms and images into Power BI in the optimal way to enhance the user experience and minimise effort required to build and maintain reports.