Platform Engineering

Custom WordPress development for business-critical websites

WordPress is capable of running a serious website. Whether a given WordPress site is serious depends almost entirely on the discipline applied to what goes into it — which plugins, which customisations, and what happens at the boundary between them.

The problem

A WordPress site becomes expensive at the point nobody constrained it

WordPress is designed to be extended, and that openness is the reason it is used everywhere. The same openness is why sites degrade: a plugin for each requirement, three of which solve overlapping problems, a page builder layered over a theme that was already doing layout, and customisation applied directly rather than through the platform's own extension points. None of those decisions is wrong on the day it is made. Collectively they produce a site that is slow, fragile and expensive to change.

  • Page speed has declined as features were added and nobody can say why
  • Plugin updates are avoided because something broke the last time one ran
  • Layout changes require a specialist in whichever page builder was installed
  • Three plugins appear to do overlapping jobs and none can safely be removed
  • Staging and production have drifted apart and releases are manually applied
  • The theme was customised directly, so updates overwrite changes
  • Content types are modelled as pages because nobody defined anything better
  • Nobody can explain what a given piece of custom functionality depends on
Who this is for

The people who usually bring us this problem

A business whose site has accumulated

The site works and is getting harder to change. You need it brought under control rather than replaced, and you need to know which part of the accumulation is actually costing you.

A marketing lead blocked by the platform

Content work has stopped being the constraint — the platform is. You need changes that arrive without a two-week queue behind a developer.

An organisation planning a new build

You are commissioning a site and you want it engineered around how you actually work, not assembled from a theme and however many plugins it took.

What it costs

What this costs while it goes unfixed

Engineering faults are rarely confined to the engineering layer. These are the commercial consequences we see most often.

Plugin accumulation is a performance cost and a maintenance liability

Each plugin adds queries, assets and code that has to keep working. The cost is not the plugin, it is the aggregate — and it surfaces as a site that is slower than its content warrants and riskier to update than its complexity suggests.

Direct theme modification forfeits the upgrade path

The moment a theme is edited in place, its own updates become destructive and are therefore skipped. The site is now maintained by hand, indefinitely, whether or not anyone intended that.

Undefined content modelling becomes a content-operations problem

When everything is a page, everything has to be maintained as one. The cost lands on editors, who work around the structure rather than with it — and that cost is paid every week rather than once.

Speed problems are structural before they are caching problems

A caching layer over an expensive page is masking rather than fixing. The measurement that matters is what happens when the cache misses, and on a mis-modelled site that is a slow page.

What we do about it

Capabilities

Each of these is work we carry out, not an area we advise on.

Content modelling

Defining what actually exists on the site and giving each thing the right structure — custom post types, taxonomies and fields that reflect how the content is used. It is the decision that determines how pleasant the site is to edit for the following five years.

Theme and block development

A theme built around the site's actual requirements, using the platform's own templating and block mechanisms. Where a design is delivered, it is implemented rather than bolted on through a third-party page builder that becomes its own maintenance dependency.

Controlled plugin selection

Adopting plugins where they are genuinely the right answer and building custom functionality where they are not. Both directions matter: reinventing a solved problem is as wasteful as installing a plugin for something that should be twenty lines of code.

Custom functionality through extension points

Functionality added through hooks, filters and structured plugins rather than by editing the platform. This is a constraint applied from the first commit, and it is the one that keeps the site updatable.

Performance engineering

Query profiling, asset loading, image handling and caching strategy addressed at the level the cost actually occurs. Core Web Vitals measured under realistic conditions rather than argued about from a lab score.

Accessibility and markup quality

Semantic markup, keyboard reachability and colour contrast treated as part of implementation rather than as a later audit. Accessible markup and search-friendly markup are substantially the same work.

Technical SEO foundations

Templates that produce correct titles, canonicals, structured data, sitemaps and pagination as a property of the system, so search configuration is not a per-page responsibility that decays.

Migration and content preservation

Where a build replaces an existing site, existing URLs, redirects and search visibility are part of the scope rather than a follow-up task.

Staging, release and handover

A staging environment, a repeatable release process, and CMS training so the editorial team can use what was built. A site nobody has been taught to operate is a site that will be worked around.

How we work

Engineering methodology

