Technology inventory

Every stack we work in, what we would modernise, and the legacy systems we still support. 211 current technologies · 16 legacy stacks

Technologies we work in

Everything below has been used on delivered work. Names marked with a note further down carry a modernisation route we would recommend before building anything new on them.

  • Storytelling
  • SaaS
  • Roslyn
  • Multistage LLM Chains
  • Angular
  • Sensor Data
  • SendBird
  • RabbitMQ
  • Node.js
  • Next.js
  • MariaDB
  • Large Language Models (LLMs)
  • Java
  • HTML5 Video
  • Hardware
  • CI/CD Pipelines
  • ChatGPT
  • Capacitor
  • Azure Logic Apps
  • AI Website Builders
  • .NET MAUI
  • Real Estate
  • Progressive Web Applications (PWAs)
  • PRINCE2
  • Pinia
  • ITIL
  • HubSpot
  • GitHub
  • Blazor
  • Azure Active Directory B2C (ADB2C)
  • Amazon Web Services (AWS)
  • Vuetify
  • SCSS
  • Quasar
  • OpenAI
  • Enterprise SaaS
  • DevExtreme
  • DevExpress
  • Computer Science
  • Azure
  • VPN
  • Stripe Checkout
  • SendGrid
  • Project Coordination
  • Product Roadmaps
  • Growth Strategy
  • Fintech
  • Entity Framework Core
  • Desktop App Development
  • Azure PaaS
  • Azure App Service
  • Artificial Intelligence (AI)
  • Windows Server
  • Stripe
  • SFTP
  • Redis
  • People Management
  • Message Bus
  • Matching Systems
  • Less
  • IT Security
  • Headless CMS
  • Enterprise Architecture
  • Anthropic
  • Training
  • Technical Design
  • Razor Pages
  • Product Owner
  • Mediator Pattern
  • Marketplaces
  • Google Analytics
  • Content Management Systems (CMS)
  • Client Coordination
  • Business Analysis
  • IT Project Management
  • CTO
  • Data Security
  • Data Privacy
  • Compliance
  • Windows Services
  • Web Scraping
  • Technical Leadership
  • Team Leadership
  • Startups
  • Software Development Management
  • Software Architecture
  • Social Media
  • Security & Compliance Awareness
  • Scrum Master
  • Scrum
  • Process Development
  • Fractional CTO
  • Domain-driven Design (DDD)
  • Cloud Architecture
  • B2B
  • ASP.NET Core
  • Systems Integration Planning
  • Solution Architecture
  • SEO Tools
  • Payment Gateways
  • Distributed Systems
  • Customer Relationship Management (CRM)
  • Credit Cards
  • Case Management
  • Azure Cloud Services
  • Application Modernization
  • Windows
  • Technology Evaluation & Platform Recommendation
  • Technical Requirements
  • Software Development Lifecycle (SDLC)
  • REST APIs
  • Project Management
  • NoSQL
  • Mobile
  • General Data Protection Regulation (GDPR)
  • Engineering Management
  • Database Architecture
  • Coaching
  • Agile Project Management
  • Advisory
  • Search Engine Optimization (SEO)
  • Minimum Viable Product (MVP)
  • Migration
  • Git
  • User Experience (UX)
  • System Design
  • System Architecture
  • Scalability
  • Payment APIs
  • MVC Design
  • Leadership
  • JSON
  • Database Schema Design
  • Web Architecture
  • Software Documentation
  • REST
  • Razor
  • CSS
  • Cloud Platforms
  • Cloud Migration
  • Bootstrap
  • ASP.NET
  • APIs
  • SQL
  • Agile Awareness / Phased Delivery
  • Web Development
  • Visual Studio
  • User Stories
  • User Profiles
  • Software Development
  • Full-stack Development
  • Front-end
  • Databases
  • Data Structures
  • Data Architecture
  • Back-end
  • Agile
  • Microsoft Excel
  • Code Review
  • Data Modeling
  • HTML5
  • Writing & Editing
  • Codex
  • Policy and governence
  • Vector Database
  • RAG
  • MCP
  • Agentic AI
  • AI Augmented Engineering
  • Azure Functions
  • Claude Code
  • .NET Aspire
  • Kubernetes
  • Microservices
  • Google Cloud Platform
  • Architecture Review
  • Technical Due Diligence
  • Caching
  • Performance Optimisation
  • API Integration
  • Storyblok
  • CQRS
  • Auth0
  • IoT (Internet of Things)
  • MQTT
  • Event-Driven Architecture
  • Stripe Connect
  • Dapr
  • AI Integration
  • RAG (Retrieval-Augmented Generation)
  • MCP (Model Context Protocol)
  • C4 Model
  • Azure DevOps
  • RavenDB
  • Azure SQL
  • Azure Cosmos DB
  • PHP
  • Entity Framework
  • WPF
  • React
  • Docker
  • Terraform
  • Azure Kubernetes
  • PostgreSQL
  • MySQL
  • SQL Server
  • MongoDB
  • JavaScript
  • TypeScript
  • Vue.js
  • C# / .NET

