Lessons Learned from Shutting Down My Second Startup
venturefizz.com
venturefizz.com
CMS solutions are good for only one thing: giving people a bunch of boilerplate functionality when that's all they can afford. Building a product on top of a CMS is a sure route to a mediocre product surrounded by dead-ends.
There are a few Drupal modules that are essential do doing anything remotely "custom" and the most important of these I would consider to be CCK, Views and Panels. Many of the better modules integrate with Views. The top 20% of Drupal modules are decent, the remainder are to varying degrees quite amateurish.
If you find yourself writing a lot of PHP on a Drupal project, you're doing it wrong. It's not just that the learning curve is steep, it's that the internals are a steaming pile. The code is straight out of the last decade: large PHP functions sprinkled with SQL queries built up from concatenated strings. It's no surprise that SQL injection vulnerabilities are still being found on almost a weekly basis in one module or another. There is absolutely no transaction management; the assumption is that a Drupal site will be modified by a few and viewed by many.
The functionality of Drupal is powerful. But stick to using modules and maybe a little bit of PHP helper code. If you are implementing a lot of custom logic in PHP, you're better off using a more conventional (modern) web app framework.
1. I'm aware that Drupal is a CMS.
2. I don't find myself writing a lot of custom code on my Drupal projects and that's the entire point (for me anyway) of using it as a dev framework.
3. You have a few thousand developers of various skill levels submitting modules and the quality is absolutely going to vary from module to module, this is unavoidable. Learning to vet your modules carefully and taking a less is more approach with module installation is part of the learning curve.
4. Drupal's internals are a steaming pile compared to what, exactly? Ever taken a look at Wordpress's core code? All code sucks.
Yes, and I'm sure Joomla's code is terrible as well. On the other hand, I can most often peer into Django's internals comfortably and see exactly how it is working, and extend that as needed.
Wordpress's core code has some frustrating choices in it, but even I as primarily a non-developer have been able to find what pieces of code in the core are causing something to happen, and how to change them if needed.
However the out of the box functionality comes with a lot of baggage. You never use all the functionality, yet you are forced to deal with the implications of that functionality. The design decisions are meant to support arbitrary content, but for most sites you have very specific content.
If what you are doing is boilerplate functionality, then a CMS saves you a lot of time. However as things diverge from the standard case, the weight of the infrastructure can become crippling very quickly.
An example was that I needed to reverse the order of two of the checkout screens in the Drupal ecommerce module. For the project in question this was a dramatic improvement to the user experience. There were no hooks to accomplish this, instead it had to be hacked into the ecommerce module. But the ecommerce module is incredibly complex. It attempts to do anything you could possibly imagine, 95% of which was not needed for this project, yet in order to hack in the solution, it was necessary to understand those issues holistically. The time to figure that out, hack the module and test it was longer than just grabbing ActiveMerchant and coding up a checkout flow in Rails from scratch.
If you just let Drupal modules do what they are designed to do, then yeah it's amazing, but a great user experience is highly tailored to the application at hand. My experience is that even when you are doing something that a CMS is well-suited to, you still end up making little concessions to the architecture you are dealing with. Those concessions might be worth the cost savings, but it's undeniably a tradeoff. For me personally after a while I felt crippled by it—I couldn't stand my UX to be influenced by software designed for mass solutions. I believe the sweet spot is in frameworks and libraries with fine-grained tools so you can use only what you need without accepting any baggage you don't.
"Self-motivation is not an ability that once you have it, you keep it. It’s a reservoir of will that’s filled with ambition, enjoyment, good humor, and small successes. It’s drained by mundanity, difficulty, failures, and fears. If you’re not refilling that reservoir on a regular basis, you will find yourself attempting to escape or avoid further drain."