A better life with development environment provisioning

In my previous life, I worked for several years as a Professional Services Consultant. In other words, I spent thousands of hours dealing with numerous challenges in the context of many different projects. A fair part of this time was dedicated to help with a commonly recurring priority: to provide the development team with the best tools and methodologies to improve their efficiency.

This is difficult and never ending, because it depends on so many things that continuously evolve, like knowledge and tools. If you look closer at the initiatives that have an impact in this field, you will notice that most of them have both business and technical sides.

  • Business: strategies, policies and decisions like budgets, human resources and projects. How useful is a powerful new tool if you can’t train your team?
  • Technical: concepts, technologies, tools and architectures like High Availability, Gradle, BitBucket and Microservices. How to support development if you don’t rely on up-to-date technologies?

The DevOps movement is a very good example. DevOp mainly relies on virtual machine and container technologies, but it can only be initiated with a big investment from management. Many did not do it at first, but now that this innovation has become a disruption they are trying to catch up. This makes me happy because I consider DevOps to be much better for future innovation and development, and who does not like great platforms to create and play cool games?

But hey that is another subject. In this blog post I want to focus on a specific benefit of virtual machine technology alone: to simplify the administration of development environments. With the increasing need of flexibility in development projects due to technology updates, time to market, human resources turnover, decentralization, and the like. Anything that makes upgrading, security, or team member onboarding easier is greatly appreciated. It can be done in a fairly easy and inexpensive way with limited dependencies.

The main idea is to provision - or in other words to supply and assign resources (virtual machines, storage, power, etc) - required for projects or teams. This comes with numerous benefits:

  • Continuous adaptation to workload - up and down - which translates to better scalability, availability and responsiveness, and lower costs overall.
  • Ease the transition to newer technologies (Operating System, applications, etc) which is often necessary to fix issues and to innovate.
  • Improve security with limitations, permissions and backups.
  • Make onboarding and follow up of team members much easier with unified and dedicated environments.

As I am a great believer of “a picture is worth a thousand words,” I will illustrate how provisioning can be done in the specific context of a business application development team that uses Bonita Studio 7.7.4 Community IDE (an open source application based on Eclipse RCP) as the development environment and AWS WorkSpaces cloud service as the provisioning tool. I chose this particular stack because I know it well and anyone can replicate it at no cost. If you want to learn more, check here: business application & Bonita, Eclipse RCP and AWS WorkSpaces.

To try it yourself, you will need to create an AWS Account. This is free when you do not go over the free tier limitations. Install the AWS WorkSpaces client application on your local environment.

In this example I want to provision one development environment. First, I launch a new AWS WorkSpace and provide my directory, create/identify myself as a user, select the Standard bundle with Windows 10 and keep default configurations.

Launch a new AWS WorkSpace

Here is what I see when I connect to it via the AWS WorkSpaces client application the first time, Windows 10 as expected!

AWS WorkSpace connected client

Then I complete the installation by downloading and installing Bonita Studio 7.7.4 Community edition, using the embedded Java.

Complete environment installation

Time for a quick test: I make sure I can create a diagram in Bonita Studio, reconnect to the AWS WorkSpace, still see the diagram, and delete it.

Test the installed environment

This AWS WorkSpace is now ready for business application development. In real life I would likely install and configure other things like Git and Maven but they’re not necessary for this example.

This development environment is accessible only by me at this stage, but I will likely need to provision and assign other instances of this exact same development environment to other users in the future. To facilitate this, AWS WorkSpaces allows me to create an image/bundle based on an existing AWS WorkSpace and launch new AWS WorkSpaces from it.

Image/bundle

No need to explain how handy this is when a lot of development environments have to be created, configured and assigned in a really short period of time. I’ve used it many times, to deliver technical training sessions for example.

Now that you have a better idea of how you can provision and scale, you may be wondering: how can you maintain all these instances that have to stay around for a while? This is what I consider to be the main challenge and unfortunately the answer is “it depends.” What I know for sure is that to predefine a strategy/plan is crucial to avoid the biggest risks.

Let’s assume I want the developers to use a newer version of Bonita Studio Community IDE in the context of the previous example. Then I have to handle the upgrade. The AWS WorkSpaces service is not of great help in this situation (to my knowledge) because each AWS WorkSpace is independent.

In this specific case, I could:

  • Create a new image/bundle and recycle the AWS WorkSpaces.
  • Upgrade the existing AWS WorkSpaces one by one.
  • Make the whole system more efficient using AWS WorkSpaces API, RPA or Containers (I should write about them sometime!)

Obviously AWS WorkSpaces is only one of many options, and other services and/or technologies out there might better fit your specific needs. But what I really like with this type of solution is how basic it is and how much benefit it provides. And yet, many organizations still do not know about it or haven’t considered it for whatever reasons.

I will end with a bonus thought: this approach usually comes with powerful monitoring, an important requirement to monetize the access of development environments in the same way many already do with APIs.

Your feedback is welcome in the comments: suggest and enhancement, a new topic to discuss, etc. If you like what you read, let us know and we will spread the word!