8 ms·
I was working at EllisLab on ExpressionEngine when Craft was first released. I don't know what things were like over at P&T, but it was interesting to witness
by dbingham 4y ago
I was working at EllisLab on ExpressionEngine when Craft was first released. I don't know what things were like over at P&T, but it was interesting to witness from inside EllisLab. I would say Craft v ExpressionEngine is a case study in what happens when you don't pay your techdebt. Even if you have a lot of good ideas, if you don't stay on top of your techdebt, someone can always come, start fresh, cherry pick and build on/expand the best of your ideas (leaving you to deal with your bad ones), and quickly surpass you.
ExpressionEngine had a lot of great ideas in it, but its code was an absolute a mess, and its leaders had no understanding of the concept of technical debt. They just kept racking it up until, by the time I joined in 2012, any changes were expected to take months because the code was a nest of interdependent singletons. While I was there, we spent a lot of time basically responding to the moves of P&T.
If you weren't part of the ExpressionEngine community, then you might not know that P&T started out making paid add-ons for ExpressionEngine. I might be misremembering, but I think relationships and matrix were their main ones. One of the first projects I was given as a new engineer at EllisLab was essentially making an native relationship field for ExpressionEngine in response to P&T. If I remember correctly, we knew Craft was coming and were trying to undercut P&T even though they were one of EL's most popular plugin makers.
We ended up taking on a rewrite for EE3, because the techdebt was that bad and refactoring wouldn't have got us where we needed to go in time. In retrospect, I'm not sure if that was the right choice, even though I was one of the strongest voices in EL arguing for it at the time. I definitely thought it was the right choice at the time, but I was also a really inexperienced engineer. I don't know if there were any right choices though. Thinking back, I have a hard time imagining a path forward that didn't involve some level of rewrite. It's one of those experiences you can go round and round in your head about wondering whether you did/argued for the right things. In the end, I think EL's fate was already sealed by how much techdebt they'd racked up.
The rewrite took a solid two years, Craft was released first, and was better than EE2 in every way (and EE3 if you ask me), and thus began the death spiral. EllisLab is no more (though the rewritten ExpressionEngine lives on as an open source project maintained by one of the agencies that used it), and Craft is clearly still around.
- brandonkelly 4y agoInteresting scoop from the other side—thanks Daniel! From the outside, there were some weird vibes coming out of EL back then – they’d taken a bit of an adversarial tone with the community, which had us wondering whether it was a good idea to have all our eggs in the EE basket. Then an EL designer publicly ranted about P&T, calling us a “direct competitor”, on the EE Podcast, when Craft was just a twinkle in our eye. Which ironically, was the exact moment we decided to really commit to building a CMS. Self-fulfilling rant I guess :)
- dbingham 4y agoCheers, Brandon! I figured, since EL is long gone at this point, there was no harm in offering my postmortem perspective on what happened there. That podcast was either before my time or maybe just when I was starting, but yeah, that was definitely the mentality when I was there. There was also a bit of a siege mentality. My onboarding involved being instructed to join twitter, but warned that the community would be mean to me. Thing was, I found most of the criticism coming from the community to be warranted and valid and thought we should have been listening to it, instead of writing it off as a loud, mean, disgruntled, few. Either way, you guys did a great job with Craft!
- brandonkelly 4y agoThanks dude <3
- kevincupp 4y agoHey Daniel, I remember that strong voice. You definitely had the right architectural instincts, basing everything on singletons in CodeIgniter was not great, plus all the other countless mixing of separate concerns, definitely made some things difficult. From my perspective, the whole lack of progress was not prioritizing the right things in the right way, i.e. there should have been an intense focus on delivering iterative value quickly, but the right value, like things the market wanted and that would actually make a difference in decisions about whether or not to choose another solution. I think we could have managed that even with the tech debt. My current project also has a lot of tech debt (some worse than EE), but we're still able to grow the business and are currently on a trajectory to become the market leader because we're still able to get the right value out quickly (well that plus good marketing, sales, etc). That's not to say we're just piling on more debt, we try to leave things better than we find it, new code is specifically designed for easy maintainability and extendability, and we still take time to invest (but not 2 years). But to me it says maybe we can have both, but it's all about priorities and trade-offs, and we just spent too much time on the wrong stuff.