Browse our archives by topic…
Blog
Browse our blogs activity over the years…
Microsoft Fabric variable libraries: best practices guide
Variable libraries in Microsoft Fabric manage environment-specific configuration. Learn where you can use them and how to set safer defaults for Dev/Test/Prod.
The GenAI Reality Check: New Instrument, Same Orchestra
AI is like introducing a powerful new instrument to an orchestra. It creates possibilities that didn't exist before. But it still requires musicians who can read music, a conductor with a vision, rehearsal time, and the discipline to play together. An orchestra that lacks these fundamentals won't be saved by a new instrument — they'll just make new kinds of noise.
Ingesting SharePoint Data into Microsoft Fabric: Your Options
SharePoint isn't going away. This post compares five ways to ingest SharePoint data into Microsoft Fabric, with guidance on cost, complexity, and incremental loading.
AI Strategy: Think Top-Down, Experiment Bottom-Up
Top-down AI strategy and bottom-up experimentation both fail alone: leading organisations combine them to drive real business results.
SQLBits 2026: A Conference Recap
SQLBits is one of the largest data platform conferences in Europe. Here's a recap of my experience at SQLBits 2026, held at the ICC Wales.
Multi-layer Caching with the Decorator Pattern
Databricks SQL cold starts kill web API performance. Fix it with two-layer caching: Azure Blob Storage & IMemoryCache, using the Decorator pattern.
Fabric Performance Benchmarking - Spark versus Python Notebooks
Benchmarking Pandas, PySpark, Polars, and DuckDB on Microsoft Fabric: in-process Python engines run 4-5x cheaper and faster than Spark for common workloads.
Medallion Architecture in Excel
Apply the Medallion Architecture to Excel: use the three-tab rule to separate raw data, logic, and output for cleaner, maintainable spreadsheets.
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.
Returning to work after a career break, with help from remote work
After years away, I returned to work in the UK. Here's how remote flexibility protected my mental health and made that transition possible!
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 Part 5: Reqnroll in Build Pipeline
Integration testing Azure Functions with Reqnroll and C#. Part 5 covers running your Corvus.Testing specs in Azure DevOps and GitHub Actions pipelines.
Integration Testing Azure Functions Part 4: Reqnroll Configuration
Integration testing Azure Functions with Reqnroll and C#. Part 4 shows how to supply or override configuration values for the functions apps under test.
Integration Testing Azure Functions Part 3: Reqnroll hooks
Integration testing Azure Functions with Reqnroll and C#. Part 3 uses scenario and feature hooks to start functions apps and keep your BDD specs readable.
Integration Testing Azure Functions Part 2: Reqnroll step bindings
Integration testing Azure Functions with Reqnroll and C#. Part 2 uses Corvus.Testing step bindings to start and stop functions apps in your scenarios.
Integration Testing Azure Functions with Reqnroll Part 1: Introduction
Integration testing Azure Functions with Reqnroll and C#. Part 1 sets out the testing challenge and introduces the open-source Corvus.Testing library.
From Prompt Engineering to AI Programming: Enterprise GenAI Solutions
Shift from prompt engineering to AI programming by applying rigorous software engineering principles to your LLM integrations.
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.
Rx.NET v7 and Futures On .NET Live talk and demos
In a recent On .NET Live stream, Ian Griffiths talked about recent developments in Rx.NET and plans for v7 and future versions. This post explains where to find the demo code for that session.
T4 templates on modern .NET
T4 is a .NET-based templating language. It used to target just .NET Framework. It is now possible to use modern .NET runtimes, but it requires additional work. This post shows how to get it working.
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.
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.
Polars: Faster Pipelines, Simpler Infrastructure, Happier Engineers
We've migrated our own IP and several customers from Pandas and Spark to Polars. The benefits go beyond raw speed: faster test suites, lower platform costs, and an API developers actually enjoy using.