And I mean actual work that I’m banging my head on.
One of the biggest gripes I have with my career is that most people don’t know the difference between Web Enabled applications and Browser Based applications. As a seasoned webmaster (I’ve been working professionally, non-stop in this gig for 10 years), it amazes me that higher management can’t understand that not every application will work in a browser. Seriously, you can technically recreate Photoshop in a browser, but it would be slow and unresponsive and actually hinder your job rather than help it.
I guess part of this belief is that everyone has a web browser and therefore everyone would have access to your application without having to install anything (ease of deployment). Unfortunately, most people in management these days come from a background of working in WinForm type apps and have no concept of a ‘stateless’ environment and think that the only thing different in Browser Based applications is the user interface.
Anyway, that’s a long rant for another day. What I am working on right now is a bit of reverse engineering. Another developer worked on a web app that has not performed very well. It is slow, difficult to maintain, and even harder to troubleshoot. For the developers out there, make sure you aren’t drinking anything when you read the next sentence –> One single class of this application, when printed, is twenty-nine pages long! The web page itself has nearly 200 fields. The original implementation would send nearly 1 megabyte of HTML & JavaScript to the client for each request. And it’s my job to salvage the whole thing.
Since most of the fields depend on other fields for their information, I at least got my team to recognize that breaking the application down into a ‘wizard format’ would work well. Each page could use the previously entered information to determine its makeup. The goal for me then was to develop either a library of objects to facilitate wizarding applications, or at least a well defined design pattern. There are some applications out there that do this for WinForms (applications on your computer like Word or Internet Explorer are examples of WinForms), but I can’t seem to locate much for the web.
The biggest hurdle I have right now is trying to architect the system so that multiple developers can all work on some small part of the program (such as a single screen) without requiring them to know how the entire system is supposed to work. That type of encapsulation is difficult.
I have started attacking this in ASP.Net by looking at Web User Controls. Unfortunately, the communication between WUC’s and other WUC’s is a tricky subject to say the least. There are timing issues when the navigation control is clicked, and the master page is trying to determine what the hell happened previously (the navigation control’s events don’t fire until after the master page has completed loading). Trying to get the dozen or so objects needed to fill in the forms to stay around in memory long enough for the application to complete (we use web farms, so state is tricky). It is also tricky to create a system where a developer only has to know how the information presented in the form he or she is working on is supposed to work and not the entire application’s functionality.
The other biggest problem I have, and this is in many ways a problem that exists beyond the programming world, is that I strive for the ‘perfect’ system which doesn’t exist. I have to make concessions to my design to fit in with reality. Yes, some objects will require a bit of knowledge to use them. Yes, working in the web means I have to ‘hack’ a few things to make them work.
But this is my life. And this is what I enjoy doing. Thanks for listening.