A few months ago I began a contract engagement with a small business in Fort Worth to assist in building an enterprise data analytics platform on Microsoft’s Azure platform. Understandably so, the client was concerned that building the application for Azure would tie them to Microsoft and more specifically the Azure platform forever. From what I’ve read, this is a common concern. I’ve heard this fear chalked up to FUD (fear, uncertainty and doubt) but I get it - I mean, you’re basically outsourcing your entire IT infrastructure to a third party.
The answer to me seemed obvious - completely separate the underlying cloud infrastructure from the application-specific domain logic. My plan was to take all of the cloud resources that the application was designed to consume (service bus, storage, hosting, etc.) and hide them behind abstractions. In theory, this would allow my client to move their application from host to host with minimal impact to their application. This is where SOLID principles come in extremely handy. If you have not yet heard of SOLID principles I highly suggest that you check out Derrick Bailey’s excellent (and entertaining) article on them at http://lostechies.com/derickbailey/2009/02/11/solid-development-principles-in-motivational-pictures/. Personally, SOLID drives most of the design decisions that I make when developing software. Using these principles as a guideline I was able to easily create a set of foundational libraries that would allow my client to move quickly from Azure to on-premises with as little friction as possible. As a natural result of adhering to SOLID principles the framework is also relatively easy to extend should the client’s infrastructure needs change in the future. In theory, switching to or adding another cloud provider such as Amazon AWS should not require any modification to application-specific domain logic.
I’m sharing this story as a backdrop to a new open-source framework that I’ve been working on over the last few months named Mantle. Since Mantle is still very much in its early stages I had debated for a while on whether or not to publicly announce it but I would like to get more people involved with the project earlier rather than later. Mantle is designed to allow developers to consume cloud-based PaaS resources through a set of abstractions and currently supports Amazon AWS (S3, SQS), Microsoft Azure (Storage, Service Bus) and Windows-based on-premises (File System, MSMQ). Mantle is and will continue to be distributed under an LGPL license. Mantle is hosted on GitHub and can be found at http://github.com/excologroup/mantle.
So, I’m calling on you, the reader, for one thing - to contribute. I would like to hear your thoughts. I would like for you to contribute to the project. I reiterate again that this project is in a very early stage and I am well aware of the fact that I am currently missing some things… like adequate test coverage.
If you would like to learn more about Mantle and how I am currently using it to help my clients I suggest that you attend July’s North Dallas Cloud Computing Group meeting. At this meeting I will be presenting “Building Portable Cloud Applications With Mantle" in which I will take a deep dive into the current state of the framework and some of the reasoning behind its design decisions. To register, go to http://www.northdallascloud.com.
In the meantime, I would like to hear your thoughts not only on Mantle but on your own experiences dealing with enterprise cloud adoption. Are you seeing the same “fear of commitment" to the cloud? If so, how are you overcoming the same challenges?