I was asked to build a program that could use an API that was built into a VOIP phone system that contained a server. The phone allowed its call records to be polled. This allowed managers to observe the call logs of their call center employees.
The program was available on mobile devices but was designed specifically to be viewed on large televisions located in the call center. The idea was that the employees were working towards a daily goal. As the goal approached their name would switch colors until it finally became green. Each call was a point and closed sales would increment the value by a variable set by the owner.
The system also had an administrative section allowing the owner to add phones, administer users and view details about the call logs with a date range.
The entire system was built on Codeigniter (a PHP framework and Javascript using jQuery). The tallies regularly refreshed using Ajax. The interface was quite elegant. Everything animated smoothly.
I was working remotely and the owner wanted to see the results as I made requested changes but, the display was on a large screen and he didn't want to have to refresh anytime I made a modification so I built in a flag that would be passed from the script. When an Ajax request was made the server code would check for updates and if it found any the Javascript would force a page refresh displaying the new changes and it would display the version and when the code was updated.
Later I was asked to modify the program allowing it to use another phone system. This phone did have a server, but was not designed for polling the way the previous phone was. I had to improvise. I was able to poll the phone and populate the database as before. The phone system now rotated between multiple pages of call center employees.
The new company had 3-times as many employees and the phones exported a large amount of data with each request. The data needed to be searchable, but luckily not the same day the data was pulled in. So, I wrote a CRON job that ran in the evening that optimized the data and placed it into a separate set of tables specific for sorting and searching.
Finally unlike the PolyCom phones each YeaLink phone needed to calibrated and populated with user data. This was a tedious task. To make things easier I wrote a Javascript bookmarklet. All the employer had to do was navigate to the phones interface and click a button in his bookmarks bar to setup a new phone.