Start writing code faster with DevCon1
By: Rob Baccus
Tags: Nodejs, Docker, AWS, Azure, Cloud Computing

When inspiration and ideas strike for a software project, or when I have less than an hour to write code, I want to quickly write down my ideas and start coding it as fast as I can so I don’t lose the thoughts and energy driving it. When joining a new project team I also want to quickly provide value by writing code for new features. Both of these scenarios have required me to spend days or weeks, setting up the development environment on my local computer which delays my productivity.

Spending too much time setting up Infrastructure?

I created DevCon1 to minimize the time it takes to setup and start developing code by automatically building and deploying a containerized developer workspace that has the benefits of updated dependencies and tools needed for the project.

Over the last 2 decades, I have tried to find ways to set up a development environment that would allow me to quickly write code when I need to, instead of spending time setting up the environment. This has progressed from using Java project templates like maven or ant, to using virtual machines (VM) with snapshots of the environments containing the required dependencies. Each one required a significant amount of time to set up and update to the latest dependencies and tools, and this cost me time and energy that I wanted to focus on real value.

Containers on Cloud is the new trend.

I have noticed the trend in the industry is to use containers and cloud infrastructures to develop software projects. For example, Red Hat CodeReady Workspaces and Coder are two projects that allow developers to write and/or manage projects through a browser running an IDE on the cloud or in a container. Both of these applications require money to be spent either on their hosted SaaS or to pay for a cloud infrastructure to host them. DevCon1 has the goal of lowering the time it takes to get started writing code and control costs by running on AWS’s free tier.

If you have also been trying to find a solution to speed up the time it takes to set up a development environment then DevCon1 may be of interest and use. The name “DevCon1” comes from “Developer Containerized” workspaces and a wordplay on DefCon 1, because it is now more important than ever to be able to focus on writing microservice applications as fast as possible before someone else beats you to it. It is war in the software / IT world.

Don’t waste time, focus on consumer value.

As a software developer, I can’t waste my time any longer on setting up and managing infrastructure, operating systems, frameworks, and other dependencies that are needed to quickly develop when I get the time. We now have a convergence of technology that allows me to automate all of these things and DevCon1 is a starting point for this.

Using AWS or other cloud providers to provide the compute, storage, and networking, with free tiers, I can now use automated scripts to deploy my development environment onto any system anywhere in the world.

How is all of this done?

To do this I use source repositories like GitHub or Gitlab where I am able to save all of my code in the cloud. These source repos provide the CI/CD automation that builds and deploys to the cloud environments using automation. Using Docker Containers I can quickly build the latest development environment with specific dependencies and tools that stay up-to-date using the Dockerfile automation. This has the added benefits of developing in a production-like environment because the same environment is deployed to production.

The source repository at DevCon1 documents in code the specification for the Vuetify framework that I want to use to develop my Indigoninc.com website. Working backwards from the end targeted development environment I started building out the required dependencies for Vuetify into a Dockerfile: the base OS is ubuntu,18.04, adding tools like vi and curl, git, and then the development frameworks NodeJS, and Vuetify CLI. I need a way to connect to the docker container, so I choose to install an SSH server which allows me to connect with any IDE through SSH. I use VSCode with the “Remote Development” extension pack which allows me to open any folder in a container, on a remote machine, or in the Windows Subsystem for Linux (WSL) and take advantage of VS Code’s full feature set”. With the Dockerfile I need to automatically build it, test it, and save it to a registry. GitLab CI provides the free ability to do this very easily using their “.gitlab-ci.yml” configuration file, similar to Jenkins.

Tuono saved weeks of work

Now that I have a container image of my development environment I can run it on any Linux or Windows host that supports containers. But I don’t want to spend time setting up the Linux or Windows host as a VM running locally or in the cloud, I want to automate this also. Tuono is a company and tool that allowed me to do this very quickly. Fortuitously the team contacted me at the start of this project, when I told them about what I was trying to accomplish I was blown away by their amazing response to provide assistance to accomplish my goals. I spent less than a week (remember I only get less than an hour a day to work on this project) learning their tool, working through their tutorials, and at the end I had a running containerized development environment on AWS free tier.

The alternative to using Tuono, which is already capable of deploying on AWS, Azure, or GCP with no changes, would be for me to spend a few weeks learning and writing Terraform code to do all that work. Then if I want to run my container on another cloud platform like Azure or GCP I would then have to rewrite my terraform to manage those specific cloud providers. The other options I have are to use the specific cloud providers tools like AWS “CloudFormation”, but these are not portable, or use the UI, which is not automated. This would take me far away from my actual goal of rewriting my website.

Writing code in less that 5 minutes

With the hard work of developing the automation done, I can startup my DevCon1_Vuetify workspace in about 2 to 3 minutes, “git clone” the Git project I want, and start working. This is the fastest development environment I have ever been able to deploy to date. Because this is running in the Cloud I also don’t need to have an expensive desktop computer since all I am running is VSCode, I can use cheaper hardware, maybe even the Raspberry Pi 4b with 8GB RAM running Ubuntu Desktop (but that is another project :) )

Let me know what you think by trying out DevCon1. Feel free to fork the project, make it your own, and submit new ideas and code back to the project so that the community can learn and take advantage of your great ideas and work!