How united.com uses webservices


Unexpected error messages with call stack, on a website reveal the architecture in use.
In the process of using United’s website, I ran across such an unexpected error. The call stack pieces highlighted in RED reveal, the use of struts and webservices. It also reveals poor programming since I found others who have run into the same error. I guess United developers have not read Joel’s article on getting error report from users.

Effective code review techniques would have caught and prevented such errors from being ever being displayed to the user. Want to know someone who can help you prevent such problems on your website? Hire CodeReviewers.

Flights Search>>Select>>Review>>Purchase

There was an error in processing your request. Please see the message below for instructions.

We are unable to retrieve flight information at this time. Please try again later.
CTSCHEDULEECONOMY-NON-REFUNDABLE **************************************##ERROR LOG ##**************************************##Service Invocation Exception: com.uls.servicebroker.ServiceInvocationException: ServiceBroker::Service invocation failed because of the following reasons com.ual.telescope.util.ServiceInvocationException: Web Service Invocation Error::SOAP Fault Occured at com.ual.telescope.ws.IBECommonServiceAgent.invoke(IBECommonServiceAgent.java:181) at com.uls.servicebroker.LocalObjectDelegator.invoke(Unknown Source) at com.uls.servicebroker.requestor.RequestDelegator.invoke(Unknown Source) at com.uls.servicebroker.requestor.RequestorAgent.invoke(Unknown Source) at com.ual.telescope.util.SBUtil.invokeIBEService(SBUtil.java:137) at com.ual.telescope.util.SBUtil.invokeIBEService(SBUtil.java:114) at com.ual.telescope.util.SBUtil.invokeIBEService(SBUtil.java:103) at com.ual.telescope.util.ServiceDelegateImpl.getFareSearchResponse(ServiceDelegateImpl.java:312) at com.ual.telescope.ui.shop.util.ServiceBDImpl.getFareSearchRS(ServiceBDImpl.java:572) at com.ual.telescope.ui.schedule.actions.SelectODCombinationAction.getSelectedItineraryForMultiCity(SelectODCombinationAction.java:178) at com.ual.telescope.ui.schedule.actions.SelectODCombinationAction.doExecute(SelectODCombinationAction.java:105) at com.ual.telescope.ui.shop.actions.BaseAction.execute(BaseAction.java:146) at org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:421) at com.ual.telescope.ui.core.UIRequestProcessor.processActionPerform(UIRequestProcessor.java:535) at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:226) at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1164) at org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:397) at javax.servlet.http.HttpServlet.service(HttpServlet.java:740) at com.ual.telescope.ui.core.servlet.LocaleActionServlet.service(LocaleActionServlet.java:140) at javax.servlet.http.HttpServlet.service(HttpServlet.java:853) at weblogic.servlet.internal.ServletStubImpl$ServletInvocationAction.run(ServletStubImpl.java:1072) at weblogic.servlet.internal.ServletStubImpl.invokeServlet(ServletStubImpl.java:465) at weblogic.servlet.internal.TailFilter.doFilter(TailFilter.java:28) at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:27) at com.ual.telescope.ui.core.UIFilter.doFilter(UIFilter.java:169) at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:27) at com.ual.telescope.ui.core.SecureTokenFilter.doFilter(SecureTokenFilter.java:84) at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:27) at com.ual.telescope.ui.core.TelescopeMgmtFilter.doFilter(TelescopeMgmtFilter.java:121) at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:27) at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.run(WebAppServletContext.java:6987) at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:321) at weblogic.security.service.SecurityManager.runAs(SecurityManager.java:121) at weblogic.servlet.internal.WebAppServletContext.invokeServlet(WebAppServletContext.java:3892) at weblogic.servlet.internal.ServletRequestImpl.execute(ServletRequestImpl.java:2766) at weblogic.kernel.ExecuteThread.execute(ExecuteThread.java:224) at weblogic.kernel.ExecuteThread.run(ExecuteThread.java:183) END Hidden error msg for debug–>

This entry was written by Amit, posted on May 16, 2007 at 1:49 pm, filed under Uncategorized. Leave a comment or view the discussion at the permalink.

Comparing Instant Messenger Softwares

A brief comparison of MSN Messenger, Yahoo Messenger, Google Talk, Skype

Typically an Instant Messenger user does the following activities:

1. Launch the instant messenger program (most probably its already running in the background and its launched using the Systray icon).