Modernisation notes

These are current technologies, not legacy ones. Each still carries a recommendation about the version, pattern or replacement we would move to, which is worth reading before a rebuild is scoped around it.

Kubernetes

Kubernetes is modern and widely adopted. Adoption requires investment in learning and operations. Start with managed Kubernetes services to reduce infrastructure burden, and begin with non-critical workloads to build experience. Containerise applications before migrating to Kubernetes; the platform assumes containerised workloads. Consider whether your scale and requirements justify Kubernetes complexity, or whether simpler alternatives would serve you better.

Microservices

Microservices is a modern but nuanced pattern. Migration from monoliths should be gradual: identify bounded contexts, extract services incrementally, and build operational capability over time. Don't migrate for its own sake; ensure you have the team size, deployment automation, and monitoring to support distributed systems. Many successful organisations use a mix of approaches, with microservices for areas that benefit and simpler architectures elsewhere.

Google Cloud Platform

GCP is modern and actively developed. Migration to GCP typically involves assessing which services match your needs, planning data migration, and gradually moving workloads. Google provides migration tools and programs to assist. Consider GCP alongside other cloud providers based on your technical requirements, existing skills, pricing models, and support needs. Multi-cloud strategies are increasingly common for avoiding vendor lock-in.

Architecture Review

Architecture Review is an ongoing practice, not a migration target. Establish regular review cadences for critical systems, conduct reviews at key decision points, and build review capabilities within your team. Consider external reviewers for independent perspective or specialised expertise. Document findings and track remediation to demonstrate progress over time.

Technical Due Diligence

Technical Due Diligence is a service, not a technology. Engaging due diligence depends on your role: buyers and investors commission assessments, while targets prepare for them. If expecting due diligence, proactively address obvious issues, organise documentation, and ensure key technical staff are available. If commissioning due diligence, select assessors with relevant domain expertise and clearly define what decisions the assessment will inform.

Caching

Caching is a fundamental technique that remains essential. Improving caching typically involves analysing current patterns, identifying high-value caching opportunities, and implementing appropriate solutions (Redis, Memcached, CDNs, or built-in framework caching). Start with the biggest bottlenecks: often a few well-placed caches provide most of the benefit. Ensure you have strategies for cache invalidation and warming.

Performance Optimisation

Performance Optimisation is an ongoing practice, not a one-time migration. Establish baselines by measuring current performance, set targets based on business needs and industry benchmarks, and implement changes incrementally. Focus on high-impact improvements first: often a small number of issues cause most of the problems. Build performance monitoring into your development process to catch regressions early.

API Integration

API Integration is an essential skill, not a product to migrate to or from. Improving integration capabilities typically involves standardising approaches (using consistent authentication, error handling, and documentation), implementing proper monitoring, and building reusable integration components. Consider integration platforms (like Azure Logic Apps or Zapier) for common scenarios, and custom development for complex requirements.

Storyblok

Storyblok is modern and growing in adoption. Migration typically involves defining content models, importing existing content, and building front-end integrations. Storyblok provides migration tools and extensive documentation. Consider Storyblok when evaluating headless CMS options, particularly if the visual editing experience is important to your content team.

CQRS

CQRS is a pattern, not a product, so adoption involves architectural decisions rather than tool installation. Start by identifying if your application genuinely benefits from the separation: complex queries, performance bottlenecks, or scaling challenges are good indicators. Implement incrementally, perhaps starting with a single bounded context. Be prepared for increased complexity in synchronising read and write models, and ensure your team understands the trade-offs.

