6.05.2007

Why can't you get this done on time?

Here's why development projects can't be done on time, or rather, why it's impossible to estimate the time for a project unless you've already done it. You do not need to understand the tasks in italics, which are specific to my company site. This is a typical day for me - for perspective, this is 7 hours of work, with the exception of the HttpHandler issue, which spanned several days.

Had to completely re-code the Master page so that the email claiming would work. This is an example of something that would have been a small change, but there is a condition that ASP.Net will simply not accept, and it's caused by the way the master page is made. In order to make the email claiming work, this underlying problem had to be fixed. Existing pages were not affected, but this new page aggravated the situation and made the error show up. Still working on this re-coding of the master page. This has to be done very carefully because any mistakes could negatively impact every page on the whole site!

Spent an hour looking for the method of securely posting a form field to another page on the server without making a round-trip back to the client. This is important so that it will not be possible for members to claim other members contacts, simply by knowing the email address or contact ID. There is only one way of doing this, and it causes the problem above, which requires a total re-work of the master page to fix it.

Got half way into the email form thing, and then realized that in order to support the sending of attachments, I couldn't just upload the file and send it out. I have to upload the file and figure out a unique name for it, then I have to store that name in the database, associate that attachment with the email message, which now also has to be added to the database, then I have to create a scheduled event in the existing database table, and finally, I have to modify, recompile, and re-install the BEIJobService, so that it will be capable of querying the database, getting the file name, and sending the attachment. This procedure would be easy for a human, but it requires hundreds of lines of code to implement on the computers, and it involves changing 3 seperate codebases, the database, the web site, and the job service. All of these changes must be tested in development environments before being put live on the server, particularly the Job service, because it is capable of causing mass havoc if it malfunctions. And the job service is a bitch to test.

I spent about half a day building a way to auto-login to the Online Boot Camp, but when I finally went to test it I got:

Invalid postback or callback argument. Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code. Exception Details: System.ArgumentException: Invalid postback or callback argument.

I basically was back at square one. Maybe square two. The cause of this error can not be eliminated because I don't own the AKP codebase and I can't change it. I have to go into research mode at that point, and I end up spending hours on end reading web pages and getting a headache. I don't like that and I feel like it's a waste of time, but I don't have any choice. All this stuff is so new, that even someone with my experience can be stumped by it, simply because we don't know the specific name of some new feature or we're doing something nobody anticipated, and the system chokes on it, forcing us to find a better method of doing the same thing. I try to avoid this situation with proper planning, but I tend to neglect proper planning when I'm under a lot of time pressure. Sometimes I can pull something right out of air and get it done without any planning, but when that method fails, usually it means I've wasted a bunch of time, and it's extremely frustrating.

When I went to create an HttpHandler so that we could do the version control without having to re-code every link on the entire site, I had major problems getting it to work, but it is the only viable solution to the problem. Nobody, including people who work for Microsoft, was able to answer my question. When I went searching on the net, I found a lot of people had posted similar questions on many different forums, and none of them had an answer to the problem. Everyone has this problem, because the Microsoft tutorial on the subject leads to an error, and everyone else who's written a tutorial on the web, basically copied the Microsoft one. NOBODY GOT IT RIGHT... their method does not work. Instead, it causes an error. This is a very advanced feature of ASP.Net that I'm trying to use, and most people do not have a reason for using it. This makes it very hard to find anyone who has successfully implemented it. I am currently writing an article about this: "HttpHandlers that actually work", which should be posted on CodeProject soon. I had to solve this problem myself, using my knowledge of compilers, linkers, and ASP.Net and the .Net Framework. Microsoft MVPs who were provided with my entire codebase could not solve this problem, so I'm pretty proud of myself for figuring it out, but it took a long time, and I had to actively pursue the solution, so I couldn't work on much of anything else till I figured it out. So, I spent time over several days figuring out why one line of code wouldn't work, and the final solution only took about 10 minutes to implement, once I figured out what needed to be done.

And that is why programs do not get done on time.

No comments:

 
hit counter script