The sequence is deliberate. The order is usually what determines whether the work holds or has to be repeated.

  1. Start from the content, not the design

    What exists, how it is grouped, how it is retrieved and what the editors need to do with it. A site modelled from its content survives a redesign; a site modelled from a design has to be re-modelled every time the design changes.

  2. Constrain the plugin surface deliberately

    Each plugin is a dependency with a maintenance cost and a performance cost. We adopt them where they are the right tool and say so when they are not, because the cheapest plugin is the one the site does not need.

  3. Customise through extension points, never in place

    Hooks, filters and child themes rather than edits to the platform or the parent theme. This is what makes updates routine, and it is a decision made at the start rather than recovered at the end.

  4. Measure performance where it is expensive

    Query counts, uncached render cost and asset weight, before and after. A caching plugin that flatters a lab score while the uncached page remains expensive has moved the problem rather than solved it.

  5. Build the release process as part of the build

    Staging, a repeatable deployment and a rollback. The site is delivered with a way to change it, because a site that can only be updated by the person who built it is not finished.

  6. Teach the people who will use it

    Handover includes the editorial team, not only a technical contact. The most common cause of a good content model being abandoned is that nobody explained why it was built that way.

Deliverables

What an engagement produces

Documentation is a deliverable, not an afterthought. On most of these engagements a large part of the value is a defect report precise enough for another team to act on.

Before building

  • Content inventory and modelled structure
  • Plugin and dependency decisions, with the reasoning
  • Where custom code is justified and where a plugin is the better answer
  • Explicit position on headless, with the trade-offs stated
  • Performance and accessibility targets agreed as measurable outcomes

The build

  • Theme and block implementation from the agreed design
  • Custom post types, taxonomies and fields
  • Custom functionality through hooks and structured plugins
  • Correct titles, canonicals, structured data and sitemaps by default
  • Query, asset and image optimisation
  • Accessible markup and keyboard navigation

Launch and after

  • Staging environment and repeatable release process
  • Redirect map and preserved URLs where a previous site existed
  • Search configuration and verification after launch
  • Editorial training and written documentation
  • A defined support position after launch
Under the hood

Architecture and technology

What keeps a WordPress site maintainable

  • Content modelled to match how it is actually used
  • A child theme or a custom theme, never an edited third-party one
  • Custom functionality in a structured plugin rather than in the theme
  • Extension points used rather than core files edited
  • A plugin set small enough that its aggregate cost is understood
  • Templates that emit correct metadata without per-page configuration
  • Staging and a repeatable, reversible release process

Where the money actually goes

  • Undefined content modelling, paid for by editors every week
  • Direct theme edits, which forfeit every future theme update
  • Overlapping plugins, each adding cost and none safely removable
  • Render cost hidden behind a cache rather than resolved
  • A release process that only one person can perform
Adjacent problems

If this is not quite your problem

These overlap at the edges. Sending you to the right page is more useful than having you work it out.

The site exists and needs running rather than building

Updates, backups, compatibility testing and support are ongoing work rather than a project.

WordPress maintenance and support

The server is the constraint rather than the site

Runtime, database and infrastructure work sit below the application.

Server management

Speed is the specific problem

Performance engineering across the whole serving path, not just the front end.

Website performance engineering

You are considering a decoupled front end

What headless actually trades, and when it is the wrong call.

Headless website development
Questions

Frequently asked

Custom theme, or an existing theme configured to fit?

An existing theme is sometimes the right answer, particularly for a site whose requirements are genuinely close to what the theme provides. It stops being the right answer when the requirements are specific enough that fitting them means fighting the theme — which always costs more over the site's life than building what was needed. We will tell you which situation yours is rather than defaulting to the more interesting option.

Will you migrate our existing URLs without losing search visibility?

Yes, and it is treated as part of the build rather than as a follow-up task. That means a complete inventory of existing URLs, a redirect for each one that survives the new structure, and canonicals that agree with what the redirects do. A rebuild that ignores this loses accumulated search visibility in a way that is usually attributed to the redesign rather than to the missing redirects.

Who maintains the site after launch?

Whichever arrangement you prefer, agreed before the build rather than assumed after it. Some clients keep it in-house and take a handover; others continue with us on a maintenance agreement. What we do not do is deliver a site with no stated support position, because the maintenance question is the one that determines whether the site stays in the state it was built in.

Should we go headless?

Usually not, and we will say so. Headless moves work from the server to a build pipeline and from the theme to an API, which is a genuine advantage for some sites and an expensive complication for most. It is the right call when you need the content delivered to several front ends, when your editorial workflow is genuinely independent of presentation, or when the front end needs a framework WordPress cannot reasonably serve. It is the wrong call when the motivation is that headless sounds more modern, and the FAQ is where we say that rather than at the point you have committed to it.

Which plugins do you recommend?

It depends on the requirement, and a fixed list would be the wrong answer for most sites. The relevant principle is that each plugin is a dependency with a performance cost and a maintenance obligation, so the set should be as small as the requirements allow. Where a plugin is genuinely the right tool we will use one; where it is close but not quite, the honest options are usually a small amount of custom code beside it rather than a larger plugin replacing it.

Bring us the problem you have not been able to fix

Describe what is happening rather than what you think the cause is. If we are not the right people for it, we will say so.