Five plugins almost do it, and none of them quite fits
You need something specific. Maybe a payment that's authorized now and charged later. Maybe tracking that ties a printed QR code to the order it produced. Maybe a product option that depends on another option. You search the plugin directory and find several candidates. One does most of it but not the part you need. Another does that part but adds a dashboard, three settings pages and a script on every page. A third hasn't been updated in a year.
So you're stuck between three options: buy the closest one and live with the gaps, stack two plugins and hope they get along, or have something built for you. Each has a cost, and the cost on the price page is the smallest part of it.
Why it happens
Commercial plugins are built for everyone
A plugin sold to thousands of stores has to handle thousands of setups. That's useful when your need is common. It also means the plugin carries features, settings and code paths you will never use, and it usually stops short of the part that makes your business different. The plugin author can't build for one store's workflow.
Overlap and conflicts grow quietly
The gap left by one plugin often gets filled by another. Now two plugins hook into the same checkout step, or both add product fields, or both modify order emails. They were never tested together. The conflict shows up later, after an update, as a checkout error that only happens with one payment method.
Weight adds up
Many plugins load their CSS and JavaScript on every page, whether or not the page uses the feature. Some add database queries to every request, or store large settings that WordPress loads on every page view. One plugin rarely makes a store slow. Twenty of them, each adding a little, often do. You can read more in why WooCommerce slows down at scale.
Security and maintenance history
Every plugin you install is code you trust with your store. A plugin that's abandoned, rarely updated or slow to patch published vulnerabilities is a risk, and outdated plugins are one of the most common ways stores get hacked. Before installing anything, it's worth checking how often it's updated, how quickly security issues were fixed in the past, and whether the author still answers support questions.
Custom code has its own risks
Custom isn't automatically better. A custom plugin written quickly, without documentation, by someone who then disappears, is worse than a well-maintained commercial plugin. So is custom code pasted into the theme's functions.php, where it's lost the next time the theme changes. The question isn't "custom or not". It's which option you can live with for the next few years.
What fixing it involves
1. Write down what you actually need
I start with a short list: what the feature must do, what it must not do, which systems it touches, and how you'll know it works. Many decisions get easy at this point. Sometimes the list shows a maintained plugin covers everything. Sometimes it shows the important part is exactly what no plugin does.
2. Compare the options honestly
For each candidate plugin, I check:
- Does it cover every item on the list, or only most of them?
- How often is it updated, and how fast were past security issues fixed?
- What does it load on the front end, and on which pages?
- Does it offer hooks and filters, so small changes can be made without editing its files?
- Does it conflict with anything already installed? I test it on a staging copy, not on the live store.
Then I estimate the custom option in time: building it, testing it, and keeping it working through future updates.
3. Buy when a maintained plugin fits
If a well-maintained plugin covers the need, buy it. Configure it carefully, stop it loading assets where it isn't used, and add a small companion plugin through its hooks if one detail needs to change. That's usually the fastest and safest route.
4. Build when nothing fits
When the core of the feature is something no plugin does well, I build a small custom plugin. A good one has a clear shape:
- Self-contained. Its own plugin folder, not code in the theme, so it survives theme changes.
- Built on hooks. It uses WooCommerce's documented actions, filters and APIs rather than changing core behaviour.
- Small. It does the one job and nothing else, and loads its assets only where they're needed.
- Settings where they help. Options your team will actually change live in a settings screen; everything else stays in code.
- Tests for what matters. The parts that touch orders, payments or data have automated tests.
- Versioned and updatable. It lives in your repository, declares the WordPress and WooCommerce versions it supports, and is deployed through staging first.
- Documented. A short README: what it does, how it's configured, and what to check after a major update.
5. A quick decision checklist
- Does a maintained plugin cover every must-have item? Buy it.
- Does it cover most items, with hooks for the rest? Buy it and extend it.
- Would you need two or more plugins working together for one job? Consider building.
- Is the feature part of what makes your business different? Build it, so you control it.
- Will it touch payments or order data in an unusual way? Build it with tests, or buy only from an author with a strong security record.
If you're weighing a feature like this, web development is where I'd start: the requirements list, the comparison, and a recommendation you can check.