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!
126 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).
- I think this article was written by a developper
- All developpers I know, they hate other developpers’code
- I think many developpers assume they know how rules the matrix
- I know developpers are not skilled at making user friendly interfaces
- I see more and more content managers people having experience with Drupal, they dont with your own home made cms
- I agree Drupal is no more than a web content management system. Dont use it to build web apps. Frameworks are perfect for this.
- I like Drupal because I can build evoluated website prototypes (not apps) without any help from a developper
- Home made cms are usually lighter, more friendly, faster,… but ususally, they are not extendable, not well secured,… the support, maintenance, evolution depend on the exact team who build it…
- It is very important to choose the right tool for the right project, depending on specs, evolutivity, security issues,…
- I cannot believe a developper on his own can build the same kind of a tool that is maintained by thousands developpers community
DRUPAL ROCKS !
@dustin – “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 flaws being there are very few “awesome” modules in Drupal, even realtively popular ones have bugs open for weeks or months, they are generally bloated because they try to please everyone and the popular frameworks all have many plugins, modules, libraries, etc that also solve a problem for you.
Drupal does suck, but to suggest Ruby on Rails as a solution is just trading one kind of brokenness for another. Ruby’s performance on the interpreter level sucks, then add the bloated rails framework on top of that and it’s a disaster waiting to happen. If you’re site is more than just a hobby or a proof of concept, stay away from Rails as well as Droople.
Wordpress is the best alternative to drupal. It has it’s own internal problems with spaghetti code, but at least there’s much less code to deal with and it’s a bit easier to understand the internals, mainly because there is less code. Besides, wordpress looks nice, works great, and is easy to learn right out of the box. It’s also a piece of cake to convert it from a blogging app to a straightforward CMS.
If you’re going to end up even looking at the code (and you will have to by necessity if you use Droople or Rails), you may as well just save yourself some time and just change a few lines of wordpress code and just get on with your life.
http://www.graphicdesignblog.co.uk/wordpress-as-a-cms-content-management-system/
http://www.noupe.com/wordpress/powerful-cms-using-wordpress.html
Drupal is by far the worst CMS I have ever used. Stay far, far away from Drupal if actually want to work on your site instead of fighting with Drupal constantly. Terrible CMS.
I’ve read most of the comments here and while I tried to wrap my head around Drupal, I figured that the trouble of learning it is not worth it. Especially if you want to build a community site. A forum based system seems much easier and more standardized that users are more likely to adapt to it than a complicated CMS.
However, the biggest reason I think people get frustrated with Drupal is NOT that it’s hard to learn or anything of that kind. In fact, I think it’s EASY to do certain things with Drupal quickly. The hard part is building a site you want exactly the way you want and that seems to require a lot of customization within the framework. The unified administration interface of Drupal makes that a lot harder.
To me, getting a unique community website is about putting several components together and making them seem part of the whole deal: blogs, articles, reviews, news updates, forums, albums, galleries etc. Thing is most CMSes try to unify all these aspects into one solution. Most of them end up being complex and bloated and Drupal seems to be no exception to that rule. As a result, it makes it harder to build something out of a CMS that actually looks UNIQUE and DIFFERENT. Of all the time I spent tweaking around with Drupal, I never felt that I could make it fit into my needs with lesser effort. It seems I was fighting the software to make it work the way I want it. In the end, I figured that the added effort was not worth it.
As an analogy, I’d say Drupal is a wild beast that requires a lot of taming and controlling before you can get it to dance to your tunes. Whether it’s worth it or not depends on your own requirements and patience.
Negative posts like this result in a slew of responses that only end up making Drupal look stellar. If you want a blog like this: Wordpress. If you want a multi-user site with unlimited growth and scalability potential: Drupal. However, as with any framework, it requires Developers who know how to use it properly. Yes, I’ve seen some horrible Drupal sites and fixed some of them myself.
I have had a very negative experience with Drupal as well. I could go on an on with the details, but don’t have time. I’ll just leave it at that these two things stuck out like a sore thumb:
1) Drupal is not suitable if you want to create anything that hasn’t been created before. In other words, it’s not useful if you are creating something of value. Drupal fanboys reply to criticisms that it’s too complicated by insisting that it’s too powerful and flexible for the person who says so. Unfortunately, Drupal fails here even more than it fails in simplicity. The tiniest change can require tapping into core and that means having to repeat yourself when an upgrade comes.
Unless vanilla Drupal, plus CORE modules are sufficient for you, best make something from scratch. It will be easier in the long run, even if you factor in the time required to make your code secure (which isn’t as hard as people insist it is). I’ve had a few really good Drupal programmers concede this point to me. I’ve been told it’s my fault for “having too many customizations.” Nothing of value is going to be off the shelf and if off the shelf is sufficient for you, then something easier to use like Joomla or Wordpress or Concrete 5 would be a better choice.
2) The community. People who’s livelihood rests on wielding this one hammer (Drupal) against all the screws, pieces of pressboard and antique china the internet has to offer. They insist that everything is possible in Drupal. It’s their mantra, but all that really means is anything is possible in PHP (not really, but I’d let that less preposterous claim slide). There’s great hostility to creativity, wanting to do things in a way that is user-friendly or attractive or using non-standard ajax or javascript. I met quite a few Drupal coders I liked, don’t get me wrong, but asking if anyone has had experience doing something in Drupal on the forums always resulted in “why would you want to do that?” Drupal makes sense only to Drupal developers and are hostile to all criticism, even if it’s valid and constructive. (I’ve seen quite a few non-derogatory posts get deleted that should’ve have been).
Rails is better. MIT license. Or roll out your own PHP CMS using Zend. Or use Django. Or join the Concrete5 community and help them improve their damn good CMS. Or if it’s simple enough, use Wordpress (fun to make plugins for). You can’t make your own web apps in Drupal (I think many Drupal programmers would admit that, but countless Drupal users insist you can and will waste your money trying to make it for you and failing miserably).
Just reminding everyone that Drupal is a terrible piece of european garbage and everyone should stay far, far away (unless you live in your moms basement and like to mess with a horribly broken CMS all day).
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 [...]