Supporting New Software? No Problem.

One of the first stages of the software development life cycle is the roll-out of brand new software and with it comes that awkward honeymoon phase – it’s anyone’s guess as to what problems might arise during the first few weeks of use. With this comes a sense of uncertainty, but it doesn’t have to be all that scary! Since I’ve started working at Algonquin Studios, I’ve seen many old and grizzled systems scrapped in favor of bright and shiny new ones and I’ve learned a lot about piecing together a support process for when you aren’t totally familiar with the new software. Here are a few important things to keep in mind when venturing into uncharted territory:

There will be bugs. Probably more of them than you expected.

Even if you have the most fantastic software developers imaginable (like we do here at Algonquin), there are going to be unforeseen issues that pop up, so expect a sizable workload increase in the first couple months after releasing a brand new system. This leads to my next point…

Stay organized and consistent with bug tracking.

With an increase in bug reporting, it’s vital that the support team is clearly documenting all bugs reported and all team members tasked speaking with end users are kept up-to date on issues as they develop. Being diligent about your tracking will ensure that when it comes time to fixing those nasty bugs, everyone has as smooth a ride as possible.

Make sure you manage customer expectations.

As with all customer support issues, it’s important to manage expectations about bug fixes and requests for new features (Hey, I actually wrote a whole post about that here!). If there’s an issue or request that a user is anxious about seeing to resolution, let them know that you’ll be documenting the issue to be reviewed, but make no promise of when it will be completed. Not everything can be fixed or added at the same time and it’s best not to give false expectations.

Create and update a Knowledge Base from the get-go.

If you’re not keeping an updated Knowledge Base for your support team, you need to start… And you need to start yesterday. A centralized location for in-house use is crucial to being able to provide consistent answers on issues as they arise. Are you receiving the same questions on how to do a specific task in your software? Create a step-by-step “how-to” that you can send to customers quickly and easily, saving everyone a whole lot of time and confusion.

Have a simple way to escalate issues on a regular basis.

Whether it’s a weekly meeting or a regularly-sent report, there needs to be a way to let upper-level management know what’s going on. It’s ultimately not up to the front-line team to decide what gets fixed and when, but it is their responsibility to make sure the higher-ups are able to hear about the most dire issues. If there’s no process in place to communicate this, make sure you create one so the development life cycle can progress naturally.

Remember, as bleak as handling support may seem at the launch of new software, it will always get easier as time goes on. Implementing a brand new system is a learning process for both end users and support teams, so treat it as such! Look at it as an opportunity to grow your own skills and knowledge and reassure everyone involved that the process will all be worth it in the end. Every company will handle the launch of new software differently; what are some examples of procedures that your team utilizes when implementing a new system? Leave a comment and let us know!

Advertisements

Problems Don’t Float

Software developers have access to helpful debugging tools that let us step through the logic of our code and discover lines of code that might be misbehaving or causing problems. If our code is generating an error, the debugger will tell us which line of code is at fault. If we know our data, we know what results to expect and we can work through the code to diagnose problems if we don’t get the expected results.

Diagnosing problems during software development is relatively easy. The real challenge comes when your software is in operation and the end user has an issue–users report the effects of a problem and we, as developers, have to diagnose the root of the problem from the user’s description.

In the health care industry, they often remind doctors to cure the disease, not the symptoms. The same should apply to software developers; it’s very easy to get mislead by symptoms. My favorite “explanation” from an end user is “It worked before and now it’s not working.” This vague statement always sends developers down a path of investigating what changed between when the software worked and when it didn’t. Often, this investigation turns out to be a waste of time.

Let me give you some real life examples of being led down the wrong path thanks to the wrong focus:

My friend, a staff engineer for Delphi, had to diagnose a problem with overheating vehicles. The company’s customer service staff analyzed all the issues reported and came to the conclusion that most of the cars reporting the overheating problem were yellow in color. The engineering department was misled down the path of studying whether paint color had an effect on the temperature of a vehicle’s engine. Later, they discovered that the overheating was caused when the vehicle’s engines idled for too many hours during the day. Many of the cars that reported the problem were cabs in New York City. Since most of the cabs spend a fair amount of time idling while waiting for passengers and most NYC cabs are yellow, the customer service team’s analysis of the situation was accurate (many cars with overheating issues were the same color) but it didn’t get to the root of the problem (idling time).

I once wrote an application for processing reversal of payment transactions. After the application was in use for a while I received complaints that it didn’t work when processing reversals that resulted from bounced checks. I knew I’d tested for this scenario, so I was upset to learn that something was going wrong in its “real life” use. I found out later that a new staff member had been assigned to process the bounced check reversals. This new employee wasn’t properly trained and was mistakenly entering check numbers in the account number column, and vice versa. The problem wasn’t with bounced checks; it was user error. But I wasted a lot of time researching the bounced check stuff before we discovered the real issue.

This leads me to a line one of my Operational Analysis professors used to use: “Problems don’t float, only their effects come to the surface.” Don’t get misled by how a problem is described to you, instead do your own investigation; build your own understanding. Don’t just skim the surface; you have to dive deep if you want to find the root cause of a problem.

Here are few basic steps I’ve always found helpful when diving deep:

1. Collect examples of where the application malfunctioned and make sure you don’t limit the examples based on how the problem was defined to you. Do some analysis of your own to see which data sets produced the wrong results.

2. Compare the data to the source document to eliminate any data entry issues. Don’t assume anything. I remember one application where data fields were mislabeled during a configuration step, causing the wrong data to appear in the wrong columns.

3. Make sure that business requirements haven’t changed. Try not to offend the user reporting the problem, but make sure the output they expected matches the business requirements you followed to build the application. I remember an instance where a payroll auditor held back hundreds of paychecks, declaring that salary calculations were wrong. Many hours were wasted verifying the software used to process the calculations, only to discover that the payroll auditor hadn’t been informed that pay raises had gone into effect.

4. Work through the application using the data from the examples you collected. Make sure each step of the way that the output matches the business requirements. Again don’t assume anything, work through each and every step. Not only will this help you diagnose the problem reported, you might discover some other malfunction that was overlooked during development time.

And finally, remember that once you do uncover the root of the problem, you congratulate the end user for discovering that special “hidden feature” in your application!