2. The person’s eye locates the buddy they want to talk with.

3. Click on the name and a message window pops up.

Up until this point, most messenger behave identically. This is the activity that I intend to compare. The big guys messengers have morphed into being many things, but I will ignore those for the purpose of this study.

User experience
The user experience sucks across all the major messengers. It takes me a minimum of three clicks to start a conversation. It is too many clicks. Compare this to making a phone call to your speed dial number. That’s two button pressed and this with an interface that is two to three decades old.

Also there is mouse movement between the clicks. I launch the messenger with a double click on the systray. The messenger launches at the previous location. My mouse pointer is still near the systray. Now it take me couple of seconds to move the mouse location to point to messenger software, locate the buddy and then use another click.

Hence, in the department called “imagination” all the major softwares get a big zero. Make it as easy as calling a buddy on speed dial and you will be a step ahead of competition.

The usability of the process of creating conferences with multiple participants is shaky at best.
Only MSN Messenger provides a slightly better way of adding participants to the conference.
Skype and Yahoo both use the unimaginitive form of listing contacts on the left and and an array of arrow buttons to move contacts into a conversation. A classic example of bad form factor being copied. I don’t know where this format originated, but I have seen early examples in the Microsoft client software such as Outlook.

MSN Messenger improves on this form by allowing search and clicking checkboxes. Lame, but an improvement nonetheless. I could not figure out how to create a conference in Google Talk.

Connection issues

Instant messenger softwares are anathema to most system administrators I have met. The big ones used to require punching a hole in the corporate firewalls to allow them to operate. Hence, a lot of companies disallowed the use of MSN Messenger and Yahoo Messenger by simply blocking the required ports. Let’s see how the different clients fare when posed with such problems.

MSN Messenger fares poorly when operating behind a firewall. It has no built in support to chat over the default port 80 using the HTTP protocol. It is an outright loser in this category. Microsoft came up with a pure web based client for MSN Messenger called Webmessenger. The usability is quite bad and the experience does not translate over from the regular client to the web based client.

Yahoo allows the user to switch from the regular chat port and protocol to using port 80 and HTTP. But this requires advance knowledge on part of the user on what setting will work. It would not have been hard for the Yahoo programmers to put in a feature which automatically chooses the correct option based on the users network settings.

Google Talk shines in this department. The reconnection works flawlessly, it uses port 80 and HTTP with ease and all of this is quite transparent to the user as it should be.

Skype “gets it” as well. It has a default port but also sets up port 80 in case the default port cannot be utilized. Again, transparent to the user as it should be.

Memory and CPU footprint on base system : Windows XP, 2 GB RAM, 2 GHz CPU

MSN Messenger core process msmsgr.exe used about 4.5 MB in the minimized state and goes upto 22 MB upon being activated. Launching an empty message windows added additional 5MB memory footprint. The additional process launched is livecall.exe which takes up additional 17MB before it does anything useful for you.

Yahoo Messenger
The monolithic YahooMessenger.exe takes about 45MB without a single open chat window. Upon opening an empty chat window, the footprint goes up to 47MB. I minimize Yahoo messenger and it remains steady at 46 MB. I wonder what all that important stuff is that the Yahoo programmers keep around no matter what.

Skype
Skype operates on two processes, Skype.exe and skypePM.exe. Minimized, Skype.exe takes around 49MB and skypePM.exe takes around 15MB. The total footprint comes to 64MB for Skype. Opening an empty chat window in Skype produce negligible additional footprint.

Google Talk
Minimized google talk occupies 21MB on my system. Opening an empty chat window does not increase that amount significantly.

Voice Chats

For comparison, I made calls from USA to China over various IM clients. It seems that the outright winner in this category is once again Google Talk client. The call quality was crisp and clear. The loser in this category was Skype. Yahoo and MSN are fairly identical in terms of call quality and rank in between Google Talk and Skype.

Disclaimer: this is strictly based on call quality comparison between USA and China. Call quality will vary based on the quality of the internet pipes between two end points.

One feature that sucks in Google Talk is the absence of Voice conferencing. There is a hack to do conference calls using Google Talk as explained here http://lpahome.com/call.html.

Plugins

Google talk is the only software which solely focuses on chat and keeps additional plugins at bay.
There is nothing to buy, sell, play games or any peripheral stuff. It seems to be keeping it simple as Google does with everything it creates.

This entry was written by Amit, posted on May 13, 2007 at 12:53 pm, filed under Uncategorized. Leave a comment or view the discussion at the permalink.

