As you may recall, one of the main purposes of this project is to teach a traditional Java programmer (namely me) how to develop Rich Internet Applications (RIA). This goes beyond just learning syntax and tooling, it means gaining a deeper understanding of the possibilities of a new environment. To that end I have been doing quite a bit of reading about designing applications for RIA environments. The more research that I do, the more I am convinced that this project requires a fundamental shift in thinking from a code based development mind set to a more visual based/user centric model. Developers/programmers (and I include myself in this category) can easily become too enamored with our own data structures and can loose track of the user that our applications should be designed for. This is nothing new, but it becomes glaringly obvious as more tools become accessible to a wider range of development talent. I guess what I’m saying is that crappy user design becomes less acceptable as tools make it easier for better design. Certainly, tools such as Flex Builder make it easier for a more diverse population to build better applications. In no way does this excuse poor system design , it just means that good system design should support a good user experience.
Rob Adams, a Senior User Research Specialist with Adobe, has written a series of Developer Center articles that I really encourage anyone developing AIR/Flex applications to read. Rob’s articles will help get you into the RIA head space and help you to start designing better RIA applications.
I finally got around to putting together the system design document for the
Fly Tying Inventory tool that I described in earlier posts. I’ve tried to keep Rob’s suggestions (and others that I have read) in mind while working on the design for this project. Specifically, I started with the consideration of the user’s task (finding a fly pattern and associated media) and worked the design from that. Everything needs to be considered from the point of view of the user’s purpose. See the attached BC_Requirements document, which is a light weight combination of Requirements Document and Systems Analysis and Design document. I can get away with something lighter because I will be building most of the application myself – I can wing it with some of the design.
One interesting outcome from this user/task oriented approach is the database layout. When I started listing all of the things that a user needs in relation to the fly pattern (the central concept of the application) I found that I had created a horribly un-normal data record. I went through an exercise to do some basic database normalization and got it at least to a 2NF state. Getting to 3NF can be more desirable, however I find that higher orders of normality can mean that many joins are necessary for searching, which is inherently inefficient. Because I am using AIR and will be stuck with SQLite (which doesn’t allow foreign keys) 2NF should be good enough. I already know, from past projects, that you usually need one class for each of the database tables that you are loading into memory – so the database design has a direct correlation to the application’s data structures.
In previous posts I mentioned that I will be creating an Interface Design Document as well, but it is conspicuously absent. I did try to write one, but I found out that I didn’t know enough of the capabilities of the AIR environment to write something useful. I’m sure a Designer could have done it anyway, but I’m a coder – I need to learn what I don’t know first. I’ll probably write one up after I play with things a bit, some experimentation is necessary.