0%

Inheriting a WordPress installation

8 years, 34 plugins and a theme nobody dares touch. The job does not start by fixing anything – it starts by working out what is in use.

The job rarely arrives as a project. It arrives as “our site has got slow”, or “we cannot update anything without something breaking”. Behind it sits a WordPress installation that has been running for eight years, and that nobody has had a full picture of since the developer who built it moved on.

It is one of the more common jobs in the WordPress world. It just gets described rarely, because it is not a new site with a before-and-after picture.

The first step is not to fix anything

The temptation is to get going: deactivate plugins, update the core, clean up the theme. That is also the fastest route to switching off something that turns out to matter.

The first step is working out what is actually in use. Which plugins do something the site actually shows. What page types exist, and who edits them. What happens on an order, a sign-up, a form – the whole way from click to email or database. It usually takes a day or two, and it is the best-spent time in the whole job.

The rule I work by is simple: do not touch anything until you know why it is there. Code that looks redundant is often somebody's solution to a problem documented nowhere.

What you usually find

Some patterns recur.

Plugins that overlap. Two caching plugins installed by two different developers. A gallery solution used on a single page nobody has visited in two years.

Plugins emitting competing metadata. The worst kind of overlap, because nothing visible goes wrong. Two SEO plugins each write their own title, their own canonical and their own Open Graph tags into the same document head, and the theme may add a third set on top. The page looks right in a browser – but Google gets contradictory signals about what the page is called and which URL is the real one. It is not one broken plugin. It is two working ones.

Changes made in the theme rather than a child theme. Which means the theme cannot be updated without losing them – and so it has not been updated. From there it spreads: with the theme standing still, nobody dares update WordPress or PHP either, and eventually the whole installation is held in place by something nobody can remember.

Tracking that runs around the consent. Google Tag Manager installed through one plugin while consent is handled by another. Separately they both work: the banner appears and stores the choice, and GTM loads its tags. They do not necessarily know about each other, so the visitor's choice in the banner is not turned into the behaviour you assume. It is the kind of thing you do not find by using the site normally, only by looking at what the browser actually sends.

Code nobody dares touch. A functions.php of 1,000 lines, most of it added by different people over several years. No comments, no history, because it was never in git.

What I do about it

The order matters more than the tools.

  1. A copy and version control. The installation has to live somewhere you can try things without touching what the client is using. And the code has to go into Git – not to be modern, but because it is the difference between “we changed something and now it does not work” and “we can see exactly what happened”.
  2. What hurts now. If the site is slow, I measure why before optimising. If a security update has been deferred for two years, that matters more than tidying. The client should feel a difference before anyone starts on the work that cannot be seen.
  3. One thing at a time. One plugin removed, the site tested, on to the next. It takes longer than clearing everything in one pass, but when something breaks you know what it was.
  4. What makes next time easier. A child theme, so the theme can be updated. Changes moved out of functions.php to somewhere they can be read. A short note on what is where.

When it is not worth it

Sometimes the answer is to build new. It is when the theme is so far gone that clearing it up costs more than a new frontend, or when the content structure does not fit what the site has to do today.

But that is rarer than people think – and it is worth noting that whoever would build the new one is rarely the most objective judge of it. A site with eight years of content, indexing and inbound links has a value that does not appear in the codebase.

What it is really about

An inherited installation is rarely only a technical problem. It is also a question of somebody being able to answer what happens, and why.

That is what the work is: turning a system nobody understands into a system somebody can run. The code gets better along the way, but that is not the point. The point is that the next time something has to change, it is a task and not a risk.

What I meet most often

An inherited installation rarely has all of them, and few are serious on their own. It is the combination that makes a job hard to estimate.

01_Plugin debt: 30-60 plugins, several solving nearly the same problem, some abandoned, and nobody sure any more which are needed.

02_Plugin conflicts: Two plugins hooking the same place, loading different versions of a library, or changing the same behaviour.

03_Update anxiety: WordPress, PHP, theme or plugins cannot be updated, because nobody knows what breaks.

04_Bought themes and page builders: Elementor, Divi, WPBakery and the like can, after a few years, leave a site that is hard to change without working against the system.

