I had originally intended to only work on the project for a few months to work on designing the application. However, once we got to the development stage, I decided to stay on board to develop the application as well. The project has now turned into an ongoing, long term client with updates and new features going in on a weekly basis.
Working with a client who "gets it"
The guy behind English360 is Cleve Miller, who has been involved in English language training for almost 30 years, has a pretty good head on his shoulders. Throughout this project, one of the best things I've enjoyed is being heard and allowing to be heavily involved in shaping how this application should come together.
Having this much say in a project was rare when I worked in an agency, but has been commonplace since going freelance. Some of this comes from where my involvement lies in the entire development process. As a freelancer, I'm in it right from the beginning and have the opportunity to say something before any decisions have been made. When working in an agency, decisions had already been made by the time it got to me.
What's interesting in retrospect is how passionate we were about our point of views without being mean. Also interesting: using analogies can lead to very confusing discussions and are usually too disconnected to the argument at hand to be overly useful. (As evidenced by one conversation talking about shopping malls and whether going through certain doors would confuse shoppers.)
Designing the Application
Designing the application was a fairly lengthy process — much longer than I've done on any project previously. We went through a one week brainstorming session along with Carson McComas, who was involved in the project even before I came on board. During this session, we began to map out all the features that we felt should be in here. It was also important to determine some long term goals to understand how the core of the application would ultimately be built.
From there, we went through putting together wireframes for each of the major screens. Some of the minor screens didn't get designed until implemented in the application. While some feel that wireframing is too restrictive once you get into the design stage, I've been happy with the success I've had so with it so far. Alternatively, you could look into something like Page Description Diagrams.
After getting the wireframes done, I put together the designs for the application. Each screen got mapped out in Fireworks before touching a single line of code.
At this stage, I'd normally just jump into the actual application development but Cleve was insistent on putting together an HTML prototype of the application. This was a good thing as it forced as to truly look at how the application might behave and allowed us to really simplify a number of things within the application. (To say that 37signals got quoted a few times, for better or for worse, is an understatement.)
A CMS at heart
From a technical perspective, the application is really a content management system for e-learning, allowing users to create different types of content including tools like multiple choice questions, drag-and-drop exercises, and a calendar. To pull off a flexible system, I decided to use a technique I had discussed way back when I was going to build a generic CMS: using XML to store unstructured data.
Adam Thody put together most of this portion of the application and I have to say, it turned out really well. This approach, tied in with CakePHP, has been really flexible. It'll make adding new item types much simpler moving forward.
Each item in the database has default metadata that it stores in the item table with its individualized data in XML also stored in the database. To help make search work effectively, each item can decide what data should be searchable and is included in a search field that is indexed. The data is a little de-normalized but performance-wise, this should hold up well in the long run.
The rest of the application came together fairly smoothly and while CakePHP didn't have all the features I needed, it was easy enough to extend it when I needed to.
The largest challenge was simply getting the work done. It certainly took longer than expected. I had brought Adam Thody in to try and get the project out faster but with his existing clients and my need to bring on additional clients to manage cashflow, I suddenly found myself in over my head and no further ahead.
In the new year, as the project came to a close, Adam left to focus on his own clients again and I refused any new clients. I put my nose to the grindstone wrapping up testing, debugging, and tweaking the design. What was left was a cool application with a lot of flexibility.
There are certainly things I would have done differently but ultimately, I'm happy with the end result and with ongoing changes, it'll be interesting to see things evolve. Often times, I'll build something, give it off to a client and never see it again. This time around, I'll have a hand in continuing to shape things.