Auth0

Auth0 is modern and actively developed. Migration to Auth0 typically involves configuring the platform, integrating its SDKs, and migrating existing user accounts. Auth0 provides tools for bulk user import. Migration away is possible but requires careful planning around user credentials and session management. Consider Auth0 when building new applications or when existing authentication becomes a maintenance burden or security concern.

IoT (Internet of Things)

IoT is a broad, growing field rather than a single technology. Success depends on clear business objectives, appropriate technology choices, and realistic expectations about complexity. Start with pilot projects to prove value before scaling. Consider security from the beginning: IoT devices can be vulnerable, and breaches can have physical consequences. Build expertise gradually and leverage managed cloud services where possible.

MQTT

MQTT is modern, with version 5.0 being current. Adoption involves setting up an MQTT broker (Mosquitto, EMQX, or cloud services like AWS IoT Core) and implementing clients on your devices. If using older MQTT versions, consider upgrading to 5.0 for improved features. Migration typically happens when standardising IoT communication or moving from custom protocols to industry standards.

Event-Driven Architecture

Event-Driven Architecture is a modern pattern, not a specific product. Adoption requires choosing appropriate messaging infrastructure and designing events carefully. Start with clearly bounded use cases rather than trying to make everything event-driven at once. Consider the complexity trade-offs: EDA adds operational overhead and requires different debugging approaches. Success depends on good event design and clear ownership of event schemas.

Stripe Connect

Stripe Connect is modern and industry-leading. Migration to Connect typically happens when outgrowing simpler payment solutions or when entering marketplace territory. Existing Stripe users can add Connect capabilities incrementally. Migration away is rare and usually driven by specific regional requirements or pricing considerations. When evaluating, consider your geographic needs, expected transaction volumes, and the integration depth required.

Dapr

Dapr is modern and growing in adoption. Introducing Dapr typically involves running it alongside existing services and gradually migrating functionality to use Dapr building blocks. Start with new services or well-bounded existing services to gain experience. The sidecar architecture means adoption is incremental: you don't need to change everything at once. Consider Dapr when standardising microservices patterns or planning for multi-cloud flexibility.

AI Integration

AI Integration is a rapidly evolving field. Success depends on clear objectives, quality data, and realistic expectations. Start with pilot projects that can demonstrate value quickly, and build internal expertise gradually. Be prepared for ongoing investment: AI capabilities improve rapidly, so today's integration may need updating as better options become available. Focus on architectures that allow components to be upgraded without rebuilding entire systems.

RAG (Retrieval-Augmented Generation)

RAG is a modern pattern, not a product, so adoption involves choosing components: a vector database for storing document embeddings, an embedding model for converting text to vectors, and an AI model for generation. Cloud providers offer managed services that simplify implementation. Start with a well-defined use case and quality data; RAG is only as good as the documents it retrieves.

MCP (Model Context Protocol)

MCP is very new, released in late 2024. Adoption involves implementing MCP servers for your data sources and configuring AI clients to use them. The protocol is still evolving, so expect rapid improvements and expanding tool support. Early adopters should stay close to the specification and be prepared for updates. For organisations new to AI integration, MCP provides a more structured approach than ad-hoc solutions.

C4 Model

The C4 Model is modern and increasingly popular. Adoption typically involves agreeing on conventions with your team, choosing a diagramming tool (Structurizr, Mermaid, draw.io, or even whiteboards), and creating diagrams iteratively as systems evolve. There's no complex migration path; teams simply start using the approach for new documentation and gradually update existing diagrams when they become relevant.

Azure DevOps

Azure DevOps is modern and actively developed. Migration typically involves moving from older tools like Team Foundation Server (TFS), Jenkins, or fragmented toolchains. The platform provides import tools for migrating from TFS and supports gradual adoption, allowing teams to start with one service and expand over time. Consider Azure DevOps if consolidating development tools would improve visibility and reduce operational overhead.

RavenDB

RavenDB is modern, but less widely adopted than MongoDB or Cosmos DB. Migration may be considered if wider community support or cloud-hosted alternatives are preferred. Otherwise, it's a strong niche option for .NET-based projects.

