DevOps FAQ



What is DevOps?

"DevOps is the combination of cultural philosophies, practices, and tools that increase an organization’s ability to deliver applications and services at high velocity. This speed enables organizations to better serve their customers and compete more effectively in the market. DevOps moves the focus from development to delivery—a subtle but important distinction."
What is DevOps?

In a simpler term, DevOps is a ‘Soch’ (a philosophy) which encourages frequent feedbacks from customers and accordingly make changes to plan, design or deliverables. It discourages HiPPOs (Highest Paid Person’s Opinion) culture in the company. For frequent feedbacks, release should be available to customers frequently in the production environment. This implies, goal of DevOps is to minimize time elapsed from ‘acceptance of change request’ to ‘availability of quality code to customers’. Companies can achieve nirvana in DevOps by automating everything in their delivery process. But DevOps is not all about automation, some companies can minimize the deployment time by just changing the culture (e.g. removing red tapes during handover of work to different teams, a concept of Go-NoGo manual approval).

What are some of the effective DevOps practices?
To realize the goals of effective collaboration & smoother operation, below practices are adopted -
  • Open and honest participation of all stakeholders (developers, operations staff, testers, support people)
  • One version control system for all codes (application code, test scripts, Ops scripts), accessible to all stakeholders
  • Small, frequent and simple changes
  • Never break the consumer code
  • If failing, fail it fast and often
  • Setup automated builds and tests
  • Implement Continuous Integration (CI)
  • Deploy same binaries across all environments (Development, Integration, Staging, Production etc.)
  • Continuous deployment from one sandbox environment to next one until production environment
  • Continuous monitoring of application as well infrastructure
  • Real time insights to organization’s governance team through automated dashboard
  • Simple and flawless rollback strategy

How is DevOps different from Agile?
DevOps is an extension of Agile methodology. In Agile methodology, the focus is on building the working software quickly, but DevOps is responsible for development as well deployment of software in the safest and most reliable way possible. If Agile talks about Continuous Integration (CI), DevOps talk about Continuous Integration (CI) and Continuous Delivery (CD). The most important aspect of DevOps is a continuous collaboration between development & operation team.

Why Enterprises moving/need to move to DevOps?
To stay competitive in the current market, enterprise organizations are embracing DevOps methodologies and new technologies to accelerate innovations. Agile development reduces the time of development but not deployment. This post development tasks take too long and delay getting new business functionality to users. DevOps brings the agile team focus on communication and collaboration between developers and the operation team, leading faster customer feedback.

What are some common tools being used in DevOps ecosystem?
DevOps philosophy doesn’t mandate any tools and rather emphasizes communication and collaboration between product management, software development, and operation professionals to build, test and release software rapidly, frequently and reliably. But for an effective DevOps implementation, it is important to understand tools and implementing an effective continuous delivery tool chain. The key is to automate at every opportunity where ever possible during software delivery process.
Different types of tools required for DevOps implementation are –
  1. Orchestration of the deployment pipeline visualization
  2. Version control of source code (Dev, Test & Ops)
  3. Automation of code quality check
  4. Automation and management of builds (CI)
  5. Automation of testing (unit testing, integration testing, system testing, user acceptance testing, service virtualization, performance testing, security testing etc.)
  6. Management of Artifacts (code binaries, resources etc.)
  7. Tools for automatically provisioning the environments (physical, virtual, private and cloud)
  8. Tools for server configuration and deployment management
  9. Tools for monitoring and reporting
CD ChainNotesTools
Orchestration and Deployment Pipeline Visualization Deployment pipeline steps can be built and visualized by integrating the entire existing tool chain. It helps team to detect delays & wait times between each steps. ElectricCommander, CA LISA, IBM UrbanCode, XebiaLabs XL
Version Control Source code and configuration files are version controlled. All text based files, getting changed by team members should be added into the version control Git, Mercurial, Perforce, Subversion, TFS, Bazaar, CVS
Continuous Integration Integrate new code with stable main release line and alert stakeholders if it causes issues in the final product Jenkins, Travis CI, ThoughtWorks GO, CircleCI, TeamCity, Bamboo, Gitlab CI
Continuous Inspection Automatic & continuous audit of code quality in terms of maintainability, coding standards, future bugs etc. SonarQube, CheckStyle, JavaNCSS, CPD, FindBugs, PMD
Artifact Management Focus is on packaged artifacts like application assets, virtual image, configuration data, infrastructure code etc. Artifacts are identifiable, versioned and immutable. Package metadata identifies how and when it was tested and against which environment Nexus, Artifactory, Archiva
Test Automation The goal should be to automate regression suite completely except scenarios, which can’t be automated. JMeter, Selenium/WebDriver, Cucumber (BDD), RSpec (BDD), SpecFlow (BDD), LoadUI (Performance), PageSpeed (Performance), Netem (Network Emulation), SoapUI (Web Services)
Environment Automation Test environment can be brought up on-demand using automation tool, which can provision VMs and applying configuration template. Vagrant, Docker, Packer
Server Configuration and Deployment Management Tools are used to deploy binaries into the required environment(s). Team needs to ensure that process is fully automated and must have capability of rolling back to previous stable version w/o any issues Ansible, Chef, Puppet, SaltStack
Monitoring and Reporting Log files from all system can be aggregated at centralized location, should be indexed and searchable from web browser

Real time insights to organization’s governance team through automated dashboard
Application: New Relic, Dynatrace, AppDynamics

Infrastructure: Nagios, Sensu

Logs: Splunk, Fluentd, Heapster, Logstash, Prometheus, WeaveScope

