Brad Holmes web developer, designer and digital strategist.

Dad, husband and dog owner. Most days I’m trying to create fast, search-friendly websites that balance UX, Core Web Vitals, and digital strategy from my studio in Kettering, UK.

If you’re here, you either found something I built on Google or you’re just being nosey. Either way, this is me, the work, the thinking, and the bits in between.

Brought to you by Brad Holmes

Wordpress plugins directory screenshot

WordPress Plugins Are Not Your Stack: Why Less Is More

Brad Holmes By Brad Holmes
14 min read

WordPress plugins are easy to install—and even easier to rely on. They’re often the first solution developers reach for when building a feature. Need a form? A slider? A membership system? There’s a plugin for everything.

But that convenience comes with a cost.

Too many WordPress sites are built by stacking plugin after plugin until the whole thing becomes fragile, slow, and hard to maintain. It might work at first, but give it six months and you’re dealing with performance issues, security risks, visual bugs, and confused clients wondering why their site keeps breaking.

The problem isn’t plugins themselves. It’s how they’re used—and how they quietly become your stack without you even realising it.

This post breaks down why that’s a problem, where the risks show up, and how to build smarter, leaner WordPress sites without the bloat.

What’s the problem with using lots of WordPress plugins?

At first glance, plugins feel like a shortcut. Need a contact form? There’s a plugin. Want a slider, a custom post type, a popup, a cookie banner, or an SEO tool? Just search, install, and activate. Simple.

Until it isn’t.

1. Performance Takes a Hit

Every plugin adds something—usually JavaScript, CSS, database queries, or even extra HTTP requests. Multiply that by 10 or 20 plugins, and your page load times start to suffer.

According to WP Rocket, it’s not the number of plugins that kills performance—it’s how they’re built. But most sites aren’t running 20 highly-optimized, lean plugins. They’re running bloated ones that enqueue assets globally and fight for control over the front-end.

And when it comes to Core Web Vitals, things like Largest Contentful Paint (LCP) and Cumulative Layout Shift (CLS) are directly impacted by third-party assets and layout jank—two things plugins are notorious for introducing.

2. More Plugins = More Vulnerabilities

Security is another blind spot. Wordfence reports that plugin vulnerabilities account for over 90% of known WordPress site breaches. Many plugins are abandoned, poorly reviewed, or rushed to market without proper testing. Some even use overly broad permissions (like full admin access) that leave the door wide open.

If you’re not actively auditing your plugin stack for updates and security patches, you’re creating a ticking time bomb.

3. Conflicts and Technical Debt

Plugins often assume they’re the only thing controlling a feature. So when multiple plugins try to do similar things—enqueue jQuery versions, override WooCommerce templates, or inject frontend styles—things break.

These conflicts aren’t just annoying—they’re expensive. Developers spend hours debugging mystery errors, only to trace it back to some plugin update that introduced a breaking change or deprecated method. That’s time and money wasted on maintenance instead of building real value.

4. Admin Bloat and UX Decay

From a client’s perspective, 15 active plugins means 15 new menus, settings panels, update notifications, and alerts. The admin UI becomes a mess of competing interfaces, branded toolbars, and redundant alerts.

It doesn’t just look messy—it leads to confusion and frustration. Clients stop updating. They click the wrong setting. Or worse, they disable something critical because “it looked unimportant.”

How do plugins affect developer experience and project quality?

If you care about performance, maintainability, or clean architecture—plugins should make you cautious.

While they solve immediate problems, they often introduce long-term mess. And once they’re embedded in your build, ripping them out becomes its own risk.

1. You Lose Control of the Codebase

When you rely on a plugin, you’re trusting someone else’s decisions—about how things are structured, named, loaded, and styled. You don’t get to audit that code. You don’t get to shape it to your standards. And if it breaks, you’re stuck trawling through someone else’s logic to find out why.

Worse, many plugins don’t follow modern development practices. Namespaces are missing. Functions are globally scoped. CSS is injected inline or in the wrong place entirely. It’s hard to build a solid dev environment when you’re duct-taping around third-party decisions.

2. They Break Convention and Create Inconsistencies

Good development is consistent. Plugins aren’t. One might use post_meta, another creates custom tables. One uses custom fields, another hides everything behind a shortcode or a hidden UI. You end up with a Frankenstein admin panel and data structures that don’t talk to each other.

This inconsistency makes scaling a site hard. It makes onboarding new devs harder. And it makes custom features slower to build—because you’re working around someone else’s logic instead of your own.

3. They Fight with Modern Tools and Stacks

If you’re using a modern WordPress stack—like Sage, Bedrock, or a decoupled front-end—plugins often get in the way. They assume you’re using the default theme setup, with jQuery, global templates, and wp_head injecting everything. You’re not. So things break.

Even a plugin that “just works” might load its scripts globally across every page, killing your performance budget and bloating your frontend.

4. They Complicate Version Control and Deployment