Azure SQL

Azure SQL is modern. Migration away is typically unnecessary unless an organisation is moving to a different cloud provider or wants to consolidate on an open-source stack. In such cases, databases like PostgreSQL or MySQL may be alternatives, but Azure SQL is a strong long-term option for Microsoft-focused businesses.

Azure Cosmos DB

Cosmos DB is modern. Migration away would only occur if consolidating to a single database model or moving to another cloud provider. Its costs can be high, so organisations sometimes consider alternatives if budgets are constrained.

PHP

PHP remains current. Modernisation may involve upgrading to recent PHP versions, adopting a framework like Laravel for structure and security, and improving deployment (containers/CI). You'd move away only if consolidating stacks (e.g., standardising on .NET or Node) or if specific performance, language, or ecosystem needs are better met elsewhere.

Entity Framework

EF Core (the modern version) is current and widely supported. Migration is only needed if you are on older versions of EF Framework (pre-Core), where moving to EF Core improves performance, cross-platform support, and long-term viability. Alternatives like Dapper may be chosen for lightweight scenarios, but EF remains a mainstream option for .NET apps.

WPF

WPF remains viable. Modernisation often means upgrading to the latest .NET (e.g., .NET 8) and improving deployment via MSIX or ClickOnce. Consider moving away only if your strategy shifts to cross-platform or web delivery; in that case, evaluate web apps (React/Vue) or cross-platform frameworks like .NET MAUI or Electron depending on requirements.

React

React is modern. Modernisation focuses on staying current with React versions, improving performance (code splitting, modern bundlers), and ensuring accessibility. You'd only move away if a simpler solution meets the need (e.g., a tiny widget) or if a team standardises on another framework for strategic reasons.

Docker

Docker is modern and foundational to cloud-native development. If not yet using containers, consider starting with Docker for local development before expanding to orchestration. Migration typically involves containerising existing applications incrementally.

Terraform

Terraform is modern and widely adopted. Consider it if currently managing infrastructure manually or through provider-specific tools. Migration typically involves importing existing resources and gradually adopting IaC practices.

Azure Kubernetes

AKS is modern and actively developed. Migration considerations typically involve moving from self-managed Kubernetes or other cloud providers. AKS simplifies operations but requires understanding of Kubernetes concepts. For teams new to containers, consider starting with simpler Azure services before adopting AKS.

PostgreSQL

PostgreSQL is modern. Migration may be considered if organisational standards mandate another database, or if a simpler solution suffices. For most cases, PostgreSQL is a future-proof choice with growing adoption across industries.

MySQL

MySQL is modern and reliable. Migration may be considered to alternatives like PostgreSQL if advanced SQL features, strict standards compliance, or licensing models become important. For cloud workloads, consider managed MySQL offerings to reduce operational effort.

SQL Server

SQL Server is actively maintained, but modernisation may be needed if you're on older versions. Migrating to Azure SQL (cloud-managed) or upgrading to the latest on-premises release reduces infrastructure overhead, increases performance, and improves security. Migration away entirely might be considered if licensing costs are high or if a cross-platform, open-source alternative better suits the organisation's needs.

MongoDB

MongoDB is modern. Migration might occur if strict relational guarantees are required or if an organisation wants to standardise on SQL databases. Otherwise, MongoDB continues to be a leading option for flexible, large-scale systems.

JavaScript

JavaScript itself is not outdated, but older styles of writing it can be. Modernising typically means adopting current language features, improving build pipelines, and introducing TypeScript for reliability at scale. Migration "away" only makes sense if your product's needs are purely native mobile or a platform where web tech isn't suitable.

TypeScript

TypeScript is modern and widely adopted. "Migration away" isn't generally necessary; instead, consider gradual adoption if you're currently on plain JavaScript, or streamline your type definitions if things feel heavy. The only reason to remove TypeScript would be a very small, quick script where formal types add overhead without benefits.

Vue.js

Vue itself is modern. If you're on Vue 2, consider upgrading to Vue 3 to benefit from performance, long-term support, and improved TypeScript integration. Migration "away" is rarely necessary unless organisational standards require a different framework; focus instead on keeping dependencies current and components well-structured.

Legacy technologies

