Software Defined Environment - Environments on Demand

Get the Development, QA, Staging or Production Environment you need at the click of a button.


Software Defined Environment

The current situation


It wouldn’t be a bold statement to say that all software’s ultimate goal is to enhance the customer experience. How many times have we not read such comments on app stores or heard business say?

 “Great app, but I can only give it three stars until the developers add ...”

But the Development team’s side of the story is

    “I am waiting for the environment to test the code with new features”

Continuous Delivery and Continuous Integration can help release software updates more frequently and with almost no manual intervention, but there are some bottlenecks to being able to do this. Following are a few: -

Delay in getting the Environments


  Lack of self-provisioning creates dependency on IT department.

Lack of easily customizable Environments


For Development, Testing and Staging with new features or updates to dependencies.

Manual Provisioning of Environments


Being repetitive and involving several steps, we would not be able to leverage the power of Automated Deployments and CI.

And the hilarious but unfortunately true risk of

“Oh! But it works on my laptop!”

Not being able to recreate the environments easily and consistently can lead to not being able to recreate performance issues or release code or updates to production confidently!

Inconsistent environments could result in such scenarios as a new update has been released to the production system and the system Admin might have put in the configuration or dependencies that only he or she is aware of to get the app working. Similarly the developer might have put in the unique settings on his or her laptop to get the code working on his or her workstation or laptop. Due to which every server becomes “works of art” and as unique as snowflakes. Needless to say inconsistent environments make it very difficult to determine why an application breaks when it's promoted to the next environment. Wasting the Developer and Operation teams time in determining if an issue is due to the source code or environment configuration.

What is an Environment?


It is not just an image or template of a virtual machine but all the compute, storage, network and several other resources (XaaS) that are required to host your application. Quite simply put, everything you can find inside the server room!

Environments on Demand at the click of a button


A solution that could give the Development, QA, Staging or Production Environment at the click of a button could remove all the bottlenecks and risks that we had discussed earlier and at the same time orchestrate Software-Defined Compute, Networking, Storage, Security and such to provide a smart infrastructure that is aware of resources needed by the application and is adaptive and responsive to the workloads dues to fluctuating business demand. All this while being easy to customize and simple to use!

Please watch this video demonstrating how it works.

How can Software Defined Environments help?


Self-Provisioning, empowers the Developers, QAs and etc. to bring up the environments they need, cutting delay due to dependency and bureaucracy!

Push-button deployments to get environments easily and run automated tests, on any version of the app to any environment, helps in getting faster feedback. Using policies, teams can be allocated quota of resources and authorization to use them can also be fine grained.

Everything can be parameterized due to which getting the n.x update of a dependency into an environment is just a click away.

The other advantages of having a Software Defined Environment is Automating orchestration will vastly reduce the possibility of human error, and make it possible to scale far beyond what people could do manually.

Reducing the cost of cloud ownership by sharing resources, time to market drastically and by being able to reuse the existing hardware resources



Increase the quality of service by improving the application performance by auto scaling which is achieved by having a hardware that is intelligent and adaptive to the needs of the app.

Phoenix Environments

           
Providing resilient, fault tolerant Environments, which can bring up your infrastructure in one click.

Mitigating the risks of inconsistent environments by providing Consistent Environments throughout the software development life cycle, i.e. from a Developers laptop unto the production systems.

Embracing the following advantages of Infrastructure as code, making your infrastructure IMMUTABLE!
           

Extend the advantages of version control from your app to Infrastructure.

Auto deployment will cut the repetitive and manual process of configuring all infrastructure resources.

Get a unified view simplifying the monitoring and management of all resources.

As you test the app at scale and once deployed, there could be hundreds of servers that might need to be brought up at need to scale the app. Using this approach we could cut the repetitive process and copy the configurations to more servers, virtual machines, switches, routers and storage servers instantly.

What do we do with our existing cloud investments?


As we are going to use Open Source Software, like OpenStack, Go CD and such it will be interoperable with any existing private cloud technologies like the VMWare, Xen and such allowing us to reuse the exiting hardware capital and get started with as little investments as possible and scale out by adding in more capacity seamlessly when ever the utilization is expected to reach higher.

Please watch this video demonstrating how it works or let us know and we would be delighted to take you on this journey!

Welcome to the era of Software Defined Economy!



You can see the accompanying slides here. 





The code has been open sourced here. Enjoy!

I will be presenting this in The India Cloud Expo conference

Popular posts from this blog

Learning OpenStack - The Easy Way

Vagrant on steroids