The story of Herbert: why it required a complete rewrite

After a rocky start, our plugin framework now supports multiple plugins, includes brand new documentation, and features an example plugin.


I’d spent most of the night laying awake wondering if I’d ever get over my feeling of Imposter Syndrome. It was a cold November morning in 2014 and the sense that I wasn’t a ‘real’ developer had plagued me for the entire year.

I’d been struggling with a bad environment on one of our larger contracts at Big Bite, and as I drove to the office that morning I knew I had to change something. I had to find a project that would make me fall in love with coding all over again. Overcoming my anxieties about trying something new felt impossible at the time and I realised that I was going to need some help.

So I got together with the other co-founders of Big Bite and explained my big idea – I wanted to create a framework for building WordPress plugins. With 80% of our projects written in WordPress, I wanted to find a way to pull our Laravel developers into those projects more easily, without the need to bring an entire new platform with them. But of course, it wasn’t as simple as that…

I was immediately faced with questions that I didn’t have all the answers for; how long would it take, who would build it, surely this must already exist?

So, I made a big request: one month to work on the project on my own, during office hours, and with three key conditions:

  1. No Clients – I needed the space to experiment and work without any client constraints.
  2. No Rules – I needed to find my own way, free from PHP style-guides or anything else.
  3. No Expectation – I needed the option to fail without consequence so as not to play it safe.

Two weeks later and to my surprise, I’d managed to hammer out a first version with only half my deadline spent and just a few late nights. But my uninterrupted month wasn’t meant to be. Client projects began to get in the way and it wasn’t long before the documentation and branding for my experiment had to be put on the back-burner.

It wasn’t until after the christmas break that my project revealed itself publicly, with a tweet on the 28th of January 2015:

Introducing Herbert: The down-to-earth, open-source @WordPress plugin framework — @HerbertPHP

— Big Bite Creative (@BigBiteCreative) January 28, 2015

Something had changed, my experiment was working. This was my first real attempt at open source, but instead of the anxiety I’d previously been plagued by, I felt excitement. As I sat at my desk watching the github stars increase my thoughts were full of possibilities and opportunities – maybe it’ll do so well that I’ll get asked to speak at conferences! Even my non-technical co-founder Iain was interested and keeping an eye on the climbing number. We wondered whether we’d be able to hit 100 stars, which seemed like a massive milestone for us at the time, and as we watched the positive feedback began to flow in about the build:

check out the @HerbertPHP #wordpress plugin framework, some beautiful code architecture there!

— David O’Trakoun (@davidosomething) January 30, 2015

Best name and icon ever 🙂 WPTavern: Herbert: A New WordPress Plugin Framework #wordpress #feedly

— Daniel Pataki (@danielpataki) February 1, 2015

We hit 100 stars on Github 4 days after launch. We hadn’t revolutionised the tech world, but I felt validated. Other people thought that I’m smart, a good developer, a real developer – goodbye Imposter Syndrome.

But, there was a problem… Herbert was broken.

A namespace issue meant that only one plugin using Herbert could run at a once, ruling out the possibility of anyone using Herbert to build plugins for distribution. Encouraged by the release and positive feedback, I naively thought we’d figure out a way to solve the problem within the next few days. I was wrong.

It quickly became obvious that the only proper solution to the issue was a complete rewrite of Herbert. It was an option that had two major disadvantages:

  • It was going to require significantly more complex code to work.
  • This couldn’t just be a weekend project. It needed a serious commitment.

So we buckled down to solve the problem and, with the help of my colleague Connor, we had completed a basic rewrite within two weeks. It was great progress but, at the same time, I felt like we were losing the simplicity that was at the core of my original vision for Herbert. I felt discouraged again and as result I went quiet, avoiding the challenges it was posing. I’m sorry to anyone who tweeted and raised issues on Github during that time, but I’m pleased to be back and I’m not going to let it happen again.

On Saturday the 23rd of May I was hungover. Big Bite had celebrated its fourth birthday the night before and I wasn’t exactly feeling my best. To my surprise though, I found that I was making headway with Herbert. I was beginning to find the healthy balance between the awesome complexity of the initial rewrite and the simplicity that had always been at the project’s core. And so, bleary-eyed and fuzzy-headed, work continued…

I’m happy to announce that as of today – the 11th of June 2015 – we now have a stable version of 0.9.8 that supports multiple plugins, has brand new documentation, and also has an example plugin.

I want to say thank you to everyone who has used Herbert so far and I hope you’ll give this project a second chance. I did, and it was definitely worth it.

Interested in learning more about enterprise WordPress?
Get in touch with the team today