05_Performance: Plugins and themes loading CSS and JavaScript on every page, including where it is unused. Plus heavy images, expensive queries and missing caching.

06_Database cleanup: wp_options, autoloaded options, revisions, transients and tables from plugins deleted long ago.

07_WP-Cron: Convenient until jobs get heavy, fail quietly, or need to run reliably at a particular time.

08_Security: Old plugins and themes, permissions that are too broad, XML-RPC, file uploads, unprotected endpoints, and enough administrators to field a football team.

09_Custom code in the wrong places: Changes made directly in the parent theme or in a plugin, snippets in functions.php - and the classic small fix in core.

10_No version control: Changes made straight onto production through wp-admin or FTP, and no reliable way to see what changed since last time.

11_Staging and production: Database content has to go one way, code the other, while uploads and editorial changes had better not be overwritten.

12_URLs in the database: Serialised data and absolute URLs make an ordinary search and replace more interesting than it ought to be.

13_Mail: wp_mail() can return success without the mail reaching the recipient's inbox. SMTP or a mail service, SPF, DKIM and DMARC suddenly become part of the WordPress job.

14_REST API and integrations: Authentication, rate limits, webhooks, retries, and external systems that do not behave the way the documentation promised.

15_WooCommerce: A category of its own: checkout, hooks, order statuses, payment gateways, VAT, shipping, mail, and plugins on top of plugins.

16_Multilingual: WPML or Polylang, hreflang, translated slugs, canonicals, and content that does not exist in every language.

17_Technical SEO: Redirects, canonicals, sitemap, robots, structured data - and several SEO plugins all wanting to own the contents of <head>.

18_Tracking and consent: Tag Manager, GA4, Google Ads, Consent Mode and cookie consent. Typically where you find that three plugins and the theme all insert tracking.

19_Gutenberg and blocks: Good when it has been thought through. Less good when the editor gets 80 blocks and the means to break the design system.

20_Roles and permissions: Editors should be able to change this but not that - quickly more complicated than WordPress default roles reach.

21_The media library: 12,000 images, 14 generated sizes of each and 40 GB of thumbnails, with nobody knowing which ones the theme uses.

The list is not an accusation against WordPress. It is what happens to systems many people have touched over eight years.

Read next_

01_ From coder to reviewer AI will never be worse than it is right now. That does not change what I know – it changes where in the work I stand. 02_ Ctrl, Cmd and C# A language is learnable. It is the domain and the codebase that take time – and two machines that cost more attention than the syntax.

Curriculum Vitae ↓

Profile Image

Paul Nybo Andersen

Profile_

48 years old, CTO, graphic designer, and full-stack developer (LAMP/LEMP) with 26 years of experience in developing digital solutions for a broad target group of companies.

Scroll to read more →

Services_

How I can help

Go to My experiences ↓

PHP • Laravel • MySQL • JavaScript

Web development

From database and backend to frontend and hosting.

UX • Figma • Prototypes • Testing

Web design & UX

Interface design that has to work for the user and the business alike.

Identity • Design systems • Print

Graphic design

Visual identity for companies that need to look like something you can rely on.

WordPress • Umbraco • Magento

WordPress & CMS

Content systems built for the people working in them every day.

Core Web Vitals • SEO • Caching

Performance & SEO

Websites that load quickly – including on a phone on a poor connection.

Architecture • Technology choice • Sparring

Technical consulting

For when a technical decision has to be made and you have nobody to test it against.

Case: Lifeguard Health ApS_

8 years with Lifeguard

CTO & Co-Founder

From 2015 to 2023, I was CTO and co-founder of Lifeguard Health ApS. Here, I worked on the development of a digital health platform that combined technology, data and personal coaching. The role included everything from product development, UX and software architecture to management of development teams, operations and business development. The eight years at Lifeguard shaped my approach to both technology, products and people and today form the foundation for much of what I work with.

Watch Lifeguard's Core-story

Lifeguard presentation_1_4_

Slides #1 showing my last job
Slides #2 showing my last job
Slides #3 showing my last job

My experiences

In my role as CTO at Lifeguard, I drew on the experience I have built up over the past 26 years.

