Productizing

From Working Plugin to Sellable Product

⏱ 14 min

The ability library or MCP plugin you built in Courses 2 and 8 works. You know how it’s configured, what its edge cases are, and what to do when something goes wrong, because you wrote it and you’ve been running it. None of that knowledge exists for the person who finds your plugin on WordPress.org next week, has never seen an ability or an MCP server before, and expects it to either work immediately or tell them clearly why it doesn’t. That gap, between “it works for me” and “a stranger can install, configure, and trust it,” is the entire subject of this lesson, and it’s usually bigger than developers expect.

What you'll learn in this lesson
What "productized" actually means
The specific, checkable differences between your working plugin and a sellable one.
Onboarding for a non-developer
What a first-run setup flow needs to do that your own local testing skipped.
Documentation as a support-cost reduction tool
Why a readme.txt alone isn't documentation for an AI feature.
Realistic support expectations
What a solo developer or small team can actually commit to, and how to say so honestly.
Prerequisites

This lesson assumes a plugin that already passes your own testing, the CI pipeline from Course 8’s ci-cd-pipelines-for-mcp-plugins lesson is a reasonable bar. It doesn’t assume you’ve decided on pricing or licensing yet, those come next.

Step 1: “Works for me” versus “works for a stranger”

Your own installation has advantages a customer’s won’t: you know your API keys are valid, you know which WordPress version and PHP version you’re running, you know what wp_register_ability() calls the plugin makes and roughly what they cost in API calls, and if something breaks you can read the code. A stranger installing your plugin has none of that. They have a plugins page, an activation button, and whatever your onboarding screen shows them in the first thirty seconds.

The gap between a working plugin and a sellable product
DimensionWorks for youSellable
ConfigurationHardcoded or set once, from memoryA settings screen with validation, defaults, and inline help
Error handlingYou read the PHP error logErrors surface as plain-language admin notices with a next step
API key setupYou know where to get oneThe setup flow links directly to the provider’s key page and validates the key before saving
Failure recoveryYou debug it yourselfA documented troubleshooting path exists before the customer ever emails you
Trust signalsIrrelevant, it’s your own siteA readme, a changelog, a support channel, and a privacy-and-data-use statement all visible before purchase or install

Step 2: Onboarding is the first thing that has to work perfectly

A first-time user who hits a confusing setup screen doesn’t file a detailed bug report, they uninstall and leave a review. The onboarding flow for an AI feature specifically has to handle a few things your local dev environment let you skip entirely.

A minimum viable onboarding flow
1
Explain what happens before it happens
A short, plain-language description of what the plugin does and what data it sends where, shown before any setup step, not buried in the readme.
2
Validate the API key at entry time
A real test call against the provider (a cheap one, a models-list endpoint rather than a full completion) that confirms the key works, with a specific error if it doesn't.
3
Show a working default
One ability or one feature working end to end immediately after setup, before asking the user to configure anything advanced.
4
Surface the permission model in plain terms
If your plugin uses permission_callback checks tied to WordPress roles (Course 4), say so in the UI: "Only users who can edit posts can trigger this," not just silently returning a 403.
5
Link to real documentation from inside the plugin
Not a promise to write docs later, an actual link, in the settings screen itself, to a page that answers the five questions every new user will have.
Test onboarding on a machine you don't control

Ask a developer friend, or use a genuinely fresh local environment with no prior config, to install your plugin with zero guidance from you. Watch where they get stuck. Every stuck point is either a documentation gap or a UI gap, and it’s far cheaper to find those before launch than to learn them from support tickets.

Step 3: Documentation is a support-cost reduction tool, not a formality

For a typical CRUD plugin, documentation is nice to have. For an AI feature, it’s closer to required, because AI features fail in ways a customer can’t self-diagnose from the UI alone: a provider outage looks identical to a bug, a rate limit looks identical to a broken feature, and a model returning an unhelpful answer looks like the plugin is “wrong” even when it executed exactly as designed. Good documentation answers these before the customer opens a ticket:

What your documentation actually needs to cover
What data gets sent to which AI provider, and when
The same disclosure your readme.txt needs for WordPress.org, expanded into an actual page.
What a typical error message means and what to do about it
Rate-limited, invalid key, and provider-down should each have a specific, written answer, not "contact support" for all three.
What the plugin does not do
Scope boundaries prevent more support tickets than feature lists do. Say plainly what's out of scope.
How to get help, and what response time to expect
Covered in full in Lesson 7, but the link needs to exist from day one.

Step 4: Set support expectations you can actually keep

A solo developer or a two-person team cannot promise 24/7 support, and pretending otherwise in your marketing sets up a review that says “no response in three days.” Say what’s true: a support forum with a stated typical response window, a paid tier with a faster or more direct channel, and clear boundaries around what’s supported (the current version, current WordPress and PHP releases) versus what isn’t. Customers tolerate honest limits far better than broken promises, and an honest support policy also protects you from the specific complaint reviewers watch for on WordPress.org: unresponsive developers on a plugin that claims active support.

A great feature set doesn't fix bad onboarding

It’s tempting to keep adding abilities and features when a product isn’t selling. Often the actual blocker is earlier: a setup flow that confuses a non-technical site owner in the first two minutes. Before adding scope, watch someone unfamiliar with your plugin try to install it, and fix what you see.

Recap

A working plugin and a sellable product differ in configuration, error handling, documentation, and support, not in feature count. Onboarding has to work for someone who has never seen an ability or MCP server before, documentation has to answer the specific ways an AI feature fails (which don’t look like typical bugs), and support commitments need to be honest about what a small team can actually deliver. Get this right before you touch pricing or licensing, since a product nobody can successfully install won’t be helped by either.

Resources & further reading

Pricing Models for AI Features: Usage, Credits, BYO-Key, or Managed →