Drupal Sucks
robozen.com
robozen.com
Seriously, this is #1 story in HN? Hint, hint: you will not build a production quality CMS in a day or two, nor a month or two. Not with Rails, not with pixie dust. And if you will take the time to build something comparable to Drupal, it will inevitably have its own design flaws and learning curve and people will blog on how you suck.
Instead of "X sucks" posts, how about writing about viable alternatives to X? A post about a quality replacement for Drupal would be much more interesting.
This is absolutely true. The core of my Rails site, prior to adding the web application, was essentially a gussied-up single-purpose CMS. It is not publicly accessible, supports one fairly easy editing workflow, doesn't have to worry about e.g. HTML input, would be very insecure if my freelancers were of a mind to destroy me, and very, very uncustomizable as compared to e.g. Wordpress or any site you could cobble together from Drupal plugins.
Even with all that, the CMS portion of my site would take me probably about a week to build from scratch. There's just a lot more to it than the 15 minute build-a-blog video.
Most of the weaknesses of Drupal are shared by all other CMS's. The author's alternative is to custom code a solution using Rails. (or some other framework)
That way, you don't have to worry about all the cruft that goes into a CMS codebase to make it flexible and support everyone's needs.
All that said, I still don't think Drupal sucks. It can definitely be frustrating to use and configure, but in a situation where you need to have laypeople or relative laypeople making changes to a site and its functionality, beyond merely adding and editing content, its the best option.
This reminds me of an old Steve Martin routine:
"How can [you] be a millionaire... and never pay taxes?
First.. get a million dollars."
If you've got your hands on a developer who is capable of custom-coding your solution in Rails within your timeframe, and you can afford to pay them to do it, and to pay them to maintain and augment it, and to cajole them into writing extensive documentation (they have, after all, built a custom solution, so if you want to read the manual they have to write the manual), and to recruit and pay a series of equally-talented successors to replace them when they get bored, and to pay a security auditor to look for the custom-built security holes in their custom-built code -- then, yeah, you don't have a problem. It must be nice to be you.
But when, as a Drupal consultant, I would suggest to my more... imaginative prospective clients that their proposed projects were outside Drupal's sweet spot and that they should instead look for a Rails developer, it tended to stun them into silence. It was like suggesting that they recruit and hire a brain surgeon.
People are desperate to find halfway-competent Drupal developers -- and, though it does have a learning curve like the face of El Capitan, Drupal is much easier to pick up than Rails, unless you are already a Java developer. [1] Competent Rails developers are far harder to find. They're all too busy applying to YC, plotting to take over Java shops, or counting their profits. ;) [2]
---
[1] To get started in Drupal, you don't necessarily need to know what "OO" means. You don't need to know what MVC means. You don't need to know what REST is. You don't need to know what "routing" means. You don't need to know what SQL is or write a single migration. You don't necessarily need to use the command line, or a text editor, or -- god help us -- a version control system. Drupal is written in PHP, but you don't necessarily need to know any PHP.
Of course, to the extent that you don't know any of these things, you are going to hit the wall someday, perhaps painfully. But at least you won't find yourself staring at a blinking cursor on day one, wondering how to start your application.
[2] And if you hire an incompetent Rails developer, you will find yourself wishing that you'd simply set a pile of dollar bills on fire.
I spent some time revamping my website last weekend after having done no web development for about 4 years. I roughly split up my time like this: -2 hours to build a proxy to S3 in GAE (Custom) -2 hours to set-up a pure-Java PHP implementation on my GAE proxy (OSS) -3 hours to set-up a WebDAV interface to S3 in GAE (OSS) -4 hours to create XSLT templates and build them automatically (Custom)
I use NetDrive to connect to S3, and Kompozer to edit the content. Highly scalable, nearly free website with a perfectly good CMS and no need to make back-ups. Updating the software or adding services is as simple as typing my password in Eclipse. (by the way, everything in Java)
Over the years I've found web developers are not the smartest types.
You have to manually edit files and code to do things. And that's fine - that's how my website is run too.
But that isn't a CMS. A CMS provides a pretty interface for everything content managers need to do. It allows non-technical people to publish, edit, and collaborate. It has a publishing system so modifications can be approved before being pushed live (which in turn implies an access control system).
Drupal does indeed store logs in the database, in a table called 'watchdog'. One problem I've run into is that if a popular page generates a bunch of warnings, there ends up being a pretty heavy write load on this table. It doesn't help matters that it's usually a MyISAM table, which means that all these writes stack up when the table gets locked, say when Drupal wants to do prune old entries. I've seen this nearly exhaust all the available MySQL threads. I think there is a module that you can use to stop this behavior. Alternately you can alter the table to use the BLACKHOLE engine.
One thing the author didn't mention, is that Drupal's content search is really bad. In order to perform multiple keyword searches it ends up generating these massive queries that join tens of search index tables. These queries can kill the MySQL join optimizer which can ultimately bring your MySQL server down.
While this bug has been fixed, the search queries are still gnarly and slow. If you're planning on running a Drupal site with a lot of content you'll definitely want to investigate an alternate search system, perhaps using something like Sphinx or Lucene.
In practice if you try to be database agnostic you end up with something like SAP which runs like molasses in Winter equally on all databases...
Being database agnostic makes as much sense as trying to write code that compiles in both C and Java.
Maybe if you are writing the realtime transaction processing system for Visa... but this is a CMS. Flexibility is more important than absolute speed. 99% of page views are going to be served from the cache.
Getting Drupal to run on a non-MySQL database is non-trivial. Here's an interesting article detailing what folks at Oracle had to do to get it to run on Oracle.
http://www.oracle.com/technology/pub/articles/pedros-drupal....
Check these: * http://drupal.org/handbook/modules/syslog * http://drupal.org/handbook/modules/dblog
Upgrading should not be an order of magnitude more work than installing and building the site in the first place.
Let me go do my homework and get back to you on that to see if it is the same across a larger sample.
If someone started at version 4 and they've kept current all the way through to version 7 then that would be the kind of stuff we're looking for.
After all, the point I was trying to make was that it is very hard for people to upgrade across major versions, so plenty of them are stuck with whatever was 'hot' when they first started out.
The knowledge required for migrating drupal to a higher level version is a lot more involved than for building the website in the first place.
That said, it does "suck" in many ways. For example: http://drupal.org/node/65922
I build WindyCitizen in Drupal 5 because when I started, 18 months ago, Drupal 6 was still just a baby release and most major modules hadn't yet been upgraded.
I'm now at the point where I need to upgrade the service to D6 to continue getting new releases of modules I'm using. Unfortunately, upgrading a 70+ module Drupal site is a major undertaking that appears to require a team of developers. One to follow the instructions and another to clean up and troubleshoot the exploding messes that result from following said instructions. I put myself in this position by choosing Drupal, but having to raise money to hire people to help upgrade your site is not my idea of a good time.
You use 70+ modules? Probably some custom work as well. There's just no easy way to get that. Drupal or no Drupal. You can DIY, which comes with its own troubles.
You could probably do a lot of what you do for free in a couple of hours with Slinkset or a few days with a custom reddit. But if you want to define so much functionality exactly the way you want it, you have complexity.
No way around it.
It's also ugly and hostile and maintained by some of the least friendly people I've ever had to deal with on a project. There's an insane arrogance in the community.
I wish there was something just as flexible but better. As it is, the choice is between stiff and ugly.
As you say it gives awesome flexibility, but it most definitely comes at a price.
I've also found a large part of the Drupal community to be non-technical users attempting to help each other with various technical problems such as module or database upgrades. I never saw this amazing community that i've heard people mention - so I assumed there must be an invite-only mailing list somewhere.
Asking in a module's issue queue can be hit or miss. If it's a major project, you'll get a response and it'll be "this has been asked before, here's the link." That's great.
More likely you'll never hear a response.
#drupal-support can have some very helpful people on it. But once your question gets beyond general use of the major modules, the odds of getting useful help approach zero.
My experience with the Drupal community has been the opposite. The Drupal community, more than any other project with a similar size I can think of, makes a conscious effort to get people at various skill levels involved (encouraging non-devs to do documentation, etc.). Also, there seems to be more women involved in Drupal than projects of a similar size.
It's a mature project (9 years old, so yes there is some cruft, hell PHP 4 was brand new when it started!), but doesn't have the same community size as something like Drupal. It does have a clean UI, decent documentation (manual, courses, API reference, etc), several dozen modules, and while there is a developer learning curve, it's really flexible once you get into it.
Take your hat and salute these pioneer programmers, who actually enabled millions of websites to be established at Z E R O cost! Their code has become legacy in the correct meaning of the world and as any legacy_code has limitations and problems.
If the author was around at the time, he could by now be able to modify Drupal within minutes than days and would have used the sexiest language of the day PHP!
A challenge for the article author, release your two day RoR CMS as an open source project and if it can offer 50% of the functionality of Drupal and its various popular modules I will donate $ 2000 to the non-profit you establish to promote it!
This also reminds me of the SXSW shootout this year, where none of the already built CMS's could meet the site requirements in less than 2 days, and Joomla was the only team that did it in less than 3. And that was just to construct a site with a pre-existing CMS, not build the entire CMS.
As I mentioned as a reply to the post below, I am neither a PHP or a DRUPAL evangelist, they are tools that I have used in the past and still using, although currently most of my own work is based on frameworks and they got their limits and issues.
What the heck for $ 2000 to get a :
RoR_CMS_FRAMEWORK = 0.5 Drupal
is a good bargain! :)"Mozilla" is sometimes used to refer to the free and open source software project that was founded in order to create the next-generation Internet suite for Netscape. The Mozilla Organization was founded in 1998 to create the new suite. http://en.wikipedia.org/wiki/Mozilla Apache is a bit older about 1996.
My contention and my challenge is in respect to the "SUCKS". I found it totally disrespectful and arrogant. These programmers were hackers and they still are. They were pioneers they were 'real engineers' that used the available tools to the maximum, pretty much like what people are doing together with whatever product is at the forefront.
I am not an evangelist for either PHP or DRUPAL, I have used both many times over with success, even if the process was painful. For web applications the way most HN users would understand them, they are not the greatest of tools especially DRUPAL, however if one is proficient in PHP they can use one of the frameworks (CAKEPHP, CodeIgniter, Kohana) to pretty do any development within a reasonable time period.
Awesome idea.
I've had a look at the basics in drupal, here is a minimum I think to be able to be functional and get to the 50% mark:
A framework-and-module loader.
Template hooks.
Url parser and dispatcher.
Database abstraction layer allowing for at least postgres and mysql.
The following modules:
aggregator
block
blog
blogapi
book
cck
comment
i18n
locale
menu
node
path
path_redirect
profile
taxonomy
upload
user
If, after 1.5 days there is still time left over maybe some documentation ?
Please understand, I'm no great fan of drupal, having seen altogether too much of it, but to say out loud that you can duplicate this in a couple of days is really ballsy, and I for one would very much like to see this succeed or be put to rest. (I really doubt it can be done, even in a multiple of that time, but hey, maybe miracles do happen and maybe a true guru is able to do such a thing on such a timescale).
Edit: I dropped search, calendar and contact, search can be done outside of the 'core', calendar is optional and contact can be done with a simple 'node'.
It's only when upgrading from v4 to v5 to v6 that I've had to adjust my custom templates and modules to work with new APIs. But that's why major upgrades get new major version numbers and are years in the making (and testing).
In other words, a system one doesn't know is useless to someone who knows an other system with a similar purpose. Right. Use the system you know.
While I agree with some of this critique, here are some points I take issue with.
>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.
Views are not templates. Views are more analogous to database queries. Drupal does, in fact, store templates in the filesystem.
>Drupal has a history of security vulnerabilities and is written in ugly spaghetti code
Ironically, the OP's blog post is hosted in WordPress, a PHP project that, unlike Drupal, has had security response issues.
Drupal's security response is great. When's the last time an update-to-date Drupal site was hacked? The code isn't object oriented, but is clean and a coding standing is upheld.
>Gripe #4: Drupal’s None Too Friendly
Drupal's community is one of the friendliest, non-elitist out there. Really. The Drupal project has a higher percentage of women involved than any other open source project of a comparable size.
>There’s been quite a backlash over Drupal’s new trademark policy, which is rather contrary to the spirit of open-source software.
The backlash has been by folks who don't realize that protecting trademark is standard practice for large open source projects. Look at the license of MySQL, for example.
>Drupal's search sucks
What CMS, out of the box, has a search that doesn't suck? Use Solr or Sphinx.
When was the last time that people had an easy enough time of keeping their drupal sites up-to-date with the latest patches without breaking their existing site ?
This is a major and often overlooked problem, it really isn't rare for minor (often security related) upgrades to break the site. You then have two choices, dig in (which is what you should do) or roll back (which is what plenty of people do) and cross your fingers.
Sure, they only have themselves to blame. But still, the number of out-of-date drupal sites out there is very large.
If the upgrade process (and imo that's drupals achilles heel) would be smoother a lot of these headaches would go away.
It's the major version updates where APIs change that are tough and it's no different for any other project with an ecosystem as large as Drupal's.
If it works. I've seen several cases where such a minor update broke the system in non-obvious ways.
> It's the major version updates where APIs change that are tough and it's no different for any other project with an ecosystem as large as Drupal's.
That's a real problem and I think it is seriously limiting.
Over the years I've upgraded quite a few pieces of software with at least as large an ecosystem (Apache, linux, python, PHP to name a few) and I've never had things break as spectacularly as with drupal. There really is no excuse for this, it is causing a lot of grief and a very negative experience for drupal users.
Instead of chasing the features I really think drupal should start to take backwards compatibility and API design a lot more serious than they've done to date.
There seems to be some movement in that direction, but they haven't made it the central point of their offering yet.
Until they do I'll be advising people against using drupal, because effectively I'd be telling them that within two years they can throw their site away.
To make an architectural analogy, the foundation you build on should be at least as long lived as your house. Otherwise you have a very serious problem.
The fact is that Drupal is a viable solution for a huge swath of problems that Rails would cost orders of magnitude more to solve. Namely, boilerplate functionality. Drupal gets extra points because of all CMSes it provides the most hooks and thought towards extendability by developers... nothing else even comes close.
That said, Drupal is not a good design for anything specific. It imposes a lot of overhead in an attempt to be all things to all people. The architecture is actually pretty amazing for what it does, but in my opinion it's the wrong level of abstraction to really be useful to be people who are obsessive about usability, design, performance, or maintainability. That probably describes most people on HN in some regard, but it's far from the majority of people who "want a website".
In the wider business community there are far more people out in the world who have $5000, think its a lot of money, and want a full-featured blog + forum + e-commerce + brochureware site that they can update themselves. Enter Drupal.
* massive numbers of database queries to build a page (i think 30+ for a relatively boring stock homepage). (Yes, there are cacheing modules - but they only work for anon users. If you are logged in as an admin it feels sluggish.)
* You need to put PHP code in the DB (!) for example, if you only want a search box on some pages. (This is wrong for many reasons, but my fave is that if you make a syntax error, or your whole site will break!)
And even then, if you make a syntax error in any code in any CMS -- whether it's stored in the DB or not -- your site's gonna break in some way.
1. We can only use the LAMP stack. (perhaps with other operating sytems instead of GNU/Linux, but you get the idea).
2. We can't use php's object and class system, we have to create our own using arrays.
Given those, you'd be hard pressed to build a better CMS.
The problem is that I don't see any reason to start with those two assumptions, particularly given advances in web development in the past 5 years.
You can use nginx (and lighty as well, I believe). You can use Postgres (and Drupal 7's ORM abstracts the data model, opening up the possibility of nosql). The only thing you're really stuck with is PHP.
Yeah, we really need to work on that. ;-)
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.
This is standard. Regardless of how cool your CMS is, if you're a small software company and have clients on a CMS it is a small matter of time before they will get to the point that they time-and-materials CMS updates back to you.The whole points of a CMS (for my clients) is to make it easy for them to make changes to their site without involving me. If the CMS is broken (and I've never used Drupal so I have no opinion of it), then it's time to use a different one.
Only one customer was different, and they were the exact opposite. It didn't want to pay for a CMS (this is ten years ago when there weren't dozens of generic free software CMS), had little clue about how their website fitted together, wouldn't participate in designs, yet insisted on having complete control over their site. Perhaps a throw-together offering on something like drupal would have been good for them.
The time-and-materials approach makes so much more sense: Steady work for web dev firms, the work can be done by junior workers, the client gets a professional site and can focus on their business instead of messing around with HTML.
And, as my wife discovered the hard way a couple weeks ago, and unlike SharePoint (a monstrosity that is often sold as a CMS), it has a very comprehensive undo facility (one I have used countless times).
I know sites that literally run 100s (if not 1000s) of pages with tens of millions of page views worth of traffic per month with no issues.
IMO wordpress triumphs Drupal is both User-friendliness and performance. The only way drupal might be better than wordpress is on security - and that too not by much.
With wordpress it took me couple of hours to understand 90% of the system, when I gave drupal a shot earlier this year I was still scratching my head after 5 days trying to figure out my way, and I thought I was a fast learner.
Drupal may not "suck" but it got some serious usability problem for as long as I can remember.
Sure, it has many flaws (even deep architectural ones), and there are many things to complain about but compared to the other leading CMS', it's a dream to work with.
If you don't mind relying on 3rd party contrib modules and external development roadmaps, you can build apps in Drupal, but if you just want a framework to build and deploy your own web apps Joomla is fully extensible in the OOP sense.
Also Joomla is classier than Drupal. :-P
I didn't play around with it long enough to remember anything about its file or database architecture. But, I think if I were going to develop a CMS, I would want to make it easy to patch and upgrade, and I would want to make sure that it was somewhat secure.
Anybody know of some easy to use alternatives that have - so far - managed to stay under the radar?
>>> Drupal is Freaking Hard to Use and Has a High Learning Curve <<<
The author uses the "layperson" as the targeted audience yet the only alternative he offers is rails. Yeah, enter rails, a layperson would have to learn programming, database, deployment just to get a rails site up. Comparing this with the WYSIWYG interface of drupal, I'd say the latter is much much easier for the lay person.
in my experience of working with clients clients, most of them haven't found much trouble making minor edits to the site itself after I've set it up given them some instructions. For me this is godsend compared to 1, doing things the old way of giving them static pages and having them email me every single time they need a change or 2, using my custom cms-like solution which is buggy and hacked together.
For these simple CRUD type operations, drupal is simply the easiest way for the lay person to modify a pre-built website.
>>>>Drupal’s Design is Piss-Poor<<<<
Inheritance? Objects? Keep in mind that drupal was started back then in 2001 when PHP didn't have any real OOP capabilities and that heritage carried through. As for the issues with upgrades, most modules and templates..etc shows prominently what version they are compatible with and if you use the correct versions, it usually doesn't break.
>>>>consider hiring a Ruby on Rails developer<<<
There are so many useful things that are built out of the box for you in drupal, the taxonomy system, thousands of modules for all of the most common operations and a generally helpful and supportive community. Through modules, you can get internationalization for free, you get a free forum, a free user-groups, blogs..etc. You also get a pretty good degree of customization with the Views and CCK module for the edge cases. I really don't see how building it yourself from ground up can be a money saver for 95% of the common cases.
And why specifically rails? compared to other web frameworks like Django, does rails offer something that makes it especially scalable, easy to learn or especially suited to the CMS type application?
From what I know, the Django admin site, its apps system, better documentation and python's consistent syntax makes it easier to learn and more suited for CMS type applications. And if you use Pinax for the some of its out-of-box functionality, it makes life even easier.