In this section, I have tried to describe the experiences I have acquired through the tasks I have solved and the professional skills I have used.

Experiences_

Image from my time at ESGRapporter

2024-2026, CTO & Co-founder

ESGRapporter

Now: ESGRapporter ApS.

We built the ESG reporting platform in Laravel, and I carried the technical responsibility for the direction, the reporting side and everyth ..

Image from my time at Revolvo

2024-2026, Senior Developer • UI/UX • Design

Revolvo

Now: Revolvo Aps. + BmyGuest ApS.

I handled development, UI/UX and graphic identity. 60% of my time went to BmyGuest and IDoMeetings, which Revolvo co-owned.

Image from my time at Lifeguard

2015-2023, CTO & Co-founder

Lifeguard

Now: Lifeguard Health ApS.

I built the LifeScore platform in Laravel with consent-based access to health data and an app for the wristband, and handled all UX and desi ..

Image from my time at Vitalityguard

2016-2018, CTO & Co-founder

Vitalityguard

Now: FIDIMI

We ran the Lifeguard platform white-labelled through a joint venture with Dansk Sundhedssikring. Maersk was the biggest client.

Image from my time at ContentCPH

2010-2015, Senior Digital Wizard

ContentCPH

Now: Charlie Tango

I built 60+ Facebook apps in PHP for Samsung, IKEA and H&M. The Nik & Jay campaign for Samsung won Danish Internet Awards 2014.

Image from my time at BOCCA WIRED

2009-2010, Freelance developer

BOCCA WIRED

Now: BOCCA

I built campaign sites for Movia and the Danish Heart Foundation, among them Overraskende hurtig, which took bronze at the Creative Circle A ..

Image from my time at EuroRSCG

2008-2010, Inhouse Freelance developer

EuroRSCG

Now: Havas Danmark

I won the agency's digital work back from the competitors and built an iPhone site and interactive product tools for GN/Jabra.

Image from my time at Bandits Inc.

2001-2026, Sole proprietorship

Bandits Inc.

Now: Audiotracking v/Paul Nybo Andersen

My own sole proprietorship since 2001. Through it I have sold web development to agencies that had the graphics but lacked the developer.

Skills + Stack_

My qualifications

As shown in the previous section, I have dealt with a wide range of tasks and taken on many different job roles, ranging from sound engineer to photographer, graphic artist, web developer, and CTO. The common feature in all of them has been my passion for creating meaningful experiences and my drive to create something unique.

In my approach, I have always been open to exploring new solutions to existing challenges, and I have never been afraid to acquire new knowledge. This has resulted in a wide range of skills that I have put together over time.

I have tried to list the most relevant ones here.

Rating

- " This is what I do best".

- " I'm pretty good at it".

- " I can do this just fine".

- " It's not what I'm best at, but I can if necessary".

- " I'm not good at it - but I'm willing to learn".

Writing_

Notes from the work

2026-08_

Inheriting a WordPress installation

8 years, 34 plugins and a theme nobody dares touch. The job does not start by fixing anything – it starts by working out what is in use.

2026-05_

From coder to reviewer

AI will never be worse than it is right now. That does not change what I know – it changes where in the work I stand.

2025-07_

Ctrl, Cmd and C#

A language is learnable. It is the domain and the codebase that take time – and two machines that cost more attention than the syntax.

When I'm not working_

Background

I was born and raised in Copenhagen. But after a few years living with small children in an apartment in Østerbro, my girlfriend and I chose to move to a house in the suburb. We've lived in Hellerup for 11 years now, in a less pulsating neighborhood but no further away from Copenhagen than you can hop on the bike and then you're back.

I often do the latter; it's all about inspiration and new impressions. For the same reason, I still try to combine these trips with my passion for shooting photos. But since work has always been my hobby, it has been a challenge to find a balance between leisure and work projects.

When I'm not working, I spend a lot of time playing and listening to music. Unfortunately, over time, it has mostly become listening, which has been a very expensive but also rewarding passion.

The common feature of all my passions is the desire to create something. I hope this can benefit you.

TT38 profil

+25 years of experience with digital products ↓

Available for consulting, development, digital products and technical leadership.