After working with Drupal for almost 3 years, I really need to vent somewhere how Drupal sucks. For a backgrounder, I'm more of a sysadmin type rather than a developer or a designer.
Just to be upfront, I clearly chose Drupal for a reason and I believe that Drupal is still the right choice, I love its strengths and it's clearly a leader in many respects. But at the same time, what I want to address are things that Drupal really sucks at doing and it really shouldn't have to be. And I'm not talking about UX at all.
Image support: Time and again I get complaints about how we can't do stuff with images like other sites (e.g. WordPress) do. Drupal 6 does not have image handling in core and I ended up spending a long time figuring out how to do images in a futureproof way. Drupal 7 has image handling in core and that's wonderful, but still, image handling has been taken such a back seat for so long that it really make Drupal lack behind the competition. I tested dozen of image gallery modules and most of them are like a throw back to 2005: no AJAX, no lightbox, no fancy slideshow. If I need anchor image for my node type, I have to define everything from scratch. Not that it's difficult, it's the fact that there's no uniform way to do it and such feature is pretty much expected of any CMS.
Too many modules: This is supposed to be Drupal's strength and it still is for the most part. But it's coming to a point where:
- There are so many modules that I have to test dozens of very similar ones to figure out what's best for my project and still come up short.
- The Drupal philosophy creates a scenario where it's very common that it requires several modules together to do one simple thing, which adds even more complexity. Pretty soon I find myself using 20, 30 or even 50 modules
- It's very difficult to know whether a module will be maintained. With so many modules installed, the risk of relying on a module that might be left unmaintained become increasingly higher, and so is the risk of a minor update (on core or modules) that will break something.
- It's understandable that Drupal wants to provide a framework and doesn't try to make any decision for you, but it's becoming so extreme that Drupal core provides so little of what's expect of a modern CMS and it that so much testing and configuration just to do those things that it's getting very frustrating.
- Many important, widely used modules (Views, Panels, etc.) aren't part of core, when other modules will make it more of a priority to work with them if they were in core. E.g. to this day I still have i18n issues with Views.
- If these modules can't be rolled into core, it really helps if there's a "preferred" status for those modules. E.g. Every user expects a WYSIWYG editor, Drupal has many WYSIWYG modules yet all of them has shortcomings. I'm all for choices, but it's all too common that there are too many modules to do similar things with not one of them that stands out.
- I don't think I'm unique in that I'd prefer a widely supported standout module even if it means I have to live with some limitations.
Over-Flexibility: Some modules (e.g. Views and Panels) literally have a hundred config options for one page. It's simply nuts. I use Display Suite to do node layout and that module adds 6-7 layout pages for each content type. The LightBox2 module adds dozens of formatters to the edit form even if you only have maybe 3-4 imagecache presets.
I'm all for flexibility, it's why I choose Drupal in the first place. But not every little thing needs to be configurable and some things are actually simpler to specify in a config file rather than the web UI. At some point the extreme flexibility becomes pure madness and completely unmanageable.
Obviously Rails shouldn't be compared to Drupal directly, but after using Rails for some projects I've come to appreciate Rails especially for its "convention over configuration" principle. Some people might disagree, but I think there's a huge value in providing sensible defaults and defining a uniform way of doing things that's based on best practices with no required configuration. It not only saves a lot of time, it leverages the community's knowledge and expriences, and developers have some standard practices to focus on improving.
Visual appeal: Most Drupal module developers are not as visually-oriented as WordPress developers, so most Drupal image/media/visual modules look relatively basic out-of-the-box. Sure the look is customizable using CSS, but it's one another unnecessary complexity added to a string of others. And no matter how often I stress the different strengths of Drupal and WordPress to my users, what Drupal is good at is always behind the scene and no average user would notice, while most of WordPress strength is in visual presentation and what the average user cares the most.
All these issues add up to the following very common scenario for me. Let's use photo gallery/slideshow for instance:
- first I have to define the implementation: image nodes vs imagefield vs file upload to a specific directory? gallery type or no gallery type? Views or no Views? (this is where a well defined best practice is badly needed)
- Then I have to test dozen of modules to see which one fits my needs. Turns out, most of them are either so behind the curve visually that I can't use them, or they plain break and doesn't work (e.g. most Views Slideshow plugins).
- After much testing it seems a Views-driven display with something like jCarousel works best, using Views means introducing a lot of config options to set just to get it to show anything at all, not to mention that I'll still have to theme the thing in CSS
At this point I'm basically throwing my hands up screaming why can't a slideshow module just work out-of-the-box? Why Drupal can't just bundle a photo gallery/slideshow? Or at least have one or 2 endorsed gallery/slideshow modules that meet the most basic expectations today?
Now rinse-and-repeat for content rotor/carousel. Rinse-and-repeat again for WYSIWYG editor.
I know most of you hate people comparing Drupal with Rails and WordPress. I don't believe they are comparable in any way, but both WordPress and Rails are widely used and create certain expectation of what a CMS or website can do and should do and how easy it should be. Time and again I ask myself why something so easy to do in WordPress or Rails is so needlessly complex and tedious in Drupal? Or that I get so frustrated with Drupal with all its configuration headaches that I ask myself why I didn't roll my own CMS using Rails or Django in the first place.
I still believe that Drupal is the right CMS for my projects: it's still one of the better CMSes for multilingual sites and one of the most flexible general CMSes out there. I love Drush. I love taxonomy. I love CCK. I think Views and Panels are very powerful indeed and there's nothing else out there like them.
But it comes to a point that after trying countless modules and all the configuration madness just to get something relatively simple to work at all becomes such a burden that it becomes no easier than rolling your own CMS in Rails or Django, while my users keep bugging me about how easy and pretty-pretty it is on WordPress.
And I haven't even gotten into the development-deployment integration issue.
Maybe I simply prefer Rails and my users just prefer WordPress and we are all expecting Drupal to be more like WordPress or Rails.
Anyways, I'm just babbling at this point. I should shut up.