When plugins are installed through the admin panel instead of Composer or git, you create an unpredictable environment. You can’t diff changes, you can’t track updates, and you can’t replicate the stack cleanly across environments.

Want to deploy from staging to production with confidence? Not if your client just clicked “Update” on something that overwrote your templates.

Why do clients love plugins—and how does it backfire?

From a client’s point of view, plugins look like magic. Need a booking form, an image gallery, or an SEO tool? Just click “Install.” Instant results, no dev time, no extra cost.

And that’s exactly why they become a problem.

1. Plugins Feel Like Free Features

Clients see the plugin directory as a feature library—so they expect quick solutions to complex needs. But what they don’t see is the overhead: the extra assets, the conflicts, the security risks, the long-term cost of managing dependencies.

What takes five minutes to install might take hours to fix six months down the line.

2. The Admin Panel Turns Into a Mess

Each plugin adds something to the dashboard: a new menu item, settings page, or alert. After a while, the admin becomes a minefield of confusing options, redundant notices, and UX-breaking toolbars.

You’ve probably seen it before—clients scared to click anything because they’re not sure what breaks what. Or worse: they do click something, and now the site’s header is gone.

3. They Introduce False Confidence

The idea that “there’s a plugin for that” creates a dangerous mindset. It encourages clients to bypass the dev team and install whatever looks right. But they’re not looking at code quality, update history, or compatibility.

In one Patchstack report, over 400 plugin vulnerabilities were disclosed in 2023 alone—and that’s just the ones that got reported. Many of those were in plugins still widely used, with little to no warning in the dashboard.

4. They Delay Strategic Thinking

Relying on plugins can stop clients from asking the right questions.
Do we really need this feature? Is there a better way to design the flow? Can this be part of a larger system?

Instead of exploring the right long-term solution, plugins offer a quick fix. And eventually, that patchwork of quick fixes becomes the problem.

Are there any plugins that are actually worth using?

Absolutely. Not all plugins are bad—and swearing off them entirely is just dogma. The key is knowing which ones earn their place in your stack, and which ones just look convenient.

1. Use Plugins That Provide Deep, Complex Functionality

Some functionality is too large to justify rebuilding—especially when the plugin is well-maintained and built with extensibility in mind. These are the kinds of plugins that often should be in your stack:

  • Advanced Custom Fields (ACF) – Industry standard for structured content. Clean, reliable, developer-friendly.
  • Rank Math – Solid SEO tooling, minimal frontend bloat, and flexible configuration.
  • Gravity Forms – Powerful form builders with conditional logic, API hooks, and spam protection.
  • WooCommerce – Let’s be honest: you’re not going to rebuild ecommerce from scratch.
  • WP All Import – Purpose-built for heavy lifting, with good dev controls.

These plugins don’t just add UI—they solve real technical problems in a way that respects your workflow.

2. Look for Plugins That Respect Boundaries

Good plugins do a few things well. Great plugins stay out of your way. They:

  • Don’t load unnecessary scripts on every page
  • Follow WordPress development best practices
  • Offer hooks, filters, and documented APIs
  • Support Composer installs and version pinning
  • Avoid hijacking the admin experience

If you can’t install and configure a plugin without spending an hour hiding its branding and cleaning up its mess—bin it.

3. Composer Is Your Friend

Where possible, manage plugins like dependencies—not admin add-ons. Use wpackagist or direct GitHub repositories via Composer to version control what’s in your environment.

It’s the difference between building on stable ground vs hoping no one presses the wrong button on production.


When should you build instead of install?

Just because a plugin exists doesn’t mean you should use it. In fact, the majority of plugins on most WordPress sites are solving problems that should’ve been handled in the theme—or better yet, by writing clean, purpose-built code.

1. Ask: Can I Build This in a Day or Less?

That’s a solid baseline. If a plugin is solving a small, specific problem—like registering a custom post type, adding a few fields, or modifying a layout—you’re almost always better off building it yourself.

Why? Because your code:

  • Won’t include unnecessary features
  • Won’t enqueue global styles or scripts
  • Will follow your own architecture and conventions
  • Will be easier to extend later without wrestling with third-party logic

In short: it’ll do exactly what you want—and nothing else.

2. Avoid Plugins for Frontend Presentation or Layouts

Page builders, sliders, popups, accordions… most of these are better off coded manually. Not just for performance—but for control. Plugins that manage frontend visuals often inject inline styles, overwrite your theme CSS, and rely on fragile JavaScript that breaks when the DOM changes.

If you’re building with Tailwind, Blade templates, Alpine, Vue—or even just modern vanilla JS—then adding a plugin that ships jQuery and unscoped CSS is taking one step forward, two steps back.

3. Be Wary of “Kitchen Sink” Plugins

Many plugins try to do too much: custom post types, fields, blocks, forms, popups, role management, tracking scripts, and 14 other features you’ll never use.

