The follow on from Part II: It Started with a Blog Post
In the entire lifespan of Ghost to date, mid-November 2012 was probably the most daunting. It was like I had just suggested a recipe for a new cake, and hundreds of people all immeditely chimed in with what ingredients should be used and how long it should be baked for and at what temperature.
I originally thought it would be best to make it a fork of WordPress, in PHP. Another guy wanted to help me build it from scratch in Ruby on Rails. Someone else had already built a working prototype in DJango. Another person wanted to know why I didn't just make it a static site generator. Is it going to use Angular.js? James wanted to know.
I didn't have the answers.
It's a lot easier to talk about code than it is to write code. Almost everyone can do the former, but when I asked people whether they could commit to sitting down and executing on their proposed idea… the numbers thinned out pretty quickly.
So, after a lot of thought, put together a follow up proposal for how we might be able to start building this thing. First as a WordPress plugin, as a proof of concept - and later as a completely new platform. Next step: write some code.
Hannah and I have known each other for about 7 years now. In 2006 we were both young, naive web designers posting on a forum (remember those?) about the basics of HTML/CSS (me) and the basics of PHP (her). To cut a long story short, she banned me from the forum in the end (I had a propensity for saying "fuck" too often). But we stayed friends all the same.
As our careers progressed, I became a freelancer and started contributing to WordPress and Hannah cashed out on her agency job for startup life at MOO.com. In 2011 we put together a podcast with our other friend from the old forum days: Rob Hawkes. It was called ExplicitWeb. We mostly just talked about design and code and said fuck a lot. It was a lot of fun.
So, as it happened, at the end of 2012 Hannah and I happened to be exchanging emails about something completely unrelated. On November 20th she asked how Ghost was going, and I replied…
RE Ghost - I'm designing more mockups, lots of them. What's massively failing is finding anyone to do the first commit of back end code for the plugin. About 6 people have said yes, but no one is actually doing anything... So... if you have time...
It was a long shot. And yet, to my amazement and delight, 24 hours later, I received ghost-plugin.zip as an email attachment as well a list of demands for me to turn my fluffy ideas into a proper list of functional requirements.
And you see that's what's amazing about Hannah. Where many incredibly kind people showed up with ideas. She showed up with code.
While it was a very humbling experience receiving literally hundreds of emails from developers who all wanted to help in some way. It was also a rather daunting process to try and decide on so many unknown variables. Working with the wrong person could've brought an end to the project before it even got started. And how do you know what the right or wrong person is, if you don't really know them?
By contrast, I knew Hannah very well. We'd worked together before, and I'd come to respect her as one of the most talented developers I'd ever come across. The fact that she was willing and able to fit Ghost in around her busy MOO schedule, which involved 4 hours of commuting and 8 hours of work every day (that's 60 hours a week), was monumental.
She said. In hindsight, rather fittingly.
Over the following weeks we (but mostly Hannah) worked hard to bring this initial WordPress plugin to life. "This should be relatively simple." We thought. We wanted to drop the /wp-admin/ UI entirely and build our own admin system from scratch, hooking into WordPress to use the same functionality as normal for the back end. In theory, this seemed like a great idea. I'd discussed it with a few of the WordPress core team, and it seemed like a reasonable starting point.
In practice, however, we hit roadblock after roadblock.
I think it's fair to say that WordPress was never intended to be used in this way. When the b2 content management system was first created it wasn't structured with this type of completely abstracted use in mind. When WordPress built on those foundations years later, neither did it. The cracks began to show far quicker than we imagined. We couldn't do all the things we wanted, and it was desperately messy. Hardly inspirational or groundbreaking stuff.
There was a bigger problem, too, which ran far deeper than just the code.
Many people initially misunderstood the purpose of Ghost as just being an "admin skin" to make the back end of a blogging platform have a slightly more user friendly feel to it. But the admin UI was only ever a symptom of the core problems which I wanted to solve.
My problem with WordPress never simply that "The admin UI was too complicated" - it was that WordPress itself is too complicated. I envisioned stripping away all of the CMS bloat, the years of inherited technical debt, the multitude of dated features which are never used. I envisioned building up something new, powerful and - most importantly - focused.
Time after time, we weren't just running into technical constraints with our little plugin. There were philosophical ones too. We were still working within the same limitations of PHP which had lead to many of the frustrations in the first place. We were still stuck with political crowbar that is the GPL license. We were still stuck inside the same theme and plugin eco-system, with all of its own issues and limitations. Most importantly, we were still building on top of a codebase which we ultimately had no influence over.
It felt a bit like taping an ice-cream cone onto a donkey and calling it a unicorn.
So work ground to a halt. We needed a fresh approach. It was an important learning experience, but we knew we'd have to do better than what we had so far. Come 2013, we would rip up the rule book completely.
But that's a story for next time.