Content: subscriptions | Ecommerce: sales | Advertising: income

Modernising a 215k-Page Drupal Platform for a Russell Group University

About the customer

This Russell Group university runs one of the largest Drupal websites in UK higher education. The site serves prospective students, current staff, researchers and the wider public, pulling together course information, research outputs, staff profiles and general content into a single digital presence.

With over 215,000 pieces of content, 190,000 of which are research outputs, the technical demands on the platform are considerable. The site integrates with multiple upstream systems: Pure (Elsevier's research information management system) provides research outputs, projects and organisational data; a university-wide course and module management system supplies programme information; a Microsoft-based identity management system feeds staff profiles via Azure Active Directory and OpenID Connect; and further systems provide programme specifications and entry requirements. All of this data needs to flow into Drupal reliably and at scale.

university

The challenge

  • Complex data architecture
  • Editorial bottlenecks
  • Ageing infrastructure

The university's website had grown organically over several years. The underlying Drupal build followed many best practices, but the site had begun to outpace the tooling and processes around it.

Data from five separate external systems, including Pure, the course management system, the Microsoft identity platform, and programme specification and entry requirement databases, was being pulled into Drupal via custom PHP scripts and REST API calls. This approach was slow because each import required a full HTTP round trip, and it had known bugs. Fields that should have been direct entity references were instead storing external identifiers and performing lookups at runtime, creating unnecessary performance overhead on every page load.

For editors, the picture was just as difficult. The heavy use of the Paragraphs module made content edit pages extremely slow to load and render. There was no editorial workflow in place, meaning content couldn't be drafted, reviewed and approved before publication. The university wanted to devolve editing responsibilities to faculty teams but lacked the access controls and processes to do this safely.

On the infrastructure side, the codebase was spread across multiple repositories, making development slow and deployments manual. There was no continuous integration pipeline, limited automated testing, and the site was still running on PHP 8.0 with a Drupal 10 upgrade looming.

Our approach

  • Technical review
  • Collaborative delivery
  • Phased implementation

We started where we always start, by understanding the full picture. Our team reviewed every aspect of the Drupal build: configuration, data architecture, content types, code quality, security, performance, accessibility and disaster recovery. We didn't just write a report and hand it over. We worked alongside the university's in-house development team throughout, and they started implementing recommendations before the ink was dry.

The delivery was split into two phases, designed so the university could see progress quickly while we tackled the deeper structural work in parallel.

graduation

Devolved editing

Editorial workflows

Layout Builder

One of the university's main goals was to open up content management beyond the central digital team. Faculty staff needed to create and update their own content, but within guardrails that maintained quality and consistency.

We ran workshops with stakeholders across the university to map out how content flows from creation to publication. From those sessions we designed a role-based editorial workflow with four tiers, from content authors through faculty managers to publishers and administrators, each with carefully scoped permissions.

We implemented the Group and Content Access modules to create editing silos so faculty teams could only access their own content. The Workflow module introduced proper draft, review and approval states, along with scheduled publishing. Content versioning meant changes could be previewed and rolled back.

We replaced the sluggish Paragraphs-based editing interface with Layout Builder, giving editors a more visual page-building experience. Editorial pages that had previously taken several seconds to load became responsive and usable. Faculty teams could actually get on with managing their content.

Drupal Migrate framework

Entity references

Eliminated custom software

This was one of the biggest wins of the project. The university's data import process had relied on standalone PHP scripts that pushed content into Drupal via REST API. It was a bespoke system: slow, fragile, and an additional codebase that needed maintaining independently of the main site.

We converted every import process to use Drupal's core Migrate framework. This is an ETL system built into Drupal itself, defined in structured YAML configuration files, with a rich set of extraction, transformation and loading plugins.

The benefits landed straight away. Import performance improved because Migrate uses direct database access via Drupal's own APIs rather than HTTP network transfers. The entire standalone import codebase, a separate piece of software the university had been maintaining, was retired. Everything now lives inside the Drupal project, maintained by the same team, using the same tools and processes.

We converted the indirect field references to proper Drupal entity references too. Previously, when a research output page needed to display its associated researchers, the system would store identifiers from Pure and look them up at runtime, loading the relevant content on the fly for every page view. Now those relationships are resolved at import time by the Migrate framework, which handles the mappings between systems automatically. Page rendering got noticeably faster because the data is already linked, with no more uncached lookups on every request.

The Migrate framework also gave the university proper handling of deleted records, logging of successful updates, error reporting and migration statistics, none of which existed reliably in the old system.

Continuous integration

Automated testing

Cloud-ready infrastructure

The university's development workflow had been largely manual, with code tagging, releases and deployments all done by hand. The codebase was fragmented across multiple repositories, making even routine updates painfully slow. The university already used parts of the Azure cloud platform, so it made sense to bring the website into that world.

We consolidated everything into a single repository and built out a full CI/CD pipeline on Azure DevOps. Every pull request triggers automated test runs, visual regression tests via Backstop, coding standards checks and static analysis. Developers get fast feedback and the whole team has more confidence in the codebase.

We delivered staging environments on Azure, implemented a proper tagged release and deployment process, configured server-side cron for background operations like migrations, and set up Renovate for automated dependency updates.

We put in place the full groundwork for Azure production hosting: autoscaling containers that respond to CPU load, point-in-time database recovery for up to 35 days, versioned blob storage and a global CDN for the university's international audience. The architecture means the site can handle traffic spikes during clearing and results days without breaking a sweat.

Modern infrastructure

Empowered editors

Faster, more reliable platform

The university now has a Drupal platform that matches the ambition of a world-class research institution. Data imports that were previously slow and error-prone run faster and more reliably through Drupal Migrate, with an entire separate codebase eliminated in the process. Editors across faculties can manage their own content through proper workflows with quality controls baked in. Developers work with a clean, consolidated codebase backed by CI/CD and automated testing. And the Azure infrastructure is built to scale with demand, from routine daily traffic through to the peaks of clearing and results season.

What started as a technical review became a real change in how the university manages its digital presence. We worked as an extension of their in-house team, running workshops, pairing with developers, and making sure knowledge transferred at every stage. The internal team's willingness to run with recommendations straight away was one of the best things about the engagement.

Under the hood

Phase 1: Foundations and editorial experience

The first phase focused on stabilising the codebase and reworking the editorial experience. We consolidated the fragmented multi-repository setup into a single codebase, added per-environment configuration and implemented basic test coverage as patterns for the internal team to follow. Existing coding standards and static analysis issues were fixed across the codebase, cleaning up latent bugs and giving developers confidence going forward.

The Drupal 10 upgrade was reviewed and code compatibility brought forward to PHP 8.2. We then ran the editorial workshops and implemented the full workflow system: Group, Content Access, Workflow module, content versioning, scheduled publishing and role-based permissions across four editorial tiers.

Layout Builder replaced Paragraphs for key content types, immediately improving the editorial experience. We also fixed a bug where new drafts couldn't be edited on the live site.

Phase 2: Data, developer experience and infrastructure

Phase 2 tackled the deeper technical work. The complete conversion to Drupal Migrate replaced all custom REST-based import code. Each of the five data sources (Pure for research, the course and module management system, the Microsoft identity system for staff profiles, and the programme specification and entry requirement databases) was migrated to use YAML-configured Migrate pipelines with proper entity reference resolution. This eliminated the standalone import application entirely, one less piece of software for the university to maintain, test and deploy.

We converted the 190,000 research outputs to a custom Drupal entity type, separating them from editorial content in their own database tables and improving query performance across the site. Unused modules were uninstalled, unused content types and fields cleaned up, and unnecessary custom code retired.

Connecting design and development with Storybook

The university's Digital UX team designs components in Figma, but there was no reliable pipeline to get those designs into the Drupal theme. Storybook was configured in the project but wasn't working properly, creating a gap between design intent and what developers actually built.

We got Storybook running within the development environment and connected it to the existing component-based theme architecture. The theme already used the Components module to build UI elements in isolation, an approach that maps well onto Drupal's Single Directory Components feature introduced in Drupal 10.1.

With Storybook working, designers hand off components in Figma, developers build and review them in isolation in Storybook, and those same components flow directly into Drupal templates. This creates a direct pipeline from design to production: the Digital UX team and the development team work from the same source of truth, and components can be iterated on without touching the full site. New team members can see the full component library and understand the design system without digging through production templates.

Azure infrastructure

The Azure DevOps migration delivered staging environments, CI/CD pipelines with automated testing on every pull request, server-side cron and Renovate for dependency management. The production Azure architecture was designed with autoscaling containers, point-in-time database recovery, versioned blob storage and global CDN, giving the university a platform built to handle everything from routine traffic to clearing-day peaks.

Key technologies

Drupal 10, Layout Builder, Drupal Migrate framework, Group module, Content Access, Workflow module, Azure DevOps, Azure App Service (containers), Azure Database for MySQL, Azure Blob Storage, Backstop visual regression testing, Storybook, Figma, Single Directory Components, Tailwind CSS, TypeScript, Renovate, OpenID Connect, Microsoft Azure Active Directory.

Have you got a complex estate and need help to upgrade or migrate?