After the merger that formed Aspect Software, I was assigned to work on recording-related services for the EnsemblePro product, later branded Aspect Unified IP. These services required a bit of tender attention to bring them into shape. While we were able to get recording management and agent scoring into adequate shape to ship and then improve it over a series of releases, my first really good look at the innards of the screen recording service convinced me that the original code base wasn't salvageable because the approach the author had taken could never work reliably enough to deploy in a customer's business. To have a world-class product, we had to rewrite it.

Screen recording involved using a third party product from Proxy Networks called Proxy Host on each agent's workstation. We then used their Proxy Gateway to collect the live video from each of the workstations into files. Our web service, written in Java, took requests from EnsemblePro to record screens and issued commands to one of several Proxy Gateways through a COM control to orchestrate the recording process. Because each gateway could typically handle no more than 100 screens, it would load balance the work for hundreds of agents across several such gateways.

The web service was an event-driven state machine with pools of gateway connections using COM objects with events controlled through JNI. Getting it to work without leaking memory required a thorough grounding in both COM and Java but happily I had that, so I worked on the lower part of it. I had a very talented fellow working with me on it. We did the entire project using an agile approach and completed the main work in three months. The original plan was for a four-month effort to deliver the new component with a code mod of the product, but intense load testing found one or two problems in our code and several more problems in both the vendor's code and in the code of other system components when used with recordings. We sweated our way through the Christmas season and, an additional three months later, with all these problems fixed, we finally shipped.

Looking back over the years since we shipped the web service, everything has worked really well. The load testing, even though it slipped the code mod by a full quarter, really paid off. The web service has stood up in very demanding environments. I had to make only one major change about a year later to better handle DHCP address changes and some install time improvements to make it easier to configure correctly. Otherwise, the whole subsystem has been rock solid.