A Web Developer's Personal Projects
It's interesting to note that many web developers go through a similar process over the course of their careers. One of those rights of passage is the building of a particular application type. Cutting your teeth on building a larger scale application (at least, larger than a contact form that emails somebody and larger than hacking up an install of WordPress) seems to inevitably involve developing a custom application, either as a personal project or as some client deliverable.
Most importantly, I believe that a tried and true web developer should go through this process to understand the pain points of developing larger applications. There are three different types of applications that are certainly great excercises:
- The forum
- The blogging engine
- The content management system
Each of these often has a number of concerns that are always pertinent — such as user experience design and workflow, authentication, spam handling, email management and certainly database design.
Over the years, I've built a few forums. Forums can be simple or they can be complex. Software like vBulletin or phpBB have grown to include a massive number of features, most of which are overkill for the average forum. There are certainly some critical design decisions that have to be made such as threaded or inline thread replies, thread notification, thread stickies, and user registration.
The Blogging Engine
Forums are probably the least popular application type these days as most people seem to prefer building a blog engine instead—the similarities of which are interesting. Both have a main topic with the ability for people to respond. The main differences are in who's allowed to post (everybody vs admin) and who's allowed to reply (registered vs anonymous).
Over the last few years, the blogging engine has certainly become one of those things a web developer just does—usually as a result of outgrowing whatever engine they were using before.
Blogging engines can be much more complex than a forum, though, including trackbacks and RSS generation. (Not to say that RSS couldn't be in a forum; in fact, it probably should. It's just more prevalent in blogging.) Many web application frameworks like Ruby on Rails, CodeIgniter, and CakePHP include a tutorial on how to build a blog.
The Content Management System
The pinnacle project of a web application developer is the custom content management system. Born from the frustrations of trying to wield open source or commercial applications, it seems to be every developer's duty to try and build a custom CMS. How do you manage different object types? Templating, authentication, workflow, internationalization and localization are just a few of the issues you have to contend with in building a CMS. Do you go simple or do you go complex? How does the average user, with little web experience, find their way around the application?
Building a custom CMS is a fantastic excercise on so many levels — well beyond what you run into with a blog or forum. Much of my design intuitiion came from this type of development. Custom CMS development almost always comes from design issues and not technological issues. They are a response to poor and confusing interfaces. Above and beyond forum design and blog design, CMS design really requires you to step outside of yourself and understand what the pain points are and how to solve them. This might also explain why most of them seem to suck and why developers around the globe continue to feel the need to reinvent this bumpy wheel.
But it's also the avenue with seemingly endless possibilities. Is it hosted, is it custom, is it for the designer, is it for enterprises, and so on and so forth.
What type of project do you feel is a great way to grow as a developer? As always, comments are open.