I had this realization the other day - and it blew my mind. Eight years is a lot of time! To put that into perspective: 20% of new bus...
I had this realization the other day - and it blew my mind. Eight years is a lot of time! To put that into perspective:
We're almost there, at the 10-year mark! More relevant perhaps is that most Laravel admin panels don't survive their first 2 years (we'll follow up soon with an in-depth article, it's super-interesting). But not Backpack, we've been around for 8 years now and we're still alive and kicking! š
Weāre very fortunate to be here, writing this post. I want to thank EVERYBODY who bought a Backpack license, everybody who contributed to our codebase and everybody whoās told people about our software. I am perfectly aware itās thanks to YOU we get to do this, and weāre very VERY grateful. We literally couldnāt do this without you. š You rock!
To celebrate these 8 years of Backpack, weāll do two things:
So here goes⦠hereās The Story of Backpack, including the 3 years that preceded it:
āā
In May 2016, on my birthday, I distinctly remember my sister coming over⦠and me ignoring her for hours. Why? Because I was in a very productive coding spree⦠I had been so for a few weeks, ever since I decided to fix āmy admin panel problemā, once and for all. You see⦠my web dev agency was small back then - we were doing mostly small websites and web apps. We were starting a new project every month, if not multiple a month⦠and every freakinā time, we had to build the same stuff all over again for the admin panel: auth, datatables, forms. I had a new project coming up, and if I remember correctly⦠my CTO back then (Eugen Tudorache) gave me the green light to build an admin panel library. So I absolutely ran with it. We were using CodeIgniter, and there was this great library called GroceryCrud which solved a lot of the problems we were having. So I put those together, did a lot of wiring so they matched what we usually needed, and boom: Cornel was born. We loved it, cared for it and used it for years, but⦠we never open-sourced it. Not from some evil plan of having an edge over competition (hell no), but because⦠like many devs⦠we were afraid to make our code open-source⦠and to be frank⦠we didnāt even know how!
Fast-forward a few years to 2014, and we decided to move from CodeIgniter to Laravel. It was my colleague Cristian Toneās job to rewrite the whole thing, in Laravel. He did - and we called it Viorel. And with that, the core of the Backpack you know today was born. Hell, a few years ago I found a few comments in the code that made me realize⦠that bit of code is from back then, from 2014! The comment read something like "sync function, only Tone know how this works" š It was truly a blast from the past. We used Viorel for a while, until we got the courage to finally polish it, generalize it and open-source it.
In 2015, after making the decision to rewrite and open-source it, I remember talking to my partner (and CEO of our web development agency) Andrei Iordache about it⦠heās a world-class copywriter, and functioned as our creative director⦠so naming was kind of his thing. We did some back-and-forth when he finally came up with a brilliant name. He said⦠āFuck it, letās call it Dick! I bet people will like itā.
You see, back then the admin panel wasnāt a Composer package. It was an entire Laravel 5 repo⦠and we had the unique opportunity to ask people to do git push dick
and git pull dick
Ā š It sounds immature, doesnāt it? Well for a couple of 20-year-olds⦠ok fine itās immature for that age too⦠but we had fun, ok?! š I especially remember how much fun it was to write the website copy for it (see the old Dick website here). I have NO REGRETS over that name. In fact, I think itās thanks to that name that some people tried it! And people did try it! Turns out⦠some people liked dick! And some people absolutely LOVED dick. They couldnāt get enough of it!
So yes, Dick started growing. Seeing people actually care about and use my software⦠that was enormous step ahead. You see, I had been trying to move from Ā« servicesĀ Ā» to « productĀ Ā» for years by then. I had built and launched about 7 products⦠all failed miserably⦠some stillborn, some died within months, some took years of work and still failed. So I had lot of experience of failing at a product⦠not much experience running a « successfulĀ Ā» product. And at the time⦠and for our level⦠it was a successful product! People contributed, used it and promoted it. Apparently people got a taste of Dick, they couldnāt get enough of it. Told their friends to try it!
But as happy as I was with Dick⦠there were troubles that needed to be addressed:
Problem 1. Devs loved the name at first⦠but then got sick of it fast. In fact, multiple people said they love it in passion projects, but canāt use it for clients, because of the name. They were scared their clients might see it, and think they put it there themselves to mess with them. It wasnāt a professional name.
Problem 2. It was a Laravel installation, with a lot of things - the CRUD library, UserManager, NewsManager, LogManager and more. You couldnāt pick and choose what you want. Plus, updates were pretty difficult to get⦠and it sometimes overrode your custom code. Ouch! By then, Composer had proven itself and I was eager to split it up into distinct packages, one feature each.
Problem 3. Time! I was all nice and dandy that people were using my software, but it turns out⦠collaborating with dozens of people every day⦠takes a lot of time. For a year or more, i was working 16h days⦠first 8h for web dev clients⦠then 8h for Dick, for free. I was lucky I was in my prime - I definitely couldnāt do that now. But after a few burnouts I realised⦠this isnātĀ sustainable. And it isnātĀ fair. We need to find a way for Backpack to make some money, and become more professional.
So I thought if a different name⦠and I came up withā¦
Seemed like the perfect name for a collection of PACKages that help you build BACKends. Plus⦠I wanted Backpack to truly represent its physical namesake - to be useful, versatile and feature-packed. To have everything you need in your journey.
So I launched Backpack with the differences above⦠and after a lot of deliberation with a few heavy users⦠decided to charge for it too. Since our audience was now also professionals who build stuff for clients, we had dual-license:
Some napkin math told me that would be enough⦠that 100 paid projects per month would basically cover my time spent on it (I didnāt value my time back then š ), and that was good enough for me.
And with a lot more work and patience and care, Backpack took off. We were fortunate enough to get A LOT of help from the community - and I do need to give a big shout-out to Owen Melbourne, David Lloyd and Abby Jansen here, who really helped out almost daily, for months or years. Felt like PRs and issues were coming in⦠faster that I could read them. Our charts for number of downloads was going up only. We were talked about in all Laravel-related communities, despite some choices our stack being despised by some (ehem⦠jQuery). We were doing something VERY right.
And yet⦠we were doing something very wrong. We were making a few hundred bucks per month, at most. People were using Backpack a lot (we had download stats now) but they werenāt paying for it. Lesson learnt: if you donāt force someone to pay for a product⦠theyāll find a way not to pay.
So as good as Backpack v3 was⦠something had to change. Sure, we needed a version bump in our dependencies⦠and to push some fixes that contained breaking changes⦠but more than anything⦠we needed a business model change. We needed to actually start making money. I had years of 16h workdays by now, and enough burnouts that I stopped counting. And despite not making enough money to cover my time... we were being judged as a paid product.
I donāt quite remember what it was that v4 brought new in terms of features (later edit: it was Bootstrap 4, Widgets and more) but I remember what it did have in terms of business: We kept the dual-license, but we started actually enforcing it. Both free and paid users needed to have a license code, for their software to work. Free users could get it by filling in a form⦠paid users could get it by purchasing it (it should have been $39/project by now).
Fun fact: the license-checking mechanism⦠only checked that there was a license key⦠not the actual license itself š Itās ok to say that now, right? I thought⦠if there are people who are upset for us forcing this license-check mechanism⦠Iād give them an easy way to hack it⦠and continue using it for free.
That doesnāt sound very smart, does it? I just said a lesson I learned in v3 was that « if you donāt force people to pay, they wonātĀ Ā». Alas, I didnāt learn it well enough. But... it worked! More people paid, because it wasnāt public knowledge the licensing system was a ruseā¦
We could grow our team a bit⦠this is where our oldest core team member (outside me) came in - Pedro Martins. Pedro had fallen in love with Backpack and was submitting contributions anyway, so I was eager to ask thim to come onboard, and help me carry the load.
But our licensing system also generated another problem⦠we were manually approving free licenses! Every day, dozens of people were applying to get free licenses. So it took me hours every day to go through them⦠judge them⦠and issue the licenses. We had automated it as much as possible, but it wasnātĀ feasible for us to keep doing this. Every free user was costing us time to accept⦠so much time in fact, that we ended up hiring someone to do this alone - part time.
Sounds like a bad system? Thatās because it is! So bad in fact that we were covering our small (very small) salaries⦠but thatās about it. We couldnātĀ think long-term or do any useful things to level-up our software, because we were spending all of our time on the free users.
Did we try other things? Of course we did. We tried consulting. We tried ads. We tried many things. Nothing worked. So after 2 years of grinding it⦠we saw it for what it was⦠a bad business model. So we decided in the next version⦠weāll do things differently.
We finally took the leap, and changed our business model form dual-license⦠go open-core. Our most used features would be part of the open-core, which would be MIT-licensed⦠and our other features would be addons - some free, some paid.
This was a HUGE boost in revenue. It provided the financial security we needed, to know we can do this for living, and lead decent lives. It allowed us to increase the team again, bringing in first Antonio Almeida⦠then a year later Karan Datwani, Jorge Castro, Mauro Martinez, Mohammad Emran and Munjal Mayank. Add to that Vali Dumitrescu for the admin stuff and⦠yes, we tripled our team in one year 𤯠We were on a roll! And thought it didnāt work out with all of the people here, we were pretty proud of what we had achieved⦠and the amount of stuff we were able to put out. For the first time ever⦠we were doing things we had only dreamed of: videos, blog posts, Twitter posts, new features every month š¤Æ
Did we need to change anything at this point. Yes. We wanted to refactor everything. To modernize it, and lose some tech debt we had gathered over the years. But we couldnāt do that. Our customers were very clear with their feedback - the v4 to v5 upgrade was brutal to those who had complex projects, so going forward we should keep breaking changes to a minimum.
Needing to do some breaking changes anyway and bump dependencies⦠we took advantage and polished a lot of our code, removed old versions and refactored what was needed, in order to be able to build the most-requested features.
We added themes⦠which was a flop. We expected people to create custom themes⦠but noone did. We added custom operations⦠which was a flop. We expected people to create custom operations, not a lot of people did (though itās really powerful feature).
So one thing we learned in v6 was that sure⦠customers can request features⦠but that doesnāt mean you must build them. A lot of times⦠itās better to help customers scratch their own itch in their projects, rather than build and maintain a feature for ever⦠because 1% of your users might use it a few times. Going further, weāll be much more careful with doing BIG features and rewrites. The way we see it, Backpack is feature-packed already⦠in fact, thatās one of the reasons people love Backpack - because it offers out-of-the-box most features an admin panel will need.
So weāre happy to consider⦠Backpack has reached maturity. Yes weāll still add features - in fact weāve been launching new features every month - Antonio and Pedro make sure of it š But we wonāt be bringing any major changes any time soon. In fact, the direction is the opposite - for Backpack to become a « boring technologyĀ Ā» like PHP, Laravel and jQuery. Technologies you know you can rely on, because theyāre battle-tested, time-proven and stable.
And that takes us to today. In 2024⦠Backpack is doing good. Sure weāre not becoming millionaires any time soon. Sure we have a lot of stuff to do, optimizations, refactors, restructuring, recalibrating. But overall⦠weāre proud to be in the position of still being here, 8 years later. And having no doubt weāll be here to celebrate 10 years and 15 years and more. Weāre a small but sustainable software company⦠and we expect to grow a few times over after we learn some marketing šš¤.
Thank you for being part of this journey. Thank you for contributing, with your money, time, ideas or attention. Weāre super-grateful to serve customers that are just like us - itās a dream come true. And thank you for reading my rambling so far⦠I did NOT expect you to š But if our history was interesting to you⦠so will our future. We have BIG plans, so keep an eye on us.
To end, yes, weāre doing a huge promo campaign next month. Subscribe to our weekly blog digest to find out when it starts, and grab yourself a hugely discounted admin panel. And feel free to buy years in advance at that discount, weāre not going anywhere.
Thanks for being a part of this. Cheers!
Subscribe to our "Article Digest". We'll send you a list of the new articles, every week, month or quarter - your choice.
What do you think about this?
Wondering what our community has been up to?