Defects as Cooperation Tool


Is it a reflection of the sad state of a team when Defects have to be used as a cooperation tool? I was recently involved in a very large project, comprised of around 600 contractors. What happens when a team this large is trying to move with each sub-team having its own priorities? Emails and voice mails get ignored. Cubicle drive-by’s are no longer successful in getting much needed attention.

Enter defect tracking tool. Submit a defect with Critical severity and it gets noticed. It gets highlighted at the triage meetings. Suddenly you get some attention. Project managers from the two teams begin a negotiation. Yes, you get your request fulfilled.

Now this is where things get interesting. Developer catch on to this pretty quick. Now if they want your cooperation, all they do is enter a highly visible defect.

Defect multiply. Defects lose their true meaning. Defects start getting reassigned. Now the company has to hire more consultants to keep up with the increased traffic of defects and implement more processes around “how and when to enter defects”.

Unfortunately in such large teams, the churn continues, and newer team members need to get trained in the “defect processes” and mistakes keep getting repeated.

The circle of defects continues.

This entry was written by Amit, posted on December 5, 2006 at 11:12 am, filed under Uncategorized. Leave a comment or view the discussion at the permalink.

Do your error messages to users lie often?

Enter a search into Travelocity.com and search for a ticket from Bangkok (BKK) to New Delhi (DEL).

Here is what you are told:

What they might have said instead:

  • Your search may have been beyond our comprehension and we are really really sorry about how we allow our software developers to lie in the error messages to the end users to leave you in a perpetually confused and exasperated state while using our programs.

This entry was written by Amit, posted on November 8, 2006 at 11:19 pm, filed under Uncategorized. Leave a comment or view the discussion at the permalink.

User expectations

An actual quote from an actual user.

“During pilot I found, I really have to think big as far as where this project is going. The concepts and ideas behind this project are so suited to the frontline agent – we can search a client by name!!!

This is 2006! There are still users out there who are subjected to software which does not let you search by name/place/thing. Google has been around for more than a decade.

Think about it. If your software does not provide a good search and ability to search on anything, it should have come with an expiration date of 1997.

This entry was written by Amit, posted on October 19, 2006 at 9:42 am, filed under Uncategorized. Leave a comment or view the discussion at the permalink.

Printer friendly or plain eye friendly?

I find myself increasingly reading webpages in their “printer friendly” versions. Why do web designers think it is only printer friendly, i.e, saving ink? Even if ink was free and inexhaustive, do they really think people will prefer reading with all that clutter around the article?

I think what web designers need is a crash course in feng shui for web pages. Forget the ad revenues, the article’s point is lost as the eye tries to find the article, constantly being jarred by collisons with undesirable advertisement banners.

Bad mojo 101 is to break the flow of an article by inserting ads.

This entry was written by Amit, posted on May 29, 2006 at 11:21 pm, filed under Uncategorized. Leave a comment or view the discussion at the permalink.

Dude, Where’s my A drive?

My laptop does not have a floppy disk drive. I suspect more and more PCs do not ship with one. Yet the default configuration over the years has stayed the same. The drive letters start with C.

Why is it so?

Is it because over the years, in the typical windows user’s mind, the drive letter C became synonymous with where the files go. “A” was the special drive letter for the floppy disk drive.

Now that the floppy disk drive is becoming increasingly obsolete, the drive letter A is like a famous player’s jersey number: retired when the player retires.

This entry was written by Amit, posted on April 7, 2006 at 4:12 pm, filed under Uncategorized. Leave a comment or view the discussion at the permalink.

United Airlines and its checkin kiosks

I have a beef to pick with United and their kiosk check-in development team. For some reason, they have decided that international travelers must scan their passport before allowing to proceed to check in.

A typical transaction goes something like this:

“Please swipe your credit card.”

I swipe my credit card.

“Please choose your language.”

I pick English.

“Please scan your passport.”

Ok great, there is no clue to where the scanner is. Of course its not on the kiosk itself. Its tucked away on the side.

After searching for a few minutes I find it. I put my passport face down and press down. Ok pretty clever to use a press down technique to start a scan, I admit.

I already know my passport will not scan. It is simply not built to be scanned.

The next screen drives me crazy. Either United does not have good interaction designers on board or maybe does not even have them, but their kiosk developers are breaking every rule of good usability.

