What is DevOps ?

Tamish Verma
8 min readNov 12, 2023

--

As seen from eyes of Noob fresher

Devops

According to me DevOps is set of rules/practises that enables a team to deliver high quality software, websites or applications in a timely and evolving fashion.

Previously monolothic architecture for code was used in which one complete code had inclusive of all small services. For example amazon shopping app. The payment gateway, add to cart, products prices etc. all encapsulated under bizzilion line of code.

But with the advent of microservices, these set of services are broken down into smaller chunk of modules and connected with each other.

Devops process and tools

Whats the benefit?

Umm, the software developers can tap into one service, improve its quality, update the functionality and he not has to go through the complete bizzilion lines of code. He just has to create image(Pls not docker, it will come) inside mind of small chunk of code that forms one service and focus over that.

More scenarios for DevOps

Issue among developers and testers

Its a very common issue everybody knows it but we can discuss shortly. Developer says its working now test it and sends it across. Tester WTH its not working what are you doing from past 10 days. Developer - doing what you dont do and its working come to my seat or home and see it with your eyes.

Tools which can help here — Docker, Garden, Podman

Issue with rise/fall of users

Take one more example, here in India there comes up a Flipkart/amazon sale and many more people visit these apps for shopping at discounts. If from production they have been deployed for 1000 people but in these sale time 10,000 or 1000000 people came. What the admin or operations person has to do. Deploy the code for these many people. Next more people then again has to do for more people. Umm, weird way of doing things.

Now maybe the admin or operations team scaled up bought up the servers from the company either physically or on cloud. Now the sale or load or some time in a day people are not putting up load to the servers. Now he can make these servers have rest if physical or on cloud release them cause of the Bill, why pay more than you need.
Scalability is required!!!!!!

Tools which can help here — Kubernetes, openshift, Docker Swarm

Issue with innumerable machines

For example, you are working with a organisation and it has 10,000 employees. All those employees will have laptops. Some people maybe working on cloud(Its someone else’s server) so they have many virtual machines.

Now the scenario came up where for example company has to follow CIS benchmarks. It has to install crowdstrike falcon or umm VPN to access company internal information accessable to employee only. Now how we install it?

We can go to each laptop to install, individual can do it one by one. Another way maybe we might have one machine that controls all other machines and are connected to that via ssh or maybe via anything. And we push these updates and even regular updates.

Tools which can help here — Ansible, Chef, puppet, CFEngine, Tower(Paid version of ansible)

Multiple teams working on a single project

There maybe two three teams with for ex. 10 people working on one repository and continously doing changes and enhancements to already written code. There is one branch i.e. main/master where everything running in production has been stored so 10 people doing their changes will push it to prod and what if it breaks the code.

The code byfar is not tested neither gone through any environments. For this what other developers will do or how will they push the changes.
And if some new thing or feature they have to add how will they do.

Maybe they can branch out the main/master code and do their changes and push it to a seperate branch and put it up for review with high exp devs or the person who has written the master code working in production. Goes through basic tests already put up and holds good maybe in their first environment, it will be acceptable and doesnt hinder the already written code but adds a feature over it.
Sounds good right!!!!!!

Tools which can help here — Git, SourceTree, Gitea, Perforce Helix core, Bitbucket

Now we had gone through many scenarios, lets connect the scenarios. Pls just listen to my perspective.

  1. Developer enhanced the code ->
  2. Pushed the code, testers ran the basic tests everytime someone pushed the code, plus some testers argued its not working. Lets assume fixed-
  3. It holds good went ahead and got a thumbs up from exp dev or managers. Went into production. ->
  4. Its an enhancement done via expressJS (Javascript Framework) and machines who has to run or the servers who has to run dont have this framework installed ->
  5. Now install this framework on every node/server ->
  6. Then working in production now increase servers or decrease according to requirement.

We have left compliance security QA etc. We can leave it and assume these things and we have to it everytime when somebody pushed some feature or changes.
Believe me I have seen the push of changes and code more than 10 times to one repo in a single day. 10 times is still very less.
Now you think you can do these steps everyday, ofcourse you are paid for it. YOU BETTER DO IT.
But assume the quality, assume the TTM(Time to market) of this app or code.

What we can do is automate some basic things. Now what we can automate.

Automating Some things

Push to repository and some basic sanity tests that are monotonous that just mere check the basic functionality of the code

Installation of basic packages as and when required. (Although the admin to the tool which we talking about will do. We have to request. Thats how I have seen)

Package the code in the form of magic box, with all packages, settings, accesories etc. and store it in a repository.

Testers are not frustrated with versions mismatch they can download the running piece of code and the dont care about the environment of theirs or devs and they will be happy it is working on their system.

This bring us to one of the most important concept or scenario of DEVOPS.

CI/CD (Continuous integration/ Continuous Deployment or Continuous Delivery)

Continous integration if I simply put, I pulled the main branch or dev branch checkout from main branch to new branch did some changes and pushed code.
The push might trigger the pipeline or we can manually do it and we it can go through the setup tests, some code analysis and might build a docker image or publish MAVEN or Gradle etc. type artifacts or maybe push the code to JFROG or docker-hub.
In all these we can see if my change is holding fine with basic functionality or hindering the basis of the code which is already working.

Continous Integration

Continous Delivery is a process of delivering the final product and it also has to go through some testing. But catch is the testing will happen in Dev automated tests.
Then it goes through staging there testers test the code manually, perform lots of tests Integration Testing, System Testing, Performance Testing, Regression Testing etc.
Then it goes to UAT, testers here perfomed User Acceptance Testing, Alpha/Beta Testing, Usability Testing, Business Process Testing.
Then in prod environment testers perfomed Smoke Testing, Monitoring and Logging, Security Monitoring, Backup and Recovery Testing, Compliance testing etc.
Then if all goes smooth the code it will be released to production servers.

Continous Deployment is a process of delivering the code in small cycles. It has to pass some pre-set tests and it goes to production at the same time.
Example for it, I had a code that I was handling where I will be getting one excel sheet every-day and one excel sheet was common always. I need to merge those excel sheets and before merging need to clean up the data tidy it up and merge on basis of one column. I did all with python packages. It was internal organisation code and data was required almost everyday so it was continous delivery. No outside client was involved or using that piece of code. Basically just update the code to new branch it will do some tests and if all seems okay merge it directly to the main branch and here we go we can start using it.
As far as I have seen no environments are involved. Like Dev, staging, UAT, Prod.

In delivery no release approval is required. It went from my laptop to production site without any intervention and I kept on updating it as and when it failed to do the required work.

Tools which can help here — Jenkins, VCS, Azure pipelines, Circle CI, Tekton pipelines

That’s all maybe, rest much of things are there like open-source DEVOPS, Cloud based Devops etc.
We can talk about in other posts.

Additional Sources
https://spacelift.io/blog/devops-best-practices

FeedBack
If you have any feedback or suggestions for improving my article or I am wrong about anything, please leave a comment on this post or send me a message on my Linkedin. I am always open to learning and criticism which can help me grow.

--

--

Tamish Verma
0 Followers

I am a new DEVOPS enthusiast as well as learner. Sharing my learning and findings