When it comes to web applications, I spend a lot of time evangelizing the use of application frameworks. This stems from a desire to save people from writing mountains of new code that they’ll have to maintain. The less code you have to write to accomplish your goal, the better, as far as I’m concerned.
Frameworks promise you less work for greater return. This is good. What’s bad is that focusing on a framework can cause you to overlook an even easier solution: using something that already exists. I don’t care how easy it is to write blog software in Merb. If you’re writing blog software from scratch, please stop, for you are dumb. This problem domain has been conquered over and over. Don’t solve it again. The only time you should be looking to build an app from scratch is when you’re approaching a problem that’s never been solved before. The practical developer has no room for ego as far as inventing goes.
I can hear you saying, “But I don’t like the way other blog software is written! I want to write my own!” Well, go ahead. If you’re doing that for clients, prepare to a) maintain your non-standard app until you get fired, because you’ll be the only one on earth that can do it b) prepare to get your lunch eaten by a competitor who can install and customize Wordpress.
The other reason I thought it would be a good idea to compile this list is that there are a surprising number of people who don’t actually know about some of these apps. Everyone knows some of them, but very few people have a toolbox that includes all of these.
There’s a few things I look for in an off-the-shelf web application that I used as parameters when creating this list:
Good Documentation - If I can’t figure out how to use it, it’s of no use to me.
Solves a Specific Problem - The app must do one core thing and do it well.
Must Work Out of the Box - If there isn’t an outright installer, there should at least be some simple steps for getting the basic application working. If I have to customize or extend it before it’s useful, it’s not an app, it’s a framework.
Easily Extensible - There has to be a way for me to customize and extend the app without modifying the core code.
Plays Well With Others - There should be options for integrating with other apps via standard communication methods, like RSS, XML-RPC, JSON via HTTP or whatever.
Established Developer Community - I need to know there are other people using the thing that can help me if I get stuck or that could take over for me if I need to offload some work.
Minimally Picky - The app must run on standard web servers using standard tools and technologies without extensive tweaking and configuration.
Free and Open Source - Not negotiable. I must be able to use, customize and redistribute the thing without any legal or monetary restrictions.
MVC - There should be a clean divide between the presentation, controller logic and model layers.
Client Usage - This list is only stuff that a freelance developer might implement for a client.
Note that I did not say “has to be written in PHP”. For me personally, that certainly helps, but it’s not a strict requirement. I use plenty of things that aren’t PHP based. I probably won’t go to great lengths to customize things in languages outside of my core competency, but that doesn’t make them less useful. You’ll find this list heavily biased towards PHP, but that’s because it’s my list, not the list.
Okay, enough said. Here’s my list:
#1 - Wordpress - Blog/CMS
Pretty much the last word in blog software. You can be up and running in minutes. Lots and lots of pre-built themes and very easy to customize. With the advent of “pages” in Wordpress, expensive proprietary CMS systems seem kind of…quaint. The plug-in system is really neato and there are hundreds of available plug-ins.
#2 - Trac - Issue Tracking and Documentation
Trac uses Python, but I’m not holding that against it. Probably the best all-around issue-tracking and software documentation setup there is. Hooks directly into Subversion and has lots of other highly useful features.
#3 - phpBB - Discussion Forums
phpBB has been around for a long time and has grown up considerably over the years. The latest version has a really nice templating system. Plug-ins and themes abound and the installation is a snap.
#4 - Gallery - Image Archive
Feature-packed, easy to use and highly extensible, Gallery is as good as it gets for displaying large numbers of images in a useful way. I used to do a lot of sites for photographers, and Gallery was often a very good solution.
#5 - MediaWiki - Wiki
This is the package that powers Wikipedia, so I guess you could say it has a fairly good sized user base. Pretty much the gold standard for Wiki systems, it’s well known and well documented. It’s very well put together and can handle very high traffic quite efficiently.
#6 - eGroupWare - Groupware/Intranet
Why anyone would build their own intranet app when there’s eGroupWare is beyond me. There’s a ton of useful stuff right out of the box: webmail, timesheets, resource management (i.e. “Who has the freaking projector?”), threaded discussions, issue tracking, file sharing and a whole lot more. Writing your own extensions is a snap, too.
#7 - Sugar CRM - Customer Relationship Management
I’ll just go ahead and say it: CRM is very boring to me. For that reason, I’m very glad I’ll never have to write another CRM app again, because SugarCRM did right the first time. Companies that want CRM solutions also generally want enterprise support (whatever that means in the real world) which SugarCRM, Inc. is happy to provide.
#8 - Magento - eCommerce
eCommerce has long been a weak point for open source web applications. Before you say “osCommerce”, just…just shut up. If you haven’t implemented it, don’t talk to me about it. I have. It causes a burning sensation and leaves permanent scars. Magneto, though not even out of beta, is poised to shake things up quite a bit. It uses my very favorite framework and has a very nice set of features, even at this early stage.
WAIT, THERE’S MORE!
#9 - OpenAds - Ad Server
After I made my carefully crafted list of 8 apps, I realized there’s another important one I left out. OpenAds is a really nice ad serving app, capable of running some pretty complex campaigns with multiple clients. The admin tools are really awesome and there’s a very large community of people that use it if you get stuck.
“But wait! There are other great web apps that aren’t on your list!” Yes. I know. There’s even a few prominent ones that didn’t make the list. Here’s a few with explanations:
Drupal and Joomla - Both are indeed solid, well-written applications. They fail the “do one thing well” test, however. They both try to be all things to all people, though, and as a result they don’t do any one thing in particular very well. Both have an extremely high entry barrier for new developers. I also think they both have stupid names that don’t mean anything.
PHPNuke - Really? Are people still using that pig? Granted, I haven’t used it in a while myself, but from the looks of it, not a lot has changed. While it does have a lot of customization options, it’s a usability train wreck when it comes out of the box. By the time you’ve customized it back into something usable, you might as well have started from scratch. The back end code is (or at least was) a mess.
And there you have it. Commence the strongly worded comments about why the list should have X and shouldn’t have Y.
January 17th, 2008 at 6:51 am
I love the picture
I’ll give trac, magneto and gallery a test straight away…
January 17th, 2008 at 1:36 pm
Trac has an amazing set of plugins… even XML-RPC!
January 26th, 2008 at 3:50 pm
OK, I found your site after going to your brothers site. (you made that from scratch I think? nice…) and you may have an answer for my problem. I have been a movabletype user for years and even with the latest version, I am still leaning towards WordPress. They both work great, but here is my problem: WP takes a database for every blog where MT uses just one. AND - I know how to create templates for MT and I am not sure how easy this is to do within WP. After weighing everything else, WP wins for a blogging platform.
What do you think?
=)
January 26th, 2008 at 3:53 pm
BTW, very good list! (I would add spry to the list.)
January 27th, 2008 at 1:52 am
@Scott D - Thanks for writing! Both Jeff’s site (http://mrjeffmccarthy.com) and this one use Wordpress, actually. They both use a fair number of plugins and customized themes.
You can actually have several Wordpress blogs in the same database, you just use different table prefixes on install. There’s also a multi-blog version of Wordpress called WordpressMu: http://mu.wordpress.org/