Edit: First followup posted.
Are you choosing a Content Management System for your next site? Allow me to throw in my two cents against Drupal. In theory, Drupal is a CMS that lets you control your site out of the box. In practice, it’s a nightmare to configure and maintain.
I recognize that Drupal might work for small sites: install the software, upload your custom theme, and start adding content. But if you’re planning a serious site, with custom features and potential for high traffic, Droople, as I’ve christened it, might not be your best bet.
Apologists may protest that module X or hack Y might fix my gripes with Drupal. I think this is irrelevant. A CMS requiring a slew of third-party mods before it can be usable is useless to someone who can code a custom Rails CMS in a day or two. (Hint, hint. Build it in Rails.)
Without further ado, here is a breakdown of why Drupal is bad for the various parties involved, together with Why It’s Bad (WIB) notes for the less tech-savvy.
Gripe #1: Drupal Stores Just About Everything in the Database
Databases are great for storing passwords, content, and countless other things. These things do not include “views”, i.e. templates. That’s right, templates. In the database. Drupal stores templates in the database.
WIB: Best practices dictate using a version control tool like Subversion or Git which, among other things, lets two developers “download” the same code so they can work on it simultaneously. Unfortunately for Drupal developers, database settings are not typically stored in version control. This means that two developers have no easy way of coordinating their work. Further, it means you’ll have a heck of a time replicating your settings across multiple servers if you have a high-traffic site that requires load balancing, or a staging server where you want to preview changes before they go live.
Another thing Drupal stores in the database? Logs. In the database. Drupal stores logs in the database.
WIB: Logs record visits to your website, together with other useful details like errors. When you get lots of traffic, logs tend to get huge – we’re talking gigs. Logs are important for debugging, but, unless you’re a high-security outfit, they do not need to be permanently stored. If you back up your database regularly – and you should – you’ll be transferring all that unnecessary data every time you run a backup. Further, you might want to grant a sysadmin or programmer access to your logs to help diagnose a problem. You don’t want that person digging around in your database for this information: one bad search query and your data is gone.
Gripe #2: Drupal is Freaking Hard to Use and Has a High Learning Curve
In the good old days, building a website meant coding a page in HTML and uploading it to a server. If you wanted to update the page, you edited the HTML, and re-uploaded the file. Then people who didn’t know HTML started clamoring for a way to edit their own sites. Along came Content Management Systems, presumably to let an admin log in, edit, save, and call it a day.
Enter Drupal. This CMS, my friends, is so bloated that it takes days, if not weeks, for the layperson to learn their way around it. In fact, my Drupal clients are so confused by the interface that they still send me content and ask me to input it for them.
WIB: The whole point of a CMS is enabling a layperson to update a website. I think the average person can learn basic HTML and FTP within weeks. So if a CMS takes weeks to learn, and you still need a techie to help you find your way around it, the CMS is not doing its job of simplifying the website update process.
Why is Drupal so hard to use? It’s a combination of bad usability and confusing navigation. An example of Drupal’s bad usability is requiring a user to confirm changes twice before they’re saved—often with the Save button located below the jump, i.e. out of view. As for confusing navigation: creating a blog post is under “Create Content” but editing a blog post is under “Manage Content” and sidebar content is under “Site Building / Blocks”. What?
Gripe #3: Drupal’s Design is Piss-Poor
Drupal has a history of security vulnerabilities and is written in ugly spaghetti code (guys, have you heard of classes? Objects? Inheritance? Oh, nevermind).
It also has poor maintainability. In other words, upgrading to a newer Drupal version breaks templates and other code you may have written for an older version. Fixing this, of course, costs time and money. Other frameworks also deprecate older APIs, but in my experience, the changes between versions of other frameworks are not so drastic, and there is often a helpful process built in to migrate your code.
Gripe #4: Drupal’s None Too Friendly
There’s been quite a backlash over Drupal’s new trademark policy, which is rather contrary to the spirit of open-source software. Why protect your trademark so fiercely, Drupal? Your product is open, and great, so why the need to protect it against sites like DrupalSucks.com? Oh, right…
Conclusion: Drupal Sucks
If you are on a low budget and do not plan on hiring a developer, give Drupal a whirl (I guess). However, if you find yourself needing an oxymoronic “Drupal programmer” to do extensive configuration, consider hiring a Ruby on Rails developer instead. Chances are, you can get a custom CMS at the same price and with half the frustration.
Edit: Oh, and Drupal’s search also sucks. Thanks YCombinator.
Edit #2: I was unclear re. the templates in the database. I wasn’t referring to .tpl files, but to Drupal Views.
Edit #3: Oh, and for the templates you do store in the filesystem, the naming conventions for overriding a particular item are horrendous. For example, block-block-5.tpl.php contains the auto-generated id in the filename. So if the node/block has a different id in a different environment (dev vs. production) you’re out of luck, and the template won’t work.
Edit #4: Thanks for the amazing feedback everyone, both positive and negative. There have definitely been a lot of helpful suggestions. I’ll look into them all and write a followup with the results!
118 Comments
A nice discussion on Drupal. One has to stay critical. Hmm. I do have 7 important remarks:
1. You claim that Drupal is an out-of-the-box CMS. It’s not. Drupal is a framework to build content management solutions. Drupal is like Lego Technics, not Playmobil.
2. And that’s why Drupal is not suitable for small web projects. On the one hand you say Drupal is complex (that’s righ), but on the other hand you claim Drupal is for smaller websites. Drupal is hard and only suites the needs for more complex projects. And if you have experience with Drupal, only then you should also use it for smaller projects.
3. You claim it’s better to build your own CMS. That’s right if you’re the only person on this planet. As a programmer you should be aware that others might continue to build on your web project. Therefore it is much easier to use any standard CMS, however complex it might be. There are plenty of Drupal developers. But you’re the only one who knows your own home-made CMS.
4. Drupal stores logs in the database. And therefore the logs are easily accessible… Cron jobs will empty the logs anytime you want.
5. Templates are not stored in the database. Views are. For huge content websites, views are like magic because you can publish your content on any given place. But views and templates are not the same thing.
6. Drupal is not user friendly. This all depends on the developer. It’s very easy to create a perfect user friendly environment. We use it for 23 websites and almost 200 editors who regularly add content without any education. Inside editing, custom wysiwyg, user friendly admin menus. You can all make it yourself, easily.
7. Drupal is spaghetti code and hard to upgrade. I think any developer believes another developers code is like spaghetti. Sure, the code can be more accessible. But on the other hand, there are over 3000 programmers working on Drupal. It’s hard to keep them all on the same track. And what is more important: proper code or loads of interesting and usefull modules.
Conclusion: You do not have to love Drupal. You may even hate it. But saying ‘Drupal sucks’ is an easy quote to put a blogger in the spotlights. Sure, Drupal needs better user friendlyness, a good search engine and streamlined code.
But if you know something about Drupal, then you’ll notice Drupal is a good framework to manage content. Drupal is excellent for multiple sites with high traffic. There are loads of modules and developers you can choose. Drupal is free and withstands many commercial products.
I’m so bored of people bashing Drupal I can’ t even be arsed to read this. Drupal is hard, but when you know it you earn good money and you can do almost anything, sometimes without writing any code. I’m lazy and I like money, and so are you, so stop being a dumbass.
The author is entitled to his opinion, but it is seriously misinformed. In haste he’s drawn up a huge variety of assumptions about Drupal and its operation that could easily be put to rest with a little bit of time with the system and it’s fantastic community of developers and other professionals working with it every day.
I think it’s equal to argue that you can do anything useful with Rails without downloading additional code to assist, whether it’s more gems, code snippets, and other things. Try doing anything but the 10 minute blog tutorial without knowing anything about Rails and see how productive you are. At the end of that exercise, someone who hasn’t spent the time to learn the framework could very well argue that Rails sucks. But that would be an equally ill-formed opinion.
My point is that these frameworks help with productivity because you invest the time to become familiar with them. Such a framework will always have shortcomings and bugaboos. The truth is tens of thousands of people are doing incredible things with Drupal every day, both as a framework and a CMS, and have found the ways around the things you list as limitations.
@Trevor,
Your ideas are intriguing to me and I wish to subscribe to your newsletter.
Seriously, you made a well-written, informed, rational comment. Thank you.
You should try Concrete5. Both user-friendly AND powerful.
Bob Bulcaen is right, you narrow minded writer
I agree Drupal is not a good choice for a large website project, it isn’t even a good choice for a small website project.
I would recommend any developer to stop wasting time with Drupal, its terribly designed and not user friendly.
Sure it’s possible to make a user friendly interface for anyone to manage content with Drupal, but in order to do that you have to spend way more time modifying the ridiculously long code in Drupal, rather than starting with a more simple CMS that gives you more flexibility.
That’s a pretty narrow view you’re putting forward here. Some of the points you present are not even valid (i. e. I never keep my configuration in code, I use features and drush).
What’s missing here at least is to weigh Drupal’s disadvantages against its advantages and if you slide in an alternative (you mention rails) you have to spell out the plus/minus points there too.
Even while I am using Drupal on an every day bases, I am the last one to defend it as the perfect hammer for every nail on the web. But this is cheap slander, I would expect smarter and more constructive insights from a blog that wears “Web innovation, entrepreneurship, usability” around its neck.
Yeah, that statement about themes is absolutely false. They are not stored in the template.
Untruths:
1 – Theme templates are not stored in the database. Views is a query builder, but even there views queries are cached, and you can export them into handling them other ways. Please show me a query builder with a GUI that does not save what you do in the database.
2 – Logs don’t have to be stored in the database. This is a setting in core. Maybe you aren’t familiar enough with Drupal to know this?
3 – You also probably don’t know about Features module and new efforts to make all configurations exportable to file which can be version controlled, deployed elsewhere, etc. It’s already working. If you’re going to include contributed modules like Views in your attack, you should include all of what contrib offers.
4 – “The whole point of a CMS is enabling a layperson to update a website.” That’s one small subset, but it’s not what a CMS is about. You want simple, go with Wordpress. Drupal can take longer to learn because it is more complex — you can do more with it. You don’t put beginner pilots into F-16s either.
5 – “An example of Drupal’s bad usability is requiring a user to confirm changes twice before they’re saved” – That’s simply not true. You can configure it that way, but nobody is forced to use that configuration.
6 – “Drupal has a history of security vulnerabilities”. So does every other software application out there. That’s why there are updates. The difference is that Drupal is very public in releasing security updates. Most other systems are not.
7 – “upgrading to a newer Drupal version breaks templates and other code you may have written for an older version.” This is true, and it’s by design. You may disagree, but that doesn’t make something “suck.” Why? http://drupal.org/node/65922 and http://buytaert.net/backward-compatibility
8 – “There’s been quite a backlash over Drupal’s new trademark policy” – You link to another FUD site. Easy to spread FUD. But if you look at the details, the Drupal policy is actually in line with most open source projects. It’s actually more lenient than Wordpress. Oh, and here’s the actual trademark policy: http://drupal.com/trademark (And afaik Dries has no intention to go after that silly site.)
9 – “Drupal search sucks.” You apparently haven’t heard of Solr search or Lucene.
I also wonder how getting a one-off custom Rails site is going to be better than working with an open source system. One of the great benefits — the real point, really — of open source is to work with shared code. Shared modules, shared core. That way you benefit from what others have done. Do you get that from a custom Rails site?
This post would mean something if you actually knew of which you spoke. Drupal isn’t perfect, but it doesn’t pretend to be, either. I’ve watched it improve immensely. That’s one of the benefits of embracing upgrade path over backwards compatibility. No need for Drupal to drag around code, thinking and practices from 2004. This is an extremely active community. Usability is improving. Take a look at Drupal 7.
I’m about to blow ur mind
function node_views_default_views() {
$view = new stdClass();
$view->name = 'frontpage';
$view->description = t('The basic front page view.');
$view->page = true;
$view->url = 'frontpage';
$view->page_title = '';
$view->page_type = 'teaser';
$view->use_pager = true;
$view->nodes_per_page = variable_get('default_nodes_main', 10);
$view->block = false;
$view->menu = false;
$view->breadcrumb_no_home = true;
$view->sort = array (
array (
'tablename' => 'node',
'field' => 'sticky',
'sortorder' => 'DESC',
'options' => '',
),
array (
'tablename' => 'node',
'field' => 'created',
'sortorder' => 'DESC',
'options' => '',
),
);
$view->argument = array (
array (
'type' => 'node_feed',
'argdefault' => '2',
'title' => '',
'options' => '',
'wildcard' => '',
'wildcard_substitution' => '',
),
);
$view->field = array (
);
$view->filter = array (
array (
'tablename' => 'node',
'field' => 'promote',
'operator' => '=',
'options' => '',
'value' => '1',
),
array (
'tablename' => 'node',
'field' => 'status',
'operator' => '=',
'options' => '',
'value' => '1',
),
);
$views[$view->name] = $view;
return $views;
}
omagawd, a view in code
do you even try to google anything before starting a rant?
@Laura
I was given the job of taking content off a Ruby on Rails site and using Drupal for the new site.
The old site was a piece of shit, because the developer didn’t know what database normalization is. I had to use a lot of regex to pick bits and pieces out of the database.
Although many of the authors points are for the most part true, I don’t think writing custom code is that great either. For a start you have to do a lot more work, and maintain your code too.
Drupal could get better by being OOP, saving settings in config files instead of the database, however I think the benefits of many polished modules outweigh the cons.
In fact, Drupal doesn’t suck, which is better than you could say for this author, who puts his byline to such brazenly misinformed piffle.
The author obviously didn’t research the topic at all before writing this idiotic screed! e.g. Drupal “views” are certainly not “templates” by any stretch of the imagination, and in fact, Drupal templates are stored in the file system. I’ll stop there, and leave this idiot to check his facts.
I challenge you to debate design patterns with some of the Drupal developers you so rudely disparage—you know, by saying things like “programmer” in quotes. That’s rude, and no amount of apology, correction, or edit #N can retract your ignorant, ignoble, stupid post.
Thanks for your post, it has really opened up a great discussion. However, many of your criticisms of Drupal can be said of Ruby on Rails as well. It is very easy in Rails to have very inefficient queries if you don’t use memoization or if you use model relationships without thinking such as HABTM, etc.
Drupal may not use PHP OOP constructs per se, but it demonstrates OOP concepts. The Node is one of the best examples as it uses the concept of Polymorphism to tailor the Node into things such as Polls, articles, forums, etc (A big advantage over Joomla in my opinion and allows for better ACL & makes things like Organic Groups so powerful). The use of hooks demonstrates Encapsulation, and allows for clean Module writing.
I program in Rails, raw PHP, and within Drupal. The thing about coding your CMS or your own App from scratch is that you are your own support. Coding around a CMS such as Drupal, is that your problems are probably problems that have been solved or there is already an awesome module that handles the work for you. This drastically increases productivity, and when you have a client breathing down your neck, delivery time is crucial.
The argument of “why not just code your own CMS” is weak. It reminds me of the people who say, “why not write your own framework” or even “why not just write your own programming language”. No need to reinvent the wheel, unless there is strong reason to do so. The creation of Rails is a great example of how DHH popularized how a web app should be written, with MVC, metaprogramming, and now RESTful architecture. Unless you are offering a new philosophy & new architecture that offers something of value, I wouldn’t waste my time. The Ruby language is awesome because it offered new philosophies and compiled some cool features from Perl, Lisp, etc. But coding something just to do what something else already does, doesn’t really support Object Oriented Programming philosophy anyways (reusable code, etc.)
But believe me, Rails has a TON of horrible points too (and you complain about Drupal’s backwards compatibility??? Rails is notorious for not being backwards compatible with old code & gems. I’ve had so much code break because of a new Rails version). There are teams writing CMS’s in Ruby and I have yet to see anything on par with Drupal in terms of community and extensions, so I doubt writing something on my own in Rails, DJango, or CakePHP to do content management would be at all useful.
Keep in mind Drupal is a CMS. So for doing Content Management, it is one of the best. Rails is a general web framework, so I would use that to code something like Digg, Twitter, or a Facebook App. Two totally different things in my opinion.
If you want barebones effective Drupal. Drupal Core + Views + CCK. Very powerful stuff. Then throw on top custom PHP in Blocks or Pages and you can do some crazy stuff.
Anyways, thanks for the discussion!
If you need either drupal OR rails you’re an imbecile. If you can’t write the functionality of either from scratch you should be killed.
I was just interviewed for Drupal position, the employer wanted me to show him some code, which I’ll happily agree too. Also this isn’t the first time I’ve toyed with Drupal, but after seeing CODE BLOCKs, I feel pretty horrid about Drupal. Managing code in a database is retarded.
Also, if you look at some of their functions it gets more retarded, for example:
4.6 – 5 -user_authenticate($name, $pass)
6 - user_authenticate($form_values = array())
7 -user_authenticate($name, $password)
It gets pretty retarded between versions, somebody thought it would be a good idea to change the function parameters in 6 and 7, and change it back to the normal usage. This simple example screams bad development all over.
I’ll stick with Ruby on Rails and not Drupal with seven cups of coffee.
6 – “Drupal has a history of security vulnerabilities”. So does every other software application out there. That’s why there are updates. The difference is that Drupal is very public in releasing security updates. Most other systems are not.
This illustrates how far off-base many Drupal fans are. A large number of vulnerabilities IS NOT a measure of good security and Drupal DOES NOT do a better job of publishing or releasing updates than other OSS projects. But it is not all Drupal’s fault. PHP is a good part if the problem, not being OO, it doesn’t compile, is dynamically typed, and very easy to write sloppy code…
While Drupal certainly isn’t the worst OSS out there the criticism mentioned in this blog post are all valid and they are all good points (unlike most of the rebuttals).
9 Trackbacks
[...] el blog Robozen me encuentro con una serie de 3 puntos por los que Drupal apesta como CMS o como sistema para blogs. ¿Es que todo en Drupal se almacena en la base de [...]
[...] as a Tucker Max story is challenging There’s no better way to start a Monday morning with a hilarious rant about Drupal. Despite the mild headache, tis gonna be a good [...]
[...] Drupal Sucks [...]
[...] the posting and the comments here. Share and [...]
[...] Drupal sucks: http://robozen.com/technology/drupal-sucks/ [...]
[...] of all, thanks to everyone who read and commented on the original post. If nothing else, I got some (angry) tips for how to improve my Drupal experience when I do have to [...]
[...] Drupal Sucks: Un très bon article, en anglais, sur les défauts du CMS Drupal. Travaillant actuellement sur cette plateforme pour un projet, j’ai apprécier le libre ton et les précisions de cet article. [...]
[...] Drupal Sucks ou “Drupal Sucks” Followup: Drupal Alternatives par Mariya [...]
[...] worst thing about all the documentation over on Drupal.org is that it’s just not very accessible to non-developers. But first I want to address the [...]