I was recently amazed when I realized the seeds of what is now the Skype Optimizer was created 10 YEARS AGO, back when Office Communications Server 2007 R2 was starting to make headway in the unified communications space.
The genesis of the program grew out of a need to know when to strip the +1 from a North American local number and when not to. Rather than rehash the creation myth, you can read all about it from one of my earliest blog posts where I announced the Dialing Rule Optimizer to the world (at that time, the 30-odd subscribers to my blog).
The very first version was a straight VBScript that I had to manually input the proper variables and run it by hand. Rather than give the code away, I told people to email me the phone numbers they wanted to get optimized dial rules for. I would run the script and send them the results, which was a simple text file with either a bunch of regex, or text formatted to be applied to AudioCodes or Dialogic gateways. Word got around within Microsoft, and I found myself busy sending stuff to various Microsoft consultants.
When Lync 2010 came around, which was in its earliest days known as Communications Server “14”, I added the capability to create simple routing rules that consisted of a few lines of PowerShell code. I also wrapped the code around a simple UI in something called an HTA (short for HTML application). It made generating rulesets easier for me, but it was still something that I was running from my local machine.
|The earliest known copy of the original Dialing Rule Optimizer. I obtained this from the Smithsonian Museum. The text-only v1.0 has been lost to the sands of time.|
I soon figured out that it would be relatively straightforward to move the HTA into an actual web page. I put the code on a web server hosted by the company I was working for at the time and opened up the tool to the entire world. I actually put this code on the computer that was running our OCS 2007 R2 server!
|The very first web-based iteration of the Dialing Rule Optimizer. Note the Communications Server “14” logo on the top-right.|
Once Communications Server “14” became Lync 2010, I realized that I could go beyond simple optimized route creation, and modified the Optimizer to create everything required for a simple Enterprise Voice setup for US and Canada deployments.
Shortly after, I realized that I could do the same for other countries as well. The Optimizer interface grew somewhat to accommodate the requirements for different countries.
|Dramatic differences abound! Communications Server “14” has changed to “Microsoft Lync”. Also, UK dial plans!|
Over time, the back-end code base was starting to become difficult to support. I was using a series of XML files to deal with languages and country-specific dialrules, and the sheer number of them was becoming cumbersome to manage. I decided to move everything from the company-hosted platform to Amazon Web Services. I built a single Windows VM with SQL Express and ported the XML files to a database. It worked well, but AWS was starting to cost a fair bit to run for a free service. Donations were not keeping pace with costs.
I then discovered that Microsoft MVPs got a monthly allotment of funds in Azure. I immediately moved my infrastructure to Azure, where it ran mostly trouble-free for the next several years.
The Optimizer featureset grew and grew, but the interface was still as ugly as the day I first created it. One person even suggested it looked like a GeoCities page. Hey, my argument was always that I was not (and am still not) a web developer.
The Modern Era
- My container stopped working a few times over the span of a few weeks. Troubleshooting this proved to be nearly impossible due to the nature of Docker containers and how you lose the previous state every time you restart it. Either that or I just don’t know how these things really work.
- Making code modifications wasn’t simple either. I’d have to make the change in my local Docker image and publish that image to Azure. The startup process took 5-10 minutes, which was probably due to how I built my container. I looked at ways to improve the startup time, but it was already eating up lots of my time.
- The costs to run the container wasn’t much cheaper than a full VM