Can you also point out some common myths around DevOps?
Some of the common myths around DevOps are –
  • Adopting tools make you DevOps
  • DevOps is about 10 deploys a day
  • DevOps and continuous delivery are same
  • Continuous delivery is only for web companies
  • DevOps is all about automation

What skills are necessary to become a DevOps engineer?
Automation is an integral part of DevOps and the key is to automate at every opportunity where ever possible. Apart from communication and collaboration, an engineer needs to have multiple skills to work in DevOps culture. Below is the list of skills required in a team for implementing DevOps successfully. It is highly unlikely that one engineer will have ALL the skills.
  • Senior level Windows / Linux administrator who can build and administer servers
  • Relevant and practical virtualization experience with VMware, KVM, Xen, Hyper-V
  • Having good grasp on storage and networking, who can design a solution that scales and performs with high availability and uptime
  • Understand fault tolerance and failure domains
  • Must have experience in scripting in one language at least like Bash, Powershell, Perl, Ruby, JavaScript, Python etc. so that code can be written to automate repeatable processes
  • Practical experience in deploying applications in Amazon AWS, Google or Azure
  • Broad understanding of Security & Performance testing
  • Broad understanding and practical experience in below tools and technologies
    • Version control tools like Git, Bitbucket, SVN, VSTS, Perforce
    • Continuous Integration tools like Jenkins, Bamboo, TFS, Maven, Ant, CruiseControl and Hudson
    • Automation tools like Selenium, Cucumber, VSTS etc.
    • Infrastructure automation or Configuration Management tool like Puppet, Chef, Ansible, Vagrant, CFEngine etc.
    • Containers like Docker, LXD
    • Orchestration like Kubernetes, Mesos, Swarm etc.
    • Monitoring tools like Nagios, Munin, Elk, Zabbix, Sensu, LogStash, CloudWatch and NewRelic etc.

What are KPIs related to DevOps?
The success of DevOps implementation can be measured using below key metrics:
  • Deployment frequency – How many deployments per day/week?
  • Deployment speed – The time elapsed from committed code to its deployment at customer
  • Deployment failure rate – Number of failed deployment
  • Mean time to recover (MTTR) – time to recover from a given failure
Answer of these metrics will lead in finding out the maturity level of DevOps implementation at customer place

What is the role of testers in DevOps?
DevOps is all about delivering "quality" applications and services at high velocity. When software is being delivered at high velocity, quality becomes the biggest risk and testing needs to be conducted everywhere and should be done by everyone. Software testing practices and mindset are an inseparable part of DevOps.
The testers are looped in during the complete software delivery process, from ideating (shift-left) to production monitoring (shift-right). DevOps centric QA strategy needs to be implemented and Continuous Testing becomes an integral part of a delivery chain. CI/CD becomes meaning less without Continuous Testing. Below are some key roles of QA in DevOps –
  • Development of test automation suite for various environment (Dev, Integration, Pre-Production, and Production
  • Integration of test automation in the CI / CD tool set
  • Development of DevOps centric test strategy
  • Validation of UX designs
  • Nonfunctional testing like performance & security

What is Continuous Testing? How does it play role in DevOps?
Continuous testing is the process of executing automated tests as part of the software delivery pipeline to obtain immediate feedback on the business risks associated with a software release candidate.

A few years ago, developers were delivering software at lightning speed in a sprint leaving QA to catch up on sluggish testing practices with minimal coverage across frequent builds. The widespread culture of Agile development has accelerated development while software testing lagged, forcing organizations to cut corners in QA or slow down Dev processes entirely. Continuous Testing in DevOps mitigates risks by going beyond automation and encompassing all DevOps practices – including tooling and culture change. Continuous Testing tries to achieve four capabilities: Test early, test faster, test often and automate.

E2E test automation practice integrate QA into existing fast-paced Dev and Ops process and create continuity while maintaining faster development cycles. Collaboration, tooling & E2E test automation helps in identifying defects early in the life cycle.

Continuous Testing starts within development process when Dev use open source tool like Selenium to test the functionality of their code. Tools such as GitHub are used to store tests and version together with the software code. DevOps use the same tests to integrate frequent builds. Once the code reaches pre-production environment, the tester can use the same tests by modifying test parameters as appropriate. In the production environment, Ops can reuse this tests for acceptance testing and ongoing production monitoring. Once the application goes live, the same tests can be integrated within APM tool to keep a tab on server side app metrics.

What is Continuous Monitoring? How does it play role in DevOps?
During Continuous Monitoring, the Ops team monitors and ensures that the application is performing as desired and production environment is stable. So far, it was being done by specialized tools owned by Ops team. DevOps principles suggest monitoring applications as well, which means Ops to use tools that can monitor application performance as well as any (functional) issues along with system level monitoring. It may also require Ops to work with Dev / Test team to build self-monitoring or analytics gathering capabilities right into the applications being built, which would allow for true continuous E2E monitoring.

What do you understand by "Infrastructure as code"? How does it fit into the DevOps methodology? What purpose does it achieve?
"Programmable Infrastructure" is a synonym of "Infrastructure as code". With "Infrastructure as code", there is no need of manually configuring the infrastructure. Tools like Vagrant, Ansible, Docker, Chef, Puppet assists in incorporating infrastructure configuration in the application code. These tools help in achieving full automation in the configuration management. Developers not only can write the application code but can write the infrastructure that the code runs on. It helps QA to avoid the “It worked on my machine” problem and allowing the full suite of test unit to integration to functional to be run on brand new instances of infrastructure.


Comments

Popular posts from this blog

Performance Test Run Report Template

Bugs Management in Agile Project

Understanding Blockchain