We still support these, and we have moved production systems off them. Each entry carries the route we would take, and the delivered work that took it.

VB.NET

Legacy

The Visual Basic language targeting .NET, still present in older line of business applications.

How we move off it

Visual Basic no longer receives new language features. C# is the usual target when rewriting.

IdentityServer 4

Legacy

An OpenID Connect and OAuth 2.0 framework for .NET, used to issue tokens for APIs and applications.

How we move off it

IdentityServer 4 is out of support. Duende IdentityServer is the maintained successor.

ASP.NET Web Forms

Legacy

The event driven page model from early ASP.NET, still found in older enterprise applications.

How we move off it

Blazor or ASP.NET Core MVC are the usual targets when replacing Web Forms.

jQuery UI

Legacy

A widget and interaction library built on jQuery, found in older web applications.

How we move off it

Modern component libraries or native browser APIs are the better choice for new work.

TFS

Legacy

Team Foundation Server, Microsoft's older source control and work tracking server.

How we move off it

Azure DevOps Server and Azure Repos are the current equivalents.

FTP

Legacy

A long-standing protocol for transferring files between systems, now usually replaced by secure alternatives.

How we move off it

Use SFTP or FTPS instead. Plain FTP sends credentials and file contents in the clear.

Vuex

Legacy

The original state management library for Vue 2 applications.

How we move off it

Pinia is the recommended store for new Vue 3 work.

.NET Framework

Legacy

The original Windows-only .NET runtime and class library, still in use across older enterprise applications.

How we move off it

New work should target .NET 8 or later. Existing Framework applications can usually be ported in stages rather than rewritten.

BizTalk Server

Legacy

BizTalk Server is Microsoft's enterprise integration platform for connecting different business systems, automating workflows, and transforming data between formats. It handles scenarios where multiple applications need to exchange information: ERP systems talking to suppliers, financial systems processing transactions, or healthcare systems sharing patient data. BizTalk provides adapters for various protocols and systems, orchestration for complex workflows, and tools for mapping data between formats. For non-technical readers, BizTalk acts as a central hub that allows different business systems to communicate. When your order system needs to update inventory, notify shipping, and trigger billing, BizTalk can coordinate these steps automatically, handling the technical details of talking to each system in its own language. BizTalk has been a cornerstone of enterprise integration for two decades. However, BizTalk Server 2020 is the final version; Microsoft is not developing new releases and recommends migration to Azure Integration Services for new projects.

How we move off it

BizTalk Server 2020 is the final version. Microsoft recommends migrating to Azure Integration Services, which provides modern equivalents: Logic Apps for workflows, Service Bus for messaging, API Management for APIs, and Functions for custom code. Migration requires careful planning: map existing integrations to Azure equivalents, prioritise based on business criticality, and migrate incrementally. Microsoft provides migration guidance and tools, but expect significant effort for complex deployments.

SpecFlow

Legacy

SpecFlow was a popular behaviour-driven development (BDD) framework for .NET that allowed teams to write automated tests in plain language using Gherkin syntax (Given-When-Then). It bridged communication between business stakeholders and developers by expressing requirements as executable specifications. Tests written in natural language served as both documentation and automated verification. For non-technical readers, SpecFlow made it possible to write test scenarios in everyday language that both business people and developers could understand. Instead of technical test code, you'd write statements like "Given a customer with items in their basket, when they proceed to checkout, then they should see a payment form." The framework then executed these statements automatically. In December 2024, SpecFlow was officially deprecated by its maintainers. The project has been succeeded by Reqnroll, a community-driven fork that continues development with the same functionality and an easy migration path.

How we move off it

SpecFlow was deprecated in December 2024. Migration to Reqnroll is recommended and straightforward: Reqnroll maintains compatibility with SpecFlow syntax and provides migration tooling. Most projects can migrate with minimal changes. Plan your migration soon to avoid accumulating technical debt on an unsupported framework and to benefit from ongoing improvements in Reqnroll.

ASP.NET Web API

Legacy

