VersaTrans RP is a school bus planning and routing solution designed to help school districts manage their bus scheduling needs effectively. The current version builds on 20 years of providing scheduling solutions for the K-12 market.
VersaTrans completely rewrote their flagship application during their latest upgrade. During development they noticed performance issues and decided they needed a good profiling tool, so they turned to AQtime for help.
Redesigning a Flagship Application
"We completely rewrote our company’s flagship application, VersaTrans RP, when we went from version 8 to version 9. We went from using file based database with many data elements in flat files to a client server application designed with Microsoft SQL Server as the back end datastore," said Chris Miller, from VersaTrans.
"While moving from a design geared for flat file storage to client/server, many of the processes that we used to manipulate data had to be rewritten from scratch. Mid-way through the development process, we started noticing some performance issues that would make the new version difficult to use."
Slow Batch Assignments
Chris said that they had performance issues in one particular operation: their batch assignment feature. "To grossly oversimplify what our batch assignment does, it allows the user to take a selection of students and generate all of the transportation requests (which bus stop, which school) and assign each request to a school bus route. Under the hood, a lot of calculations get done on both the client side and on the database side. For a mid sized school district, a batch assignment of 15,000 students was taking about 10 to 12 hours to run on a Pentium 4 box. With the previous version, the equivalent action would take abut an hour to run. The 10 fold increase in execution time made the new version a non-starter. We had to fix this."
VersaTrans Needs a Profiler Tool
"We knew we had to refactor some code; but the question was "Where do we start?". We needed to measure how long the various functions used by the batch assignment took to execute and how often they were called. That's when we knew we needed a profiler tool and we needed a good one," said Chris.
Searching for the Right Tool
Chris said that once they determined that they needed a profiler tool, they checked Borland's newsgroups. "I read a lot of good things about AQtime from SmartBear. I downloaded the trial version and I was blown away with the scope and breadth of the features. This was the profiler tool that we had to get."
Working with AQtime
"We work with the AQtime in two modes. First, we use it on new or updated code to make sure that we have not introduced any performance bottlenecks. This is fairly straight forward, we run the code and examine the execution times and percentages," said Chris.
"We also use it when we have a module or feature that needs to run more efficiently. We do an initial pass on the code to find bottlenecks and with that information we decide if we need to optimize the existing code or if we need to rethink how we are doing things."
"In either case, we use AQtime to drill down into specific functions that we are using to see where we need to concentrate our efforts. It’s seeing where you need to optimize and what you don’t need to touch. AQtime is invaluable for this type of work!"
AQtime Produces Results
Chris said that AQtime allows them to determine where they need to address performance issues. "We are able to prioritize our optimization efforts, based on the analysis provided by AQtime. For example, we were able to take the batch assignment process that took 10+ hours to run and get it under 15 minutes. Using the results from AQtime was significant in getting that optimization done."
"If you are doing any coding where performance time is an issue, then AQtime is your best friend. The ability to profile execution time down to individual lines of code is invaluable. It allows you to tell which modules or functions need to be optimized and which ones don’t"
— Chris Miller, from VersaTrans
Saving Time and Implementing More Features
"AQtime has saved us too many hours to count. It takes the guesswork out of optimization. We can measure performance changes as we make them. The time that we save using AQtime is spent implementing more features," said Chris.
Chris said that the flexibility that AQtime provides is a great time saver. "The flexibility in how you can profile your code was a great time saver. We didn’t have to profile every line of code; we could do it by the module or the function. We only needed to see what we needed to see."