Once my passport fails to be scanned by the machine, it brings me back to the same screen over and over again.

“Passport could not be scanned. If you would like to try again, press continue and scan again”.

I would expect to see at least one other recourse than the small exit button on the top right corner.

You know the first question the agent asks when directing you to the kiosk? “Do you have a scannable passport?” If only, the kiosk started off like with the same question!

Aaah. Programmers !! Think of alternative situations.

This entry was written by Amit, posted on March 23, 2006 at 12:06 am, filed under Uncategorized. Leave a comment or view the discussion at the permalink.

In search of the perfect standup daily meeting

Following the extreme programming principles, our project holds the daily standup meetings. I have been part of many agile projects, and in some shape or form we hold a daily meeting, where every member gets a chance to appraise the team of where things stand. Seems like a good idea, right? However, somehow I have always had an uneasy feeling about these meetings.

Some people tend to hog these meetings. They start off on a topic that might be relevant or not so relevant, but they hog the time, while rest of the team sits around waiting for this person to finish the never ending rant.

Sometimes the moderator will cut the person off and remind him or her to take it “offline”. In my experience, half of the time, these “offline” meetings never happen. The person is too pissed off that his or her point is not being given the merit it deserves or they run out of steam laboring over a point once and do not care to belabor over it again.

So the meeting chugs along. Who is benefiting from these updates?

If the team is co-located, there is a lot redundancy in these meetings. If the team is not co-located there may be lot of surprises in these meeting with very little time to react or mull over the new information.

Some managers like to use these daily meeting to set the agenda for the day. Seems weird to me. We may call the location “war room”, however, lets face it, it is far from being a battle zone. A battlefield is fluid and constantly shifting, a week long programming assignment is usually far less dramatic.

Christopher Hawkins wrote an excellent piece on rules governing meetings. I particularily like his point of no new information being presented in the meeting. Why are meetings used to present new information. There is not enough time to get meaningful response from every participant on the information.

I have not been in a single meeting where I have not noticed atleast one participant getting bored, distracted or just tuning out. Sometimes people are bold enough to leave the meeting that is not useful to them.

We need a better way to communicate whats going on without a stand up. By the way, no one stands in these meeting. Everyone is really comfortable in their chairs. Standing up seems quite childish and who will enforce such a rule among adults?

It seems simple to me. People who are working together on related things should not have to gather round in standup meeting to figure out what’s going on. If its only for the benefit of management that standup meetings take place, I say don’t wait till next standup to nix them.

As a manager, I need to have my hand on the pulse of the team without the need for a daily brief or update. Now if I was the president and I simply have too much to handle, yes, please provide me with a daily brief.

Meetings are not a necessary evil. They are just evil.

This entry was written by Amit, posted on March 22, 2006 at 11:45 pm, filed under Uncategorized. Leave a comment or view the discussion at the permalink.

Why do bug tracking software suck?

Bug tracking software have to do a few things good:

Step 2. Make it easy to enter a bug

Easy, right? Lets think about the process of entering bugs. What information do you want to enter to make a good bug description, now that you have managed to crash the program or discovered where the program sucks. You could choose from a plethora of information.

Error information

Screenshots
( I have not seen a single program which lets you capture this information within the bug tracking software, except as attachments. Attachments do not tell the story in a sequence.)

Logs
(same as above. The bug tracking software makes no effort to learn about the crashed program. Chances are if someone already has entered a bug for the software, the bug tracking software can learn where to look for logs, what logs are important and what else the program can attach “just in case”)

That sequence of whacky actions you did that managed to crash the program.

Step 1. Search previous bugs information.

I purposely put Step 2 before Step 1. Most of the times you run into a bug, you don’t immediately get the feeling that hey someone before already ran into this problem and maybe I should search our greate bug tracking software to make sure it not already in there. Once you collect some information on the bug, it might cross your mind to search for previous such bugs.

Now folks, most programs suck here. Can’t search text let alone search attachments, or any other field that might make sense. Forget any intelligent matching of language. After all, people write differently.

Some bug tracking software that reside in my mind’s hall of shame (these are just the one’s that I have used):

1. Mercury Quality Center
2. Any Siebel based Bug tracker
3. Compuware TrackRecord

Feel free to enlighten me to the world of better software management.

This entry was written by Amit, posted on January 18, 2006 at 11:16 pm, filed under Uncategorized. Leave a comment or view the discussion at the permalink.

« Previous Entries
» Next Entries