As the second internet boom moves in I get more and more people asking me to review their plans for world dominating web projects. With every NDA I sign, I am becoming very aware that we need to do some serious education about how to build large(ish) projects on Drupal. This post outlines an implementation methodology that I generally recommend following when the plan gets more complex than a few content managed pages.
Almost every bright eyed internet millionaire hopeful comes along with pages of forms. On each page, they have designed how they believe everything should work, what the buttons should do and how amazing the results of each click will be. Unfortunately, they generally miss out 90% of the "pages" that are really needed and the remaining 10% (that they assumed was 100%) is too specific to be of any real use. You know that they meant good, you know this is weeks if not months of work, but it is generally useless.
Meticulously planning each page and function up front was never really all that effective when you are building everything from scratch, but it is even less usefull when you are working with a modular platform like Drupal. The test
To get the most out of Drupal, you want to use as much of the pre-built code as possible. You want to get as far as you can with "off the shelf" components, perhaps add a couple of special features, and then step back.
My current recommended Drupal development pattern for a decent sized project is 3 two week cycles (per phase if necessary). The first cycle of "off the shelf" building lets you (and more importantly, your client) see how their site might work in practice. You can see what works, what is missing and what is just plain wrong. After at least 2 weeks, possibly more, you can build a plan for what actual development work needs to be done. If the work cannot get completed in 2 weeks, it may be better to scale things back. Every feature has more depth than you expect.
Once the second cycle has been built, step back once again. Use the site, get others to use it and carefully watch how people use it in practice. The third cycle should be focussed on usability and theming. With Drupal 5, this will involve javascript too, making things nice and easy to use. After 2 weeks of watching and planning, the interface cycle should also take about 2 weeks to implement.
I am generally suspicious of a project that cannot deliver enough functionality to make it useful using this kind of process. The whole project may be much bigger, but the Heisenberg Usability Principle states that using a website will make you want to change the way you use it. Keep agile, build in small pieces and evolve, it's why you chose Drupal in the first place.
One of the best reasons to use Drupal for a large internet project is the freedom it gives you to adjust and tune your system on the fly. You cannot harness this power if you are not willing to work with the system. Drupal is not perfect, but it offers you amazing power if you work with it.
Comments
Yes this seems like a great
Yes this seems like a great strategy for development - I like the 3 x 2 week phase arrangement... For me the battle has been becoming "module aware" - the new organisation of modules on drupal.org is a lot lot better (well done guys!) but even so you still need to install, configure and play with a module to see whether it accomplishes that specific piece of functionality you're after. All good fun!!! Go Drupal!
This prototying-based
This prototying-based process seems very useful. It makes perfect sense too, as prototyping is generally used for applications with a small - medium number of code with life expectancy of less than three years. One of the greatest thing about drupal is that, unless it requires you to develop a series of new modules from scratch, prototyping is very easy (and the product is actually robust).
I also agree with greenman's comment on clients' wild idea. I think software engineers are like architects. Clients can end up in having a tilted structure with doors that don't shut, useless shelves, poor drainage, etc. if their wild ideas are embodied without careful evaluation by architects. However, since software is relatively easy to build than physical structure (and there are so many self-proclaimed software engineers), systems are developed based on clients' blueprint without careful review or even a proper requirements elicitation. Welcome to the death march.
I try to avoid this by first asking clients general questions e.g. "what is the goal of your company/business?", "what do you ultimately seek to obtain with the proposed web application?" and so on. It makes it so much easier to design the application they need once I find out what the actual requirements are in high-level.