An old customer of mine popped back up recently looking for help. Back in 2007 I developed some software for him that used Flash as a front end. As you may have heard, Flash is reaching its end of life December 31, 2020. What a way for this year to end, we will see one of the driving forces of the Web become a footnote. In light of this news, and the loss of support in most browsers, my customer wanted advice. The ending to this part of the story is I connected him with a good HTML5 developer and I’m spending a few cycles helping that developer understand my APIs. The really interesting part of the story is the architectural decision I made in 2007 turned out to be the gift that keeps on giving.
The software I developed for my customer implemented a gift card and loyalty system. The customer already had a program with restaurants that used physical checkbooks. Interesting concept, instead of a generic card that provided some small value until an expiration date, the checkbook provided better value, but forced the customer to invest up front to buy the checkbook. He had a system that was not working well to manage the checkbooks, but he also had another concept for shared merchant reward card. So, instead of fixing his checkbook program, we developed an entirely new system to manage both the card and checkbook programs, plus also offer gift cards.
At this point I was heading up a software company that was building out vertical Service-Oriented Architecture (SOA) services. I had been focused on retail, logistics and warehouse management, so a service for loyalty management seemed appropriate. Many of my peer pundits on SOA at the time had bought into the concept of Enterprise Service Bus–smart pipes–to drive their SOA. As noted in blogs on this site and others, I was not a fan. I was one of the first voices on XML messaging and thought the right approach was dumb pipes and smart endpoints that used XML messages to communicate.
So, I built this customer’s engine as a service. In total, the entire system was the core Loyalty Management service and a User Management service. There was some web pages that simplified user interface development in addition to a Flash-based application.
Over time the initial Flash-based application started to show it’s age. It had also been developed in a technology that was no longer available called Open Laszlo, which was an abstraction that allowed one set of source code to generate Flash or Web apps. At that time, Adobe had introduce AIR, which allowed development of Flash applications for the desktop. So, the updated user interface was delivered as an AIR application. However, it was only a subset of the original application, the elements that would be directly used by the merchant. Administrative functions were still managed out of the old Open Laszlo application.
With Flash going EOL, these remaining management functions were now at risk. So, now they will be ported to HTML5.
Here’s the lesson learned, the core service, that uses HTTP and XML messaging changed very little over the years. But, the user interface is now comprised of its third technology shift. When I developed my services in 2005-2008, we didn’t call them microservices, but the architecture I used is by all measures a microservices architecture. It exhibited decentralized data management, service independence, smart endpoint/dumb pipes and clean boundary demarcations based on business functions. But further emphasizing good architectural practice, it’s really the separation between presentation and function that has enabled the software to continue operating for as long as it has been.
Moreover, the microservices-based architecture made it very easy to migrate the system multiple times over the years. It started out with one private Windows Server hosting service, was migrated to a second when that one closed up shop and then finally migrated to Microsoft Azure. All that was required was the data to be migrated to SQL Server instance, the services installed into IIS and the DNS redirected and the service was operational again in under an hour.