How cloud can speed up product development time

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. 

Key benefits of cloud technology

The key benefits of cloud technology include:

  • Easy (and speedy) infrastructure management: quick setup and management of servers, databases etc. 
  • Performance and reliability: top-performing hardware and no worries around downtime.
  • Tooling: great developer tools to automate critical workflows and tasks
  • Serverless: Ability to stand up web back ends without the overhead or concerns around infrastructure.
  • Off the shelf services: the ability to consume and use AI and other services with minimal effort.

Let us talk about each one of these benefits in turn.

Easy (and speedy) infrastructure management

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:

  • Compute (servers of any O/S)
  • Databases (of any type)
  • Directory services such as active directory
  • Storage
  • Networking
  • Message queues

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.

Performance and reliability

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

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:

  • Development management tools: Examples here include Jira / Azuredevops, which enable end to end management of the development process from the cloud. These tools integrate deeply into the full SDLC, including code, testing and deployment pipelines. While these tools can also be on-premise, it doesn't make sense to do so with the ability to quickly sign up for a cloud version of this software, designed to be quickly configured and updated to maximise your team's development velocity.  
  • Source code repositories: Git / Github / Bitbucket, etc., have led the way in cloud-based source code repositories which have changed the way folks learn, develop and share their code. These cloud-based tools can also integrate with other cloud services (CI/CD, code analysis, etc.) to provide a tremendous amount of value to the development process. The cloud-native nature of tools like GitHub also makes it easy for developers to share and document their codebases. 
  • Build Pipelines: Continuous integration / continuous delivery, and build pipelines hosted in the cloud enable integration with other cloud services, adding new capabilities to ensure your code is of high quality, tested thoroughly and deployed. 
  • Testing: Cloud testing services enable testing of products against many different browsers/devices in an automated fashion, slicing the time needed to get your product out the door. As stated before these tools can also be tied into the CI/CD pipeline to turbocharge the productivity of your development process.
  • Infrastructure as code: Infrastructure as code is a relatively new innovation which enables infrastructure configurations to be defined as code, allowing the automation of creation, teardown and setup of infrastructure such as compute, databases and storage amongst others. These tools drastically cut the time to manage infrastructure requirements. 

Serverless / Containers

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.

Off the shelf services

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. 

Caveats

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. 

Skillsets 

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.

Vendor Lockin

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.

Costs can add up

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.). 

Conclusion

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.