For anyone who doesn’t know, Webflex is a project I’ve been working on in various guises for the past 4 years. It initially started out as a really cool idea to have a forum engine (called Aspex) with a SOAP based API that other systems (like desktop notification programs and complete desktop clients) could easily plug into.
Aspex started after I realised that I was entering exactly the same information into a number of different forums I’d joined, so I thought that a program that could read the forum and register me automatically would be really useful.
The initial idea started well, but eventually I realised that I’d made this rather useful row-based database security system, which was quite useful. So I figured that it wouldn’t be too much work to break this out into a separate project that I could in future use as the foundation of a number of different projects, and so Webflex was born.
Webflex is a bare bones system that allows for user registration and group based rights assignment on individual items in a database. Unfortunately it never really stopped growing. A few years ago I started work on a new website for the Anglo-Italian Family History Society (AIFHS) Website, and I decided that I could use Webflex as the base from which to build the website. Webflex would, first and foremost allow users to register with the society easily so that we could make it much easier for users to join the society and get results quickly. As I developed the site, I also developed Webflex as I discovered parts and subsystems that the AIFHS website would need. This lead to me developing, in one project: a web framework, a object-relational mapping framework, a security framework, a very flexible task scheduler, a Windows Forms client for the web framework, an actual website and a user interface for the client to edit data in the site.
The way I can see it, there were two reasons for the failure:
- There was too much to do, which was mostly because
- I didn’t really know where Webflex was going to stop because I didn’t have a plan.
Planning these kind of projects is really vital. I did enjoy being able to quickly come up with ideas for different subsystems and quickly implement them, but I’ve re-written the entire system 3 times and most subsystems and since been rewritten at least once. I am proud of a couple of parts of Webflex: the way in which security works and the installation subsystem (a perfect piece of object oriented design if ever there was one).
If I was to redo Webflex again, I would certainly plan things through much better and do them right the first time rather than the fifth time. Systems Engineering was kind enough to teach us that the foundation of a good system is in the plan and requirements documents. Webflex had neither of these and fell flat after far too long.
I would also do the client quite differently. Writing the Windows Forms based client sucked. I absolutely dreaded writing for the client, it exemplified the clunkiness of the rest of the system and (mostly due to a lack of planning) the code had about 5 different styles of co-ordinating data as I’d identified techniques that could be abstracted. I’d also decided that the client would be skinnable, so there was a half implemented reskinning subsystem in there which resulted in a toolbar that could only be clicked and some other funky stuff with Windows controls that was probably horrendously unusable.
I would probably redo the client so that it became a semi-optimised browser. I’ve been quite impressed with Steam’s hosting of Webkit for most of the web stuff so I would probably do something like that. With an HTML rendering engine the UI could be a bit more fluid and nicer and because the client will only ever host one HTML rendering engine I wouldn’t need to worry so much about cross-browser compatibility. You could even be really clever and do some funky stuff with XSL and have the entire website as a RESTful web service. I’ve always wanted to write a website that used XSL and only ever sent XML to the client.
In case you haven’t realised, I’ve now cancelled Webflex. It took too long and wasn’t going anywhere useful. I also have a stupendously long list of other projects I’d like to do from licensed P2P downloads to Webflex 2.0 where you only specify an XML file describing your data and an XSL file(s) of how you want it presented and Webflex does the rest to an IMAP client that also stores calendars, contacts, et al on the server so it can be shared your other clients.
0 comments:
Post a Comment