I've been asked several times why we decided to finally pull the plug on our event ticketing plugin. Rather than have to tell the story over and over, I figured I'd just write it up so I could just send people the link when they ask. So, as requested, here's the story of how we came to pull the plug on the Event Ticketing Plugin.
In the Beginning
A few years ago, my company wrote a plugin that let site owners sell tickets for events right from their website. It had some rough edges, but it worked. People were using our plugin to sell tickets to thousands of events. We received a ton of great feedback about the plugin over the years. Mixed in with the feedback was requests for more features. Here is where things started to decline.
I told you that the plugin had some rough edges. One of the roughest edges was how some of the data was being stored behind the scenes. It would make adding new functionality challenging. So, after a couple years of limping along without a lot of new development on the plugin, we finally got a group of us together last January and started to rebuild the plugin from scratch. This was no small task, as you might imagine. 3 of us worked 12 hours a day over the course of 3 days and at the end of the weekend we had a solid base. We felt we were in the neighborhood of 60-70% done with the project.
The problem is, we all had other work to do. So, come Monday, we went back to the real world and got back to work. We had set aside some time on Monday evenings for us to hop online and code away on the project. But it wasn't too long before our team of 3 became a team of 2. Really, since I was mainly working on smaller front end pieces, the coding was in large part being done by just 1 person.
Progress was getting harder and harder to see.
One plugin becomes two
Our initial plan was to release the new version as an upgrade to the original plugin. Which meant, we needed to have one hell of a conversion script that would convert the data from the old data storage method over to the new. We worked on the conversion script for weeks (months?). And even still, it wasn't perfect. The longer it went, the more scared I got.
What scared me was the idea of upgrading all our existing users and having something go drastically wrong and maybe even losing their data. If they were right in the middle of sales for an event, this could be tragic and it would make me feel terrible. I knew we could do more testing and probably solve for 90-95% of all cases, but there were always going to be fringe cases and my biggest concern was that if something big went wrong, we'd have to basically drop everything else we were doing (client work) to fix the issues.
This is when I made the first big shift in direction. Rather than releasing it as an upgrade, we'd be releasing this as its own separate plugin. Two plugins, two code bases, two completely unique sets of support requests. Even though I know this was the right thing to do as to not screw our clients, had to do over again, I don't think this is how I would do it.
Screw it, it's time to ship!
Since we decided to release the new plugin as a separate product, we knew that we could release the plugin sooner because it would have a much slower adoption rate. Our thought was that we could get the product in the hands some real users and get their feedback. We had tried releasing a beta version and, as expected, we received very little feedback. I get it, people are busy and this plugin isn't exactly something you install and can check out in 5 minutes. There is a lot to it. So, if we were going to get any consistent outside input, it was going to have to be from real users.
We removed the data conversion piece, wrapped up a number of smaller items and decided that it was time to push it out the door. It had been nearly 10 months since we started the rewrite, but it had been closer to 24 months since we first started talking about rewriting it. Holy shit did that feel good.
Of course we received a couple bug reports. Nothing big. We knocked them out, pushed out an updated and things seemed good.
It starts to hit the fan
Even though we released it as two separate products, and even told people that it was NOT an upgrade to the previous version, some users found the new version and right in the middle of their current event ‘upgraded' to the new version. Let me just tell you, the results were not good.
Then, we received a support request that pointed out an issue that we didn't know about. I entered it in to our ticket system like normal and assigned it to Justin. He took a look at it, looked at some code and reported back that the issue was not small. It was a section of functionality that somehow we never noticed didn't get built.
Let's jump back in time
A few months before we released the new plugin, back when I was starting to get scared about the fall out from releasing such a major upgrade to thousands of users, I floated the idea of stopping development on the plugin. I knew how precious little time we had and our once a week hack sessions really felt like it was difficult to get any real traction with the plugin. We discussed it, but ultimately I think our pride won out and forced us to keep plowing forward.
I should have caught on earlier
You know how when you are excited about a project, you'll find time to work on it as often as possible? That's how I am right now about a plugin I'm working on called WP Time Tracker. That is also how I was about Event Ticketing… at the beginning. But, as development slowed, and as progress slowed, so did my drive for the project. The biggest problem with that being that I was the one who was the biggest champion for the Event Ticketing plugin. I can see the amazing potential for the plugin; pro versions, paid add-ons, etc. I can see this being a huge money maker. But if I'm not thinking about the product day and night, why should I expect anybody else is?
As Justin told me about the big bug, I could hear it in his voice. I wrote about that conversation we had on 9seeds:
I asked Justin, “Are you still excited about working on Event Ticketing?” He didn’t even have to answer. When it took him more than 2 seconds to answer, I knew he was looking for the right way to let me down easy.
We spent the next 30 minutes talking about it, trying to rationalize keeping the plugin around. But ultimately, I explained it like this: “At the moment, the Event Ticketing plugin is a mediocre product. Since you are the person doing 90% of the development, if you aren’t excited about the project, there is no way we will ever make the plugin anything other than mediocre.”
Let me say that last part again in bold this time…
… if you aren’t excited about the project, there is no way we will ever make the plugin anything other than mediocre.
Get an Outside Opinion
Justin and I ended that conversation with “let's think about it and discuss it next week.” But I was pretty certain I knew what needed to happen. Still, I wanted to talk to somebody who had no skin in the game. I reached out to a good friend and we hopped on a call. I explained the situation at great length. He just listened. I told him probably way more than I needed to. He just listened.
When I was done blabbering on, he took over. He threw out a few options as to how we might be able to salvage the plugin with new resources. He talked about targeting the plugin at a very tight niche and investigating to no end. He talked about how I might go about handling an end of life plan for the plugin. All of it was fantastic advice.
Did you notice that at no point did I say that he told me what I should do? That never happened. Instead he laid out options that I might not have thought about that could potentially salvage the plugin in one form or another, but also gave me some things to think about if I decided that killing the plugin was the thing to do.
I got off the phone and immediately sent a text to Justin. We didn't need to wait until next week. We both knew what needed to be done and waiting another week wasn't going to change that.
In the end
We set out to do something and it didn't happen. Well, not how we wanted, anyway. And for that, I am bummed. I know we did the right thing. But that doesn't help that feeling of failure.
But instead of focusing on the negative, I'll focus on what we did accomplish. We built a plugin that was downloaded nearly 25,000 times. Tens or even hundreds of thousands of tickets were sold through our plugin. We saved event organizers a ton of money when they were able to sell tickets without having to pay a ticket processing fee.
But in the end, all good things must come to an end.