ASP.NET Web API is a Microsoft framework designed to build HTTP-based APIs—interfaces that other applications can call to exchange data. Instead of rendering HTML pages for people, Web API returns structured data (for example JSON) for apps, websites, or mobile clients to consume. It was widely adopted by enterprises moving toward service-oriented and microservice architectures in the 2010s. Web API encouraged clear resource-based endpoints (e.g., "/customers/123") and worked hand-in-hand with security standards, versioning strategies, and documentation tools. It ran on the Windows-only .NET Framework, often alongside ASP.NET MVC for the human-facing parts of a site. Many corporate systems still rely on it today to connect front-end apps, mobile apps, and partner integrations.

How we move off it

The modern successor is ASP.NET Core minimal APIs and controllers on .NET 6/8. Migrating unlocks much higher performance, cross-platform hosting, and the latest security and observability features. Remaining on legacy Web API increases technical debt and can make recruiting harder. A staged approach—standing up new endpoints in ASP.NET Core while keeping legacy ones running—lets you modernise safely without a "big bang" rewrite.

Silverlight

Legacy

Silverlight was a Microsoft browser plugin technology for delivering rich, app-like experiences on the web at a time when browsers lacked modern capabilities. It enabled video, animation, and sophisticated user interfaces inside the browser using XAML and C#. In its era it powered streaming media and internal business tools that needed more than basic web pages could provide.

How we move off it

Silverlight is end-of-life and unsupported by current browsers. Migration is strongly recommended to modern web standards (HTML5/JavaScript/TypeScript with frameworks like React or Vue) or to desktop alternatives (WPF/.NET) depending on the use case. Continuing on Silverlight creates security, compatibility, and staffing risks and blocks future improvements.

VB6

Legacy

VB6 is a legacy Microsoft programming environment for building Windows desktop applications, popular in the late 1990s and early 2000s. It provided a visual drag-and-drop way to design screens and a simple language for writing the logic. Many businesses created critical internal tools with it because it allowed rapid results with limited resources. While VB6 helped organisations digitise processes quickly in its time, it predates modern development practices, security expectations, and deployment models. Tooling and community support are now minimal, and running VB6 apps often requires older Windows environments or special compatibility layers.

How we move off it

VB6 is long out of support. Migration reduces security risk, unlocks modern integrations, and makes it far easier to hire developers. A common path is to rebuild in .NET (e.g., WPF for desktop or a web app) with a phased approach: re-platform the highest-value modules first, run both systems in parallel, and retire VB6 progressively to minimise disruption.

jQuery

Legacy

jQuery is a small JavaScript library that became popular for making websites interactive in the late 2000s and early 2010s. It smoothed over browser quirks and made common tasks—like showing/hiding elements, handling clicks, and making AJAX requests—much simpler with a concise, readable syntax. At a time when browsers behaved inconsistently, jQuery was a unifying layer that allowed developers to build rich experiences reliably and quickly.

How we move off it

Modern browsers have standardised, and frameworks like React, Vue, and native Web APIs now cover jQuery's use-cases with better structure and performance. For new projects, prefer modern frameworks or vanilla JavaScript. For existing jQuery code, migrate gradually by replacing widgets and introducing components where it delivers clear value.

ASP.NET MVC

Legacy

ASP.NET MVC is a web application framework from Microsoft that brought the Model-View-Controller pattern to the .NET world. In practical terms, it separates "what the app does" (models and controllers) from "how it looks" (views). That separation makes medium-to-large websites easier to organise, test, and evolve over time. It runs on the classic Windows-only .NET Framework and was the standard choice for many corporate intranets and public-facing sites throughout the 2010s. Developers used ASP.NET MVC to deliver server-rendered HTML pages, handle user input, talk to servers for fresh data, and can animate or customise the interface. It offered strong security features, robust routing of URLs, and a vast library ecosystem. Many successful, long-lived sites were built with it, and it set the stage for today's patterns in modern .NET web development.

How we move off it

ASP.NET MVC is in maintenance mode; new development has shifted to ASP.NET Core (on modern .NET). Migrating provides cross-platform hosting, significant performance gains, simpler cloud deployments, and access to new features. Over time, staying on legacy frameworks increases risk: fewer updates, shrinking talent pools, and higher operating costs. A phased migration—starting with APIs or critical modules—reduces disruption while gradually unlocking the benefits of ASP.NET Core.

Migration case studies

Have a specific technology requirement?

Get in touch to discuss your project needs.