Nobody puts WordPress developer on their LinkedIn anymore. I almost didn't, on mine. There is a quiet pressure inside our industry to graduate out of it as soon as possible, as if it were a chore one performed in adolescence and is now embarrassed to remember. I want to push back on that, gently, because I think we lose something specific when we do.
I shipped my first paying website at eighteen, on a borrowed laptop, for a trekking company in Pokhara. I shipped my last WordPress site at twenty-three, a multilingual booking platform for a chain of boutique hotels. In between were thirty more — small businesses, hotels, hospitals, one publisher who wanted his Gutenberg editor to behave like InDesign. None of them are on my portfolio in the way a side project is on a portfolio. All of them taught me something I haven't learned from anywhere since.
The first thing was: the user is the point.
In WordPress, the user is rarely the person you're impressing on Hacker News. The user is a hotel owner who edits the homepage from a phone, a receptionist who needs to update room rates at 11pm, a marketing person who wants to publish a blog post without filing a ticket. The user is not technically sophisticated and has no patience for your cleverness. If you ship something the user cannot operate, you have shipped nothing.
This is, I now realize, a useful constraint to internalize before you ever touch a system that has more than three users and a Slack channel. It ruined me for the brittle product cultures that show up later in a career — the ones where the spec is the truth and the user is a customer-success problem. I never quite shook the suspicion that those cultures are wrong.
The second thing was: caching is everything, and nothing is cached.
I cannot count the hours I spent in the early years not understanding why my change wasn't appearing. Some piece of infrastructure was always lying to me — the browser, the CDN, the WordPress object cache, the OPCache, the page-builder preview, the hosting provider's mystery layer. The fix was almost never the change I'd just made. The fix was finding which lie was the loudest.
That habit — assume nothing, verify everything, and don't trust a single layer's "I have the latest" — carried over to every system I have touched since. When something doesn't work and you can't see why, the answer is almost always that the thing you think is happening isn't.
The third thing was: ship the boring path.
WordPress imposes a discipline almost no modern frontend stack does: you cannot make every decision from scratch. The admin patterns are fixed. The plugin ecosystem expects certain shapes. The hosting environment has opinions. There is a way things are done, and the further you stray from it, the more pain you will eat over the next ten years of maintenance.
A working site that earns money beats a beautiful repo that doesn't, every time.
Building inside someone else's constraints — instead of choosing your own from a menu of frameworks — is a skill you can lose if you only ever work on greenfield projects. WordPress kept me honest about the difference between necessary and indulgent novelty. When I now reach for a new tool on a real project, I ask the same question I learned to ask in the WordPress years: does this earn its keep?
The fourth thing was: users don't read modals.
One of my clients accidentally deleted an invoice on day four of using a Django app I'd built for her. I had a confirmation modal. She had clicked through it without reading. That night I added a soft-delete system, and in the two years since, the modal has prevented zero accidents and the soft-delete has saved her about a dozen times.
I learned this rule in the WordPress years — every confirmation dialog you add is a tax that the careful user pays and the careless user evades — and it has held up everywhere. The right answer is almost never the warning dialog. It is the undo button. (LLM products take note.)
The fifth thing was: the boring tools win.
WordPress is unfashionable, but it is also forty percent of the web. PHP is unfashionable, but it ships. jQuery is the punchline of half the Twitter threads I read, and is also probably running on the website of the company currently rejecting my CV. Boring tools have inertia for a reason. They have been worn smooth by use.
I'm now interning in AI, where the temptation to reach for the newest thing is constant and the cost of being wrong is real. I keep myself honest with a small mantra borrowed from those WordPress years: boring tools, interesting problems. Spend your novelty budget on the part of the system where novelty is actually the answer. Everywhere else, ship the boring path.
If you'll let me get sentimental for a second
The WordPress years were not the years anyone congratulated me on. They were the years I learned the parts of the job that no bootcamp teaches — how to talk to a client, how to bill, how to stop a site from going down on a Sunday morning, how to admit when something is broken because of you, and how to fix it before the client notices. None of that is in a CV bullet point. All of it is what makes the next ten years of work possible.
I'm still glad I started where I did. If you're starting now and you're embarrassed by where you are — don't be. The unfashionable beginning is sometimes the one that teaches you the right things.