- Posted by Rastko Vasiljevic
- On October 18, 2019
- 0 Comments
Much like the Cloud Enablement process used to have a certain taboo-like undertone within the IT community up until a couple of years ago, the DevOps approach is yet to fully enter mainstream IT waters.
For those of you aren’t quite familiar with the term: In a nutshell, DevOps service is a bridge between software development and information technology practices with an overarching goal of streamlining a company’s workflow and shortening the system development life cycle, while offering a scalable infrastructure within which the teams are able to deliver new features, perform fixes, and make updates as frequently and as seamlessly as possible.
Most typically, the DevOps team consists of cross-functional members from both ends – software development and operational stage – who are working together in order to improve functionality, efficiency and innovation levels, and ultimately reduce TTM (Time to Market).
What is DevOps?
- Infrastructure Provisioning
- Configuration Management
- CI/CD (Continuous Integration and Continuous Deployment)
- Automated Testing
- Continuous Automated Monitoring
In an ideal environment, the benefits of adopting the DevOps mentality and deploying this approach are manifold.
Benefits from the technical standpoint:
- Streamlined workflow and continuous software delivery
- Decreased project’s complexity
- Automated testing and faster problem solving
- Safer and more stable infrastructure
- Faster feature testing and delivery
- Shorter TTM
Benefits from the cultural standpoint:
- Increased productivity, innovation and creativity of your teams
- Increased levels of employee engagement and input
- More development opportunities due to workflow optimization
- Improved team’s communication and more optimized collaboration
However, the aforementioned DevOps advantages are not easily achievable unless the teams involved are prepared to adopt DevOps as a mindset and adapt to this continuous, Möbius-strip-like workflow concept accordingly.
DevOps As A Mindset
DevOps, in its most basic form, is a mindset. It involves the utilization of certain technologies in order to move the process of application development from point A to point B in the quickest and most streamlined way possible.
According to an article published on Gartner, the adoption rates of DevOps mentality are on a continuous rise, but the main extenuating issue in this entire concept is still the “people factor”; while technical issues involving processes, technology and IT have proven to be more easily manageable. In fact, as much as 50% of 367 IT and business leaders who have partaken in the Gartner study have reported “people issues” as their biggest challenge with implementing the DevOps approach.
In order to overcome this scenario, team members need to work together on embracing DevOps as a brand new approach and accept it as a form of both cultural and business shift towards more optimized/streamlined workflows and thus more successful projects overall.
Those who plan to delve deeper into the DevOps landscape need to first have a firm grasp on how traditional systems work and what type of workflow pitfalls they involve, for only then can one understand all the potential benefits of this type of automation and tackle this approach with tangible friction and with as few bottlenecks as possible.
How DevOps Mindset Helps With Pain Points of Traditional Systems
A company that creates applications most typically has two types of teams that work together:
- The SysAdmin Team
- The Development Team
The usual workflow looks something like this:
The dev team develops a project on a server and they send a questionnaire to their admin team who gets this server up and running according to the specs received from the dev team. These servers are then being tested, which is a process that can take up to several months (depending on the project size).
Once the tests are completed, the production stage of the app can commence, which is where the issues usually emerge.
These issues involve certain segments of the app that are simply not working in the production stage, even though these segments worked perfectly during the development phase. The main culprit here is the difference in the two environments. Something that works smoothly in the development infrastructure won’t necessarily work within the production stage.
This occurrence creates the notorious Efficiency Gap between development and operations depicted below:
This is where the DevOps approach comes into play with the main goal to successfully bridge and reduce this efficiency gap between the two teams, bring the two stages closer together, and allow for a continuous workflow environment which will obviate any potential issues that may crop up later in the production phase.
In order to do so, the company must understand all the potential benefits of cloud-based solutions that make the DevOps approach possible, and then learn how to deploy it successfully within a dynamically scalable infrastructure.
Here, the key element is automation.
Through properly executed automation process, all team members must be 100% sure they can quickly and effectively replicate the entire working environment in order to test their product in the development phase and be certain it will work perfectly in the production phase as well.
The end goal of the DevOps-based automation is to streamline all the workflow segments necessary for one application to work properly and reach the market as soon as possible.
These segments include:
- Account maintenance
- User creation
- Security and safe logins
In an ideal DevOps environment, all these segments should be treated as a code. This is where the Infrastructure as Code or IaC notion comes into play.
The “Infrastructure As Code” Model
The Infrastructure as Code model involves the deployment of DevOps tools that allow us to keep all the aforementioned segments stored as code, and then – with the help of automation tools – move and maintain entire infrastructures in the cloud. This code, therefore, becomes detailed documentation of the infrastructure.
These events cover the following:
- What happens during the development stage
- What happens during the production phase
- Which changes exactly are taking place
- Where and when these changes occur
- Whether or not new server instances were added/removed
The overarching goal of the IaC approach is: to allow team members to keep their codes and scripts (made for specific projects) highly-accessible and therefore easily maintained. This makes the replication of entire architectures more simple, easily doable and cost-effective, which allows for a streamlined building of new staging environments in the future.
Infrastructure as Code involves using automation tools to write the scripts and then keep those codes in a repository-like infrastructure which you can later change and maintain the way you see fit. This allows the dev team to quite easily replicate infrastructures and quickly come up with new staging environments where they can test features and releases much more easily (when compared to traditional non-DevOps environments), allowing them to reach the production stage in a much shorter time-frame.
The Importance of CI/CD (Continuous Integration & Continuous Deployment)
Continuous Integration & Continuous Deployment, or CI/CD, is the process that makes the entire DevOps methodology possible and so beneficial. Through properly planned and executed CICD, the integration phase (that can oftentimes make or break entire projects) is automated and made more streamlined.
Continuous Integration helps developers:
- Validate code integration on a regular basis
- Automate testing
- Fix bugs faster
- Optimize the software development workflow
- Increase confidence within the entire team
In this type of environment, the development team typically uses DevOps tools (that are most typically set up on dedicated servers) to detect any new code commits. Whenever a change in the code occurs, the continuous integration tool automatically builds and tests the new code and integrates it into the codebase. If the developers commit their codes on a regular basis, the entire process gets even more streamlined and code integration appears seamless.
This type of automation helps companies:
- Reduce risks
- Improve team communication
- Reduce overhead costs
- Achieve a consistent code building process
- Obviate manual fixing of integration issues due to small-scale incremental testing
All these benefits pave the way for improved workflows, solid products, and shorter production time-frame because in this type of continuous delivery ecosystem, the code is always releasable.
Continuous Deployment takes the continuous delivery notion even further. Every time a developer commits a piece of code, if the automated testing has been successful, the code is being deployed to the production environment making it instantly accessible to the customers. This creates a unified work environment free of any bottlenecks and friction during the phases of development, testing, and production.
Teams that manage to plan out and successfully execute the CI/CD pipeline are able to create and ship their products faster and on a larger scale.
SuperAdmins’ DevOps Approach and Implementation Flow
SuperAdmins’ DevOps approach directly depends on what our client is looking for in their automation endeavours. Ideally, the ultimate goal is to utilize the right DevOps tools to produce an app without any downtime, and to push new features and create new releases in a much less convoluted way and as quickly and efficiently as possible.
Whether you’ve only just started developing your app or you already have a finished product, our approach to implementing DevOps into your architecture can be greatly beneficial. However, the company that is looking to integrate the DevOps approach into their infrastructure and workflow must be open to adopting new changes in their traditional environment.
The very first step in our DevOps implementation flow is the assessment. We take a close look at the project from the client’s unique viewpoint and tailor a specific DevOps strategy optimized for their specific project.
At SuperAdmins, we have a 3-way approach to helping companies streamline their workflow:
In the scenario where the company has already implemented the DevOps mindset and they already have their own DevOps engineers who are helping developers and the QA team automate their workflow – we typically take care of the DevOps production phase and set up the production-ready infrastructure through which we can help automate their project further.
Here, the procedure is most typically the following:
- The company contacts us with a somewhat developed DevOps plan
- We automate their project and their entire infrastructure so they can replicate it according to their specs. The CI/CD process takes place so new code is deployed on the new infrastructure without any downtime
It is important to mention that our company acts as one module of our client’s DevOps process and ecosystem. We help them come up with the most optimal DevOps plan and execution strategy, and while we do not write code for them, we DO keep track of any major changes within the code and make sure their infrastructure is working properly and is properly maintained. We give best practice advice and are basically their consultants who help them deploy their DevOps and Cloud Enablement processes.
Through quality DevOps implementation and deployment of adequate DevOps tools, our client’s release management pipeline and Time To Market are streamlined and thus shortened as much as possible.
The necessary IT and DevOps technologies we deploy include:
- Public Cloud
AWS, Microsoft Azure, Google Cloud Platform, Alibaba Cloud, Digital Ocean
- Orchestration Tools
Ansible, Chef, Puppet, SaltStack, CloudFormation
- CI/CD Tools
Jenkins, Travis, GitHub, Bitbucket, CodePipeline, Azure Pipelines
Server virtualization, VDI and App virtualization (VMware ESXi, Xen, Hyper-V, KVM)
Docker, Docker Swarm, Kubernetes, LXC
Linux (all distributions), Windows Server (all versions), operating systems with related services (Web, App, Mail, Collaboration, Database, Active Directory, etc)
Active network devices – L2/L3 switches, routers, firewalls, Load Balancers (Cisco, HPN, Juniper, Citrix NetScaler, Barracuda)
The Bridge Between SuperAdmins and Our Clients
At SuperAdmins, we are all about communication and synchronization. Through the entire collaboration, we are making sure that the communication between us and our clients is tailored according to the client’s preferences so they feel comfortable at all times.
Most typically, we create a group chat on a networking platform of our client’s choice (Skype Teams, Slack, etc), and we use this group chat to tackle all the necessary dialogue and discuss all the aspects paramount to the project. We usually hold meetings every 2 weeks and discuss what has been done during the previous fortnight, and what needs to be done in the following 2-week period.
Of course, depending on the project/infrastructure size and how long it would take for certain codes to be tested, the periods between iterations can be shorter or longer. Also, if we encounter any emerging speed bumps along the way, we tend to deal with them as soon as possible via calls, chats, emails, meetings, etc.
Key Benefits of Deploying Our DevOps Services
The Power of Replication
To be 100% certain that the DevOps model you’ve created will work again in the future is a huge benefit in this type of environment. From our end, the process usually involves the following aspects:
- orchestrating the shift
- provisioning of the client’s infrastructure
- replicating the instance/infrastructure
Whether it is deploying the DevOps approach within a brand new project, or ironing out potential issues for existing ones, or even setting up brand new instances for already existing projects – the SuperAdmins DevOps team is capable of tackling these tasks rather quickly and effortlessly.
What makes this possible for us is the dynamically scalable cloud-enabled ecosystem.
In the cloud, there are few resources that are “set in stone” and fixed. Everything else is highly susceptible to change and elimination. This type of environment allows us to set up or replicate an infrastructure from scratch and be sure it will work frictionlessly.
Let’s say you have a server with a traditional WordPress website that contains data like photos, visualizations, documents, etc; and now you want to have another server for that page. The most common issue that emerges is – what to do with the files that need to be uploaded? Naturally, these files cannot simply appear on both servers once they have been successfully uploaded on the first one. In this case, you need to find a way to have them uploaded on both servers at the same time.
This is handled through the process of creating a shared storage both servers will have access to, which allows you to eliminate all those static files that you have within your application by moving them onto this shared storage, so they are no longer stored within the app. Once this is completed, you will have a server that is used only for your WordPress page. This enables our clients to, if necessary, effortlessly add more servers in the future without any downtime, with an option of completely eliminating the very first server without any potential repercussions in the form of data loss.
Our clients have an opportunity to reduce their workloads and TTM due to:
- Scalable cloud-enabled environment
- High levels of automation
- High levels of workflow streamlining
- Easier and faster testing
- Shorter CPU cycle
…all these inevitably lead to reduced overall costs and improved ROI.
Within traditional environments (on-prem servers), you are forced to pay for physical resources that cause huge upfront investments without being able to optimize the utilization of those servers at all times, which means the companies are facing overhead costs most of the time – a pain point that is especially noticeable in the long run.
This is where the scalability of cloud-based infrastructures and the benefits of the DevOps mindset kick in.
For example, you don’t have to spend a substantial amount of money upfront for a project that would incrementally grow in the next 3 years. Instead, you can dynamically scale your servers as your projects grow, thus optimizing your costs on a monthly basis through the so-called Pay-As-You-Go system.
For example, if you need to quickly set up a complex infrastructure in order to run daily tests and then shut this infrastructure down after testing is finished, you can do so quite quickly and without any overhead costs. You also have the option to set up this auxiliary-type infrastructure in the future whenever you need to perform additional tests.
This means that you are paying for these servers only when you are actively using them, which is not the case with traditional environments.
Long-Term Infrastructure and Project Maintenance
The maintenance phase comes after all the DevOps and Cloud Enablement segments of the project are complete. The project/infrastructure maintenance is executed through SuperAdmins’ 24/7 monitoring service in which our company takes control over the infrastructure. Through minor changes and tasks (most typically in the production phase) we come up with the best, most optimal and fail-proof solutions on how to execute them properly.
Right from the very first stage, our DevOps team makes sure the scalable architecture is set up in such a way so any potential (and coveted) further growth is handled seamlessly and new features are easily implemented in the project.
This is where the continuous, Mobius-strip-like automation comes into effect.
A company should not only focus on the phases of development and production. Finishing a project successfully is vital, and though at this point you may feel like your team has crossed the finish line – there are still laps to go.
Creating an app that will work for dozens of users surely is a success, but making sure it will work perfectly once you get dozens of thousands on board is what separates top-shelf projects from mediocre ones.
Knowing how to handle many a bump in the road that lays ahead is important, but removing these bumps altogether is what DevOps is all about.
The main building blocks of the environment that would make this scenario possible are:
- Dynamically scalable infrastructure
- Properly executed CI/CD (Continuous Integration & Continuous Deployment)
In an environment where the DevOps mindset and workflow are properly implemented, it doesn’t matter how many new features or lines of code you will be adding to your app later on because you know all the tasks will be seamlessly performed and the changes applied will ensue organically and automatically within the app that is shipped in the cloud.
(Note: Since SuperAdmins offer the 24/7 maintenance model, we look at this type of support as a separate aspect of the services we offer, but one that does include the DevOps mindset and perspective.)
AWS Case Study – gRPC
Project Details and Overview
A B2B application implemented as a single and multi-tenant environment on AWS with custom builds for mobile apps for both iOS and Android devices that communicate with the back-end services via API. Each application is custom-built for a specific customer and the AWS environment is created in an automated way with specific parameters. The application ecosystem is written in Go and consists of six different micro-services each playing a different role. All the micro-services communicate via gRPC and connect to a PostgreSQL database (except for the front-end application which is written in AngularJS).
Benefits of Hiring SA DevOps Services Over Hiring an In-house DevOps Person
Some CIOs and CTOs may ask: “why wouldn’t we simply hire an in-house DevOps Specialist who would take care of all these tasks for us?”
The answer is efficiency and costs.
In order to have an in-house DevOps specialist, the company needs to find an adequate person for the job – a person with the much-needed skill set and experience in this field – which can be a rather arduous task and may take months. And even if a company manages to find the appropriate person, this is a full-time job that requires substantial monthly payments, without any guarantee that this person alone will hit the ground running and be able to properly handle all the aspects of deploying the DevOps model efficiently.
With the SuperAdmins’ DevOps model, companies hire us part-time to help them kickstart their projects in the most optimal and cost-efficient manner. Even if a company has a full-fledged in-house DevOps team, it doesn’t necessarily mean they have the needed know-how to execute more convoluted DevOps strategies.
Perhaps the main lingering problem with the DevOps and Cloud Enablement approach is, somewhat paradoxically – cost. In order to fully and directly experience the potential cost-effectiveness of these two models, CTOs and CIOs of software development companies must zoom out respectively and take into account all the long-term aspects of the DevOps-induced automated workflow.
One of the major takeaways here should be the fact that the DevOps process, in order to be deployed flawlessly, requires the absence of hastiness. Depending on the architecture and the project size, this procedure may take time and should not be done in a hurry. To plan, orchestrate and execute this process properly, one must make sure all the moving parts are working perfectly so all the phases of the shift would pan out as smoothly as possible, without any compromises and sacrifices.
Only then will a company implementing the DevOps mindset reap all the potential benefits of the fully automated software development process.