Case Study: NewsGator

NewsGator Keeps Customers Up to Date with AQTime

About NewsGator

NewsGator Technologies is the leading RSS platform company. Headquartered in Denver, NewsGator develops and markets RSS aggregation solutions for individual end users, enterprises, publishers and other online content providers. People use NewsGator aggregators to access news, information, podcasts and other relevant content efficiently and effectively. NewsGator readers are accessible via the Web, Microsoft Outlook®, mobile devices, and PC/Mac desktop clients. All of the products synchronize seamlessly, enabling users to easily switch between NewsGator aggregators.

Nick Bradbury, the blogger/developer creator of HomeSite, TopStyle and the awesome FeedDemonRSS reader recently joined forces with NewsGator, the leading RSS platform company. Once on board he found that the FeedDemon customer base had grown considerably and customers were using FeedDemon in new and unexpected ways that put stress on its performance. Nick and NewsGator needed a tool for finding bottlenecks and improving overall speed, so they turned to AutomatedQA's AQtime for help with FeedDemon 2.0.


FeedDemon 2.0 was a major redesign of Bradbury Software's popular feed reader for Windows. With this new version, they had two primary goals in mind:

1. Make it easier for new users to get started subscribing to and reading feeds.
2. Make it easier for power users to deal with information overload.

Both of these goals required FeedDemon to execute very fast. "After all, new users won’t bother trying out software they perceive as slow, and power users expect their software to scale as they increase their demands upon it. At the same time, we also knew that it had to be quick to market. The new version had already been delayed due to an unexpected event that I had last year and although FeedDemon was created by myself while I was a one-person company, it was acquired by NewsGator last year and customers had high hopes for a new release. Being quick to market with a major new release is tough enough, but add an acquisition to the mix and you’ve got a very challenging situation," said Nick Bradbury, from NewsGator.

Choosing AQtime

"FeedDemon’s customer base had grown considerably since the first version, and people were using it in ways I’d never considered. Given the importance of getting a new version out, it was critical to find a tool that would locate bottlenecks throughout FeedDemon without requiring a huge investment of my time," said Nick.

"Several years ago I had used a tool called MemProof to profile my applications, but I needed something more powerful. I tried a couple of other profilers but found that they were either too hard to use or too unreliable. AQtime had already generated considerable buzz with developers as being a worthy replacement for MemProof, so I gave it a try and it did exactly what I needed."

Using AQtime to Measure Performance

"When I’m wearing my 'developer hat' I regularly use AQtime to measure the performance of new critical code. Like most developers, I try to write code that’s optimized for performance right off the bat, and like most developers I sometimes find that my optimizations didn’t predict the real-world usage of my code. Profiling new routines with AQtime would sometimes be a humbling experience, because I’d discover that my code wasn’t as fast as I thought, but I’d rather be told that by a performance profiler than a customer," said Nick.

"In addition, before every new beta release I’d wear my 'customer hat' and simply use FeedDemon for several hours just as any end user would, except I run it with AQtime. This is enormously helpful in locating performance bottlenecks, because it enables me to see not only how specific routines perform, but also how often those routines are called in normal usage. I am often surprised to find that the bottlenecks weren’t where I thought they would be. In many cases, they are in routines that I didn’t think would affect performance as they were written for clarity rather than speed."

"For example, FeedDemon uses dozens of string-handling routines that I wrote for another project. These routines performed fine with the other application, but FeedDemon is extremely string intensive so performance problems in these routines had a far greater impact on FeedDemon than on my other project. Using AQtime I discovered that a seemingly innocuous routine that is used to remove HTML tags from a string was having a significant impact on FeedDemon’s performance. It was among the most poorly performing routines in FeedDemon, yet I never even considered that it would be a problem. After the routine was rewritten, FeedDemon seemed to be much more responsive overall and AQtime, once again, proved to be correct."

Performance Types

Nick looks for two key performance indicators: real performance, or the actual execution time of a routine, and perceived performance, how fast a program feels to the end user. "One area where perceived performance is critical is at startup time. If an application appears to start slowly it will be regarded as slow and bloated regardless of how fast it really is," said Nick.

"I spent quite a bit of time making sure that FeedDemon started quickly, and this is trickier than you might think because there are so many things that can affect load time. AQtime’s triggers are very handy here, because they enable me to see exactly which routines are being called at startup before the end user actually sees the main application window. By re-arranging and/or rewriting these routines, I am able to significantly increase how quickly FeedDemon appears to start."

AQtime Helps Improve Memory Allocation

Nick said, "As a developer, AQtime has provided first-hand experience as to how things like memory allocation affect performance. There were a number of routines in FeedDemon that performed poorly simply because of how they allocated memory. Often because they relied on the compiler to do it for them. AQtime has also enabled me to get a better view of my applications as a whole. They’re not simply a collection of functions that operate independently, but are instead a group of interrelated routines that interact in ways I might not anticipate."

AQtime Saves Time and Money

"AQtime has saved me time by helping me find where my software performs poorly, which translates to saving me money as well. Not having to spend an inordinate amount of time locating bottlenecks means I can spend more time designing the features customers are asking for," said Nick.

All company names and/or products referenced herein are either registered trademarks or trademarks of their respective trademark holders.