These are tempting because they tick multiple boxes fast—but they introduce more problems than they solve. They often:

  • Break if you disable part of their module system
  • Lock you into their way of thinking
  • Make migrating away later a nightmare

If a plugin markets itself as “everything your site needs”—close the tab.

4. Build for Control, Not Convenience

The core of the decision comes down to this:
Do you want convenience now, or control later?

Short-term speed from a plugin often leads to long-term mess. But when you build something yourself—no matter how simple—you own it. You understand it. You can shape it to fit future needs. And you’re not waking up to plugin update horror stories.

What’s the better way to build a WordPress site?

If plugins aren’t the foundation, what is?

The better approach is to treat WordPress like a framework—not a plugin directory. That means building with intention, using a proper dev stack, and keeping your architecture lean, predictable, and performant.

1. Use a Real Development Stack

Stop treating WordPress like it’s 2008. Tools like Roots make it modern:

  • Sage gives you a modern theme system with Blade templating, Tailwind support, and a clean separation of concerns.
  • Bedrock gives you project-level structure with Composer-managed dependencies, .env support, and better security out of the box.
  • Trellis (if you want to go all-in) handles local/remote environments cleanly with Ansible.

This stack treats WordPress like Laravel: structured, secure, and version-controlled. No more FTP hell or manually installed plugins.

2. Treat Plugins Like Dependencies, Not Apps

When you do use plugins, treat them like dev dependencies. Install via Composer where possible, pin versions, and keep them lean.

Avoid any plugin that:

  • Tries to own your frontend
  • Adds global settings you can’t filter
  • Doesn’t play well with your theme or stack

Think of plugins like packages in Laravel or Node—useful, but never something you let drive the app.

3. Build Modular, Reusable Components

Instead of reaching for a plugin every time you need a UI feature, build it as a component. With Tailwind, Alpine, or Vue, it’s fast, lightweight, and far more maintainable.

Whether it’s a modal, slider, tab system, or even a block-style layout—owning the component means:

  • Less reliance on third-party code
  • Easier styling and interaction control
  • Fewer surprises during updates

This approach makes your theme truly yours—no third-party surprises, no guessing how something works under the hood.

4. Focus on Performance from the Start

Your build should ship fast by default. That means:

  • Minimal JS and CSS
  • Critical-path rendering
  • Async scripts and font loading
  • No plugin that loads assets on pages that don’t need them

The fastest sites are always the simplest ones under the hood. And that simplicity comes from writing what you need, not installing what’s convenient.


How do you explain this to clients or teams?

You can build a lean, fast, maintainable WordPress site—but only if the people you’re building it for understand why you’re doing it that way.

Clients usually don’t care about Composer, Blade templates, or page weight. What they care about is stability, speed, and being able to manage their site without fear.

Here’s how to frame the conversation:

1. Use Real-World Analogies

Don’t talk about plugins vs custom code—talk about cars, kitchens, or houses. For example:

“Using too many plugins is like bolting random parts onto your car. They might work for a while, but eventually something rattles loose—and fixing it costs more than doing it right the first time.”

Or:

“You wouldn’t install 20 different ovens in your kitchen just to get different cooking modes. You’d pick one that fits your needs and learn to use it well.”

Analogies cut through the tech-speak and make the risks relatable.

2. Show the Hidden Costs

Use screenshots or case studies to show what bloated sites look like:

  • Admin dashboards with 10+ new menus
  • Load times over 5 seconds
  • Multiple plugins solving the same problem
  • Security alerts from known plugin exploits

Nothing gets client buy-in faster than seeing the alternative.

3. Frame It Around Long-Term Value

Position your approach as an investment in performance, security, and maintainability. Help them understand the difference between a “website that works today” and a system that’s still reliable two years from now.

We’re not just building you a site. We’re building a tool you’ll depend on every day. It should be fast, clean, and easy to grow with—not something that needs a developer on speed dial every time a plugin updates.”

And when the conversation turns to site speed or performance, that’s your chance to show the numbers. I’ve broken down exactly what to measure—and why it matters—in this guide to website performance metrics. It’s a useful reference if you need to back up your build decisions with hard data.

4. Give Them Confidence in the Process

Clients panic when they feel like control is being taken away. So explain what you’re doing instead of plugins:

  • Reusable components for layouts
  • Custom fields for flexibility
  • Performance-focused architecture
  • Clean UI that won’t change on them overnight

If they understand there’s a plan—and that it makes their life easier, not harder—they’ll trust you.

What you should read next

Brad Holmes

Brad Holmes

Web developer, designer and digital strategist.

Brad Holmes is a full-stack developer and designer based in the UK with over 20 years’ experience building websites and web apps. He’s worked with agencies, product teams, and clients directly to deliver everything from brand sites to complex systems—always with a focus on UX that makes sense, architecture that scales, and content strategies that actually convert.

Thanks Brad, I found this really helpful
TOP