The idea behind this check-in is the one Iris named in the episode: the code, when you went back to it, was working. This isn’t a code-quality check. It’s a contract check, confirming the plugin you put your name on is still doing what the readme promises, on the WordPress version most of your install base is actually running.
Previous pack: Excel training prep checklist · 30-Minute planning guide for team sessions
Step 1: confirm the install base
Open the plugin’s page on the WordPress.org directory. Note:
- Active installs (rounded to the nearest 10 / 100 / 1000)
- Last updated date
- Tested up to WordPress version
- Requires PHP
If “tested up to” is two major WordPress versions behind, your plugin is still installing on sites you have no idea about, on a stack you no longer claim to support. That gap is the contract issue.
Step 2: read the readme, then read the code
Side-by-side, on the same screen:
- Does the readme accurately describe what the plugin does?
- Are the screenshots current?
- Is the FAQ answering questions people actually ask, or questions you anticipated when you wrote it?
- Does the “upgrade notice” section say anything about the last change, even if it was years ago?
Then open the main plugin file. Read it the way a stranger would read code with your name in the header.
- Does the code do what the readme says it does?
- Are there functions that exist but aren’t called anywhere?
- Are there links in the comments or admin notices that point to URLs that don’t exist anymore?
- Is there a settings page that loads dead links to third-party services?
Step 3: functional check on current WordPress
On a staging environment running the current stable WordPress and current stable PHP:
- Activate the plugin
- Visit each admin page the plugin adds
- Trigger each user-facing feature the plugin provides
- Check the browser console and PHP error log for warnings, notices, deprecation messages
Three failure modes to look for specifically:
- PHP deprecation warnings: the plugin uses something WordPress core has deprecated. Still works; about to stop working.
- Dead third-party integrations: social-sharing buttons that point to services that no longer exist, API endpoints that have changed, OAuth callbacks that don’t authenticate anymore.
- Silent failures: features that the readme says work but don’t actually do anything because some dependency has shifted under the plugin.
Step 4: the contract questions
These are the questions only you can answer:
- If I were installing this plugin today, for the first time, would I be okay with what it does?
- Would I be comfortable with my name in the header?
- If the answer is no, am I willing to either (a) rewrite it to a current standard, or (b) remove it from the directory?
The eleven-year answer in episode 1 was “rewrite.” That’s the harder path. Removing from the directory is also a valid answer, and a more honest one than letting the plugin keep installing under a name that isn’t standing behind it.
Step 5: document the decision
In a CONTRACT.md file at the root of the plugin repo (or in a private note if the repo isn’t public):
- Date of this check-in
- WordPress and PHP versions tested against
- Findings
- Decision: maintain / rewrite / remove
- Next check-in date
The check-in itself becomes the contract: a written record that you looked, what you saw, and what you decided to do about it.
When to do this
For most plugin authors with names in headers, once a year is enough. The major WordPress release cadence is roughly twice a year; a once-a-year check-in catches the gap before it widens.
If you have multiple plugins, alphabetize them and do one per month. After twelve months you’ve reviewed everything.
Built to go with episode 1 of Sites I’ve Never Seen, and the source essay What You Owe the People Still Running Your Old Code.
Building something new, or rethinking something old?
Maybe you’re at the rewrite-or-remove decision point and want a senior read on the code before you commit. Maybe you’re building a new plugin and want the architecture reviewed before the first commit hits the directory. Either way, that’s a conversation I’m happy to have, and a discovery call is where it starts.

Leave a Reply