August 24th, 2020
Hello friends, in today's article, we will discuss how incorporating cloud technologies into your development process can speed up your product development enabling you to get your product out the door and into the hands of your users quicker. I won't be covering any particular flavour of cloud here, such as AWS, Azure or Google but rather core concepts of cloud technology which assist in speeding up developer velocity, with that said let us get started.
Modern cloud-based infrastructure providers have developed out of a select few companies where they developed in house expertise to manage their own huge compute requirements. AWS, Google, Microsoft all developed technologies to manage their own in house offerings and released that they would be beneficial (and profitable) to make this available to the general public. As the compute requirements of the world have increased exponentially, so have the ways and means to manage these vast arrays of computing muscle.
The key benefits of cloud technology include:
Let us talk about each one of these benefits in turn.
One area where cloud technology shines is infrastructure management. Traditionally when you start developing new systems, you need to get yourself some new servers to host your app server and a separate one for your database and yet more servers to cover off test and production environments. All this myriad of servers need to be purchased, which could take a while to get delivered, then more waiting for setup and configuration by IT. This process could take weeks and months to complete.
Now, this isn't the case with cloud. New infrastructure and be spun up with a few clicks of a button, and within a few hours, all your shiny new servers can be up and running. Cloud infrastructure covers the full gamut of IT infrastructure requirements, including:
If the infrastructure requirements for the system change, the cloud-based infrastructure can be changed just as quickly with servers being decommissioned and deleted in lighting pace. No longer will the development team be waiting for new servers to arrive or indeed wait for another team to finish using a particular server when a new cloud server can be spun up in minutes and destroyed when no longer required.
The next area which speeds development velocity is the performance and reliability of cloud infrastructure. Cloud compute is some powerful kit, and you can select the storage and performance requirements to fit the needs of your application with a click of the button. No need for developers to be waiting overnight for a build to complete on slow hardware. Also, cloud infrastructure is bulletproof in terms of reliability with redundancy built into its DNA. Removing wait times for slow builds or downtime from unreliable hardware from the developer's schedule equates to increased developer velocity.
Tooling is another area that has significantly benefited from cloud technologies. Tooling is what I define as any tool that folks use to develop and deliver software, including IDE's/code editors, development management tools, CI/CD, testing (auto) and build/deployment software. Some examples of cloud technology making life easier for developers include:
Another major time saver with cloud technologies is serverless computing. Serverless computing refers to the ability to deploy software functions to the cloud, without the need to worry about infrastructure. The cloud provider handles considerations such as hosting, security, disaster recovery and monitoring. Serverless functions are often accessible via API's. These serverless functions can be linked together in your code to quickly build out a back end, without the need to provision compute infrastructure. Freeing the developers to focus on their functionality as opposed to the plumbing of the solution.
Another way to quickly provision systems to the cloud without the worry of infrastructure considerations is to deploy via containers. Containers are self-contained sandboxes for the systems to operate. Containers provide all the prerequisites and services that the systems need in one neat package. Containers deployed to the cloud and managed by software which controls how and when it's started, stopped or picks it up if it falls over. From a developers point of view, containers provide a capability to modernise legacy applications so they can run in the cloud effectively a huge time saver in comparison to a re-write of the system.
The final time-saving area the vast libraries of features that are available to leverage from cloud vendors. Whichever (major) cloud vendor we talk about, they all have invested heavily in making their cloud platforms attractive to developers. One way they have done this is by making available libraries of computing functions available to consume as part of their platforms. Some examples here include AI and machine learning features such as Cognitive Services (computer vision, speech, decision making) and other services around web search, message queues and many more. Traditionally access to this advanced software would be limited to academia or large corporations, but the cloud has brought these functions into the modern developer's hands.
These rich libraries can be tied together with your code or via the serverless functions mentioned above to create rich applications in record time.
While all of this sounds great, several caveats should be considered before diving headfirst into the cloud space. No matter what technology choices you make, there will always be things that need to weigh up before entirely investing into an architectural direction.
Before investing in cloud technologies, we need to ensure we have the required skillsets in-house. Cloud technologies are similar to in house IT; however, they do have enough differences to warrant a specialist skillset to administer and get the full benefit/best advice from the platform.
Cloud technologies could be the most significant vendor lock-in known to humankind. So it is essential to understand this before investing heavily in developing systems tightly coupled to any particular cloud technology. In straightforward terms, this would mean leveraging more containerisation as opposed to specific cloud vendors options. On the flip side, the business may decide that the vendor lock-in is a decent trade-off for a more speedy development cycle.
Being a pay as you go service, continued use of cloud technology can start raking up big bills if not managed carefully. Careful use of the pricing calculators and planning will allow you to manage your spend here, along with remembering to shut down any servers in-between use (dev/test/etc.).
Cloud computing can have a real tangible benefit to the velocity at which a development team can deliver software. Depending on your requirements and budget considerations, cloud could become your default method of operating into the future. Nothing can beat the speed of spinning up new compute resources from the cloud but beware, the costs associated with this speed and flexibility require careful management, so they do not spiral out of control.