Okay, we’ve got enough understanding of what we want the system to do to begin at least a rough prototype of some of the interfaces. I, for one, like to build from the interface backward. Some computer engineer types like to start with the model of the system and then develop the required mechanisms to manage and interact with that model from there – the problem with this is that a client doesn’t usually understand a database schema.
Clients DO understand a prototype of the interface they’ll be using and can provide valuable input. Sticking a stack of DB schema sheets is similar to handing someone the blueprint to their office complex to ask if they like it.
Some other technical questions I need to answer are what sort of technology am I using to build this sucker. The first constraint is cheap-as-free. This isn’t a huge constraint when it comes to web apps as just as often the free stuff is better. The second constraint is ease of development, both for me and whomever else might come along and want to contribute – which means that although I could do it in Ruby or Python or heck Algol or Smalltalk I’d prefer not to force people to buy 3 inch books to learn how to take part. That does limit the choices considerably. PHP is a popular language and is very easy to learn relative to most object oriented languages. Building a custom JSP taglib would be useful and powerful and having a Java backing would make the system portable but the development time to setup the basic plumbing and the complexity of initial set up would be prohibitive. If precedent were any tool then PHP would certainly come out on top.
Perl is not really an option as it’s simply too clunky for me to develop a web app in compared to what’s out there. C# would be useful, I’m familiar enough with ASP.Net to build something with it however it contravenes the cheap-as-free if we were to go with the .Net setup. I have zero experience with Mono so I wouldn’t want to take it into something production destined.
Ruby is still relatively obscure, though growing in popularity especially amongst new-to-programming types. I don’t mind the language and it’s well suited for this kind of project – however I do not like Rails for a number of reasons I won’t get into here.
PHP looks to the language. I think I’d like to use a framework to build this system as starting from scratch would just tack on another 30% to the already too-long cycle. Not to mention having a framework gives people a documented starting point to help them figure out the system, I don’t think I’m going to heavily document LiberalLab’s code, mainly because it would take me more time to write the documentation than it would for someone to figure out the code without it given the simplicity of the system. Having a framework would make things easier since I would do everything in a standardized fashion.
So, which framework? There are plenty out there – Cake, Zend, and Symfony are the ones I have the most familiarity with. Zend is the most flexible and powerful by a long shot, however it’s also pretty damned rigorous and customization heavy, too carte blanche for this project. I don’t particularly like Cake’s system, I find it’s conventions too idiosyncratic and irrational for my tastes. I recognize many of the conventions are work-arounds to limitations with rather narrow PHP – but those limitations are known and understood and accepted when one works with the language. Symfony is actually very rails-like but since it is based on PHP rather than Ruby and uses Apache rather than a totally useless web server I prefer it. Also, Symfony allows parallel development for different DB environments.
Speaking of DB, which are we going to use for this system. Well, I find MySQL much easier to work with from a development standpoint because I’m considerably more familiar with it. However, I recognize it has pretty serious limitations in a production environment. Granted, I’m not creating a new stock exchange and my DB strain is going to be slight, so I don’t need to worry TOO much about capacity. Postgres is still the trusty work horse DB environment and I think I’ll want to use it in production – since Simfony makes multiple DB / multiple environment development easy there’s no reason why I can’t use both.
I want to use AJAX, definitely. I don’t think I’ll deliberately AJAXify every god damned thing on the system but it would be useful here and there for interactive features and form validation. We’ll cross the AJAX bridge when we get there. I usually make “AJAX ToDo:” notes on my form prototypes.