DevOps Unit-I Final
DevOps Unit-I Final
HISTORY
What is Software: Software is a set of instructions that tell a computer what to do. It’s created using
code written by developers. It is independent of hardware and makes computers programmable. Software
development refers to a set of computer science activities dedicated to the process of creating, designing,
deploying and supporting software.
Types of Software:
• System Software: Operating systems (Windows, Linux).
• Application Software: WhatsApp, YouTube, MS Word.
• Web Software: Flipkart, Gmail, Netflix.
Real-Life Example: When you order from Swiggy:
• UI shows restaurants
• Backend places your order
• Database stores order details
• Server notifies restaurant
Software Development Life Cycle (SDLC)
A software life cycle model (also termed process model) is a pictorial and diagrammatic representation
of the software life cycle. A life cycle model represents all the methods required to make a software
product transit through its life cycle stages. It also captures the structure in which these methods are to
be undertaken.
Stage1-Planning and Requirement analysis: Requirement Analysis is the most important and
necessary stage in SDLC. The senior members of the team perform it with inputs from all the
stakeholders and domain experts or SMEs in the industry. Planning for the quality assurance
requirements and identifications of the risks associated with the projects is also done at this stage.
Business analyst and Project organizer set up a meeting with the client to gather all the data like what
the customer wants to build, who will be the end user, what is the objective of the product. Before
creating a product, a core understanding or knowledge of the product is very necessary.
Once the requirement is understood, the SRS (Software Requirement Specification) document is created.
The developers should thoroughly follow this document and also should be reviewed by the customer
for future reference.
1
Stage2-Defining Requirements: Once the requirement analysis is done, the next stage is to certainly
represent and document the software requirements and get them accepted from the project stakeholders.
This is accomplished through “SRS”- Software Requirement Specification document which contains all
the product requirements to be constructed and developed during the project life cycle.
Stage3-Designing the Software: The next phase is about to bring down all the knowledge of
requirements, analysis, and design of the software project. This phase is the product of the last two, like
inputs from the customer and requirement gathering.
Stage4-Developing the project: In this phase of SDLC, the actual development begins, and the
programming is built. The implementation of design begins concerning writing code. Developers have
to follow the coding guidelines described by their management and programming tools like compilers,
interpreters, debuggers, etc. are used to develop and implement the code.
Stage5-Testing: After the code is generated, it is tested against the requirements to make sure that the
products are solving the needs addressed and gathered during the requirements stage. During this stage,
unit testing, integration testing, system testing, acceptance testing is done.
Stage6-Deployment: Once the software is certified, and no bugs or errors are stated, then it is deployed.
Then based on the assessment, the software may be released as it is or with suggested enhancement in
the object segment. After the software is deployed, then its maintenance begins.
Stage7-Maintenance: Once when the client starts using the developed systems, then the real issues
come up and requirements to be solved from time to time. This procedure where the care is taken for the
developed product is known as maintenance.
What are the Software Development Models?
The software development models are the various processes or methodologies that are being selected for
the development of the project depending on the project's aims and goals. There are many development
life cycle models that have been developed in order to achieve different required objectives. The models
specify the various stages of the process and the order in which they are carried out.
There are various Software development models or methodologies. They are as follows:
1. Waterfall model
2. Spiral model
3. V model
4. RAD (Rapid Application Development) model
5. Iterative model
6. Incremental model
7. Prototype model
8. Agile model
Choosing right model for developing of the software product or application is very important. Based on
the model the development and testing processes are carried out. Different companies based on the
software application or product, they select the type of development model whichever suits to their
application.
WATERFALL MODEL
Winston Royce introduced the Waterfall Model in 1970. It is also called as Linear Sequential Model.
The Waterfall model is the oldest and most straightforward model. It follows a step-by-step process
where each phase must be completed before moving to the next one. You cannot go back to change or
fix something in a previous phase.
2
This model has six phases: Requirements analysis, design, implementation, testing, deployment and
maintenance. The steps always follow in this order and do not overlap. The developer must complete
every phase before the next phase begins. This model is named “Waterfall Model”, because its
diagrammatic representation resembles a cascade of waterfalls.
• Requirement analysis: All possible requirements of the system to be developed are captured in
this phase and documented in a requirement specification document.
• System Design: The requirement specifications from first phase are studied in this phase and the
system design is prepared. This system design helps in specifying hardware and system
requirements and helps in defining the overall system architecture.
• Implementation: With inputs from the system design, the system is first developed in small
programs called units, which are integrated in the next phase. Each unit is developed and tested
for its functionality, which is referred to as Unit Testing.
• Integration and Testing: All the units developed in the implementation phase are integrated into
a system after testing of each unit. Post integration the entire system is tested for any faults and
failures.
• Deployment of system: Once the functional and non-functional testing is done; the product is
deployed in the customer environment or released into the market.
• Maintenance: There are some issues which come up in the client environment. To fix those
issues, patches are released. Also, to enhance the product some better versions are released.
Maintenance is done to deliver these changes in the customer environment.
Advantages of Waterfall model
✓ simple to understand and easy to follow.
✓ As it's a top-down approach process, overlapping of the phases is avoided.
✓ Well-documented process.
✓ Works well when requirements are fixed and well understood.
✓ Easy testing and analysis.
✓ Suitable for small-projects
Disadvantages of Waterfall model
✓ No flexibility, you can’t revisit earlier stages.
✓ Late testing, means bugs are found at the end, which is costly to fix.
✓ Not suitable for complex or dynamic projects where requirements change.
✓ The end product is only available at the end of the cycle
3
To summarize, the Waterfall model was only acceptable for projects with stable specifications. By stable,
I mean that over time, requirements will not change. But this is an improbable thing in today's world, as
specifications keep changing from time to time.
SPIRAL MODEL
The Spiral Model is a unique process model in software engineering that combines the iterative nature
of prototyping with the systematic aspects of the Waterfall model. Introduced by Dr. Barry Boehm in
1986, it integrates the iterative nature of software construction with a focus on continuous risk
assessment. This model is ideal for projects where requirements may evolve over time, allowing teams
to adapt and refine their products throughout the development process. The most important feature of
the model is that once the project starts, it has the ability to manage unknown risks.
Similar to the Waterfall model, each next stage of the V model begins only when the previous one has
been completed.
Advantages of V model:
• Ability to avoid the downward flow of defects
• An apt fit for small projects with easily understandable requirements
• Higher chances of success
• Offers ease and simplicity
• Proactive tracking of potential defects
5
• Saves a lot of time as planning and designing related to testing is done before the actual coding
takes place
Disadvantages of V model:
• Even more rigid than the Waterfall model
• No early prototype creation is possible as the software is developed during the implementation
phase
• Requirement and test documents need to be updated if changes are made during the development
PROBLEMS WITH TRADITIONAL MODELS:
1. Developers and Operations Teams are Separate
✓ In traditional models like Waterfall, the development team (who writes the code) and the
operations team (who deploys and manages it) work in isolation.
✓ Developers finish the code and then “throw it over the wall” to the Ops team for
deployment.
2. Code Works on Developer Machine but Fails in Production
✓ Developers build software in their own local environments.
✓ But the production environment (where real users access the software) can be very
different—different OS, settings, versions of libraries, etc.
3. Time-consuming for Manual Testing and Deployment
✓ In traditional models, testing is done manually, often by QA teams after all development
is completed.
✓ Deployment is also manual, involving human steps like uploading files, configuring
servers, restarting services.
4. No Feedback from Users Until Late
✓ In models like Waterfall, the software is shown to the user only at the end—after months
of work.
✓ If something is wrong, it’s too late or expensive to fix.
5. Hard to Respond Quickly to Bugs or Feature Requests
✓ Traditional models require formal change requests and approvals.
✓ Any bug fix or new feature might need to go through a long cycle again:
plan → design → test → deploy.
6
1.1 INTRODUCTION
The word "DevOps" is a combination of the word’s “Development” and “Operations”. DevOps is not
a tool or technology or framework. DevOps is a culture or process or methodology, that implements the
technology in order to promote collaboration between the developer team and the operations team to
deploy code to production faster in an automated and repeatable way. DevOps helps to develop, release
and maintain software Products or projects or applications with higher quality in very faster time.
• Development team involves in planning, designing, coding, testing and building. Examples are
Business analyst (BA), System analyst (SA), Design Architect, developers, QA Engineer
(Quality Assurance), Build Engineer.
• Operations team involves in Release, Deployment, Operations and Monitoring. Examples are
Release Engineer, Configure Engineer, System admin, Network admin and Database admin.
• DevOps is the next generation of Agile. In simple it is a set of processes and tools that helps Dev
and Ops teams work faster.
• Our traditional IT had two separate teams in a organization the Development team and the
Operations team. The development team worked on the software, developing it and making sure
that the code worked perfectly, the team releases software to Operations team. The operations
team will be checking the application and its performance and reporting back any bugs, if present.
• The two major teams always had a conflict when it came to execution. To bridge this gap, we
need DevOps. DevOps is a collaboration between Development and IT Operations to make
software production and Deployment in an automated & repeatable way.
• In simple words, DevOps can be defined as an alignment of development and IT operations with
better communication and collaboration.
• DevOps helps to increase the organization's speed, deliver software applications and services.
• Let's make it clear that DevOps is not a technology, tool or any innovative framework. It is more
of a Philosophy and concept. We can also consider it as a culture of an organization where
application lifecycle management is in the center of focus.
• The logo of DevOps is ∞
8
concentrate on streamlining business workflows to enhance speed, efficiency, and reliability. Moreover,
at possible times, frequent manual work is eliminated.
It is quite simple, but people may get distracted with respect to their objectives while managing DevOps
implementations. Dealing with activities that yield no productive outcome at a greater speed has no
benefit for individuals. However, it is essential to continuously monitor and ensure the delivery of the
improved commercial value. For example, improved interaction among various job roles within the
organization is highly valuable. The owners of a specific product are probably interested in knowing
about the development process. Allowing this will help in rapid and efficient delivery of code
advancements in testing. Within the test environments, important people associated with the project,
including product owners and quality assurance teams, can further monitor the advancements in
development process.
DevOps Tools:
DevOps life cycle and tools used by Dev and Ops teams.
Tools Used by Dev Team are:
• Jira: This Software provides planning and roadmap tools so teams can manage stakeholders,
budgets, and feature requirements from day one.
• Git: It is a distributed version control system that tracks changes in any set of computer files,
usually used for coordinating work among programmers collaboratively developing source code
during software development.
• Eclipse: It is a free, Java-based development platform known for its plugins that allow developers
to develop and test code written in other programming languages.
• Maven: This is open-source tool from Apache automates the build process and resolution of
dependencies and is used primarily for Java projects.
• Ant: Ant (Another Neat Tool) is a Java library and a software tool used for automate software
build processes such as compile, run, test and assemble Java application. It is designed and
developed by Apache Software Foundation.
• Gradle: Gradle is a build automation tool known for its flexibility to build software. A build
automation tool is used to automate the creation of applications. The building process includes
compiling, linking, and packaging the code. The process becomes more consistent with the help
of build automation tools.
• Selenium: This open-source tool for automating tests for web applications is used by Google,
IBM, and other big-name companies. It's used only for web applications not desktop or mobile
ones.
• JUnit: It is a unit testing open-source framework for the Java programming language. Java
Developers use this framework to write and execute automated tests.
9
Tools Used by Ops Team are:
• Puppet: It lets you manage and automate software inspection, delivery, and operation. This open-
source tool has a solid track record and thousands of modules and is easily integrated with many
other platforms.
• Chef: This is powerful open-source configuration management tool lets you turn infrastructure
into a code to manage data, attributes, roles, environments, and more.
• Docker: It is a Linux-based open-source platform that focuses on containers, meaning you
package up the software with its dependencies and ship everything together as a unit-no need to
worry about managing dependencies separately.
• Ansible: This is open-source tool for automating software provisioning, configuration
management, and application deployment is easy to use, Plus, it's agentless and uses a simple
syntax written in the YAML language
• Nagios: Its Used to find and correct problems in networks and infrastructure, Nagios is one of
the most popular free and open-source monitoring tools.
• Kubernetes: A relatively new container orchestration platform lets you manage hundreds of
containers.
• Jenkins: It's a CICD tool, It is known for quickly finding issues in code. It's a free, open-source
tool used for automating the delivery pipeline, and lets you test and report changes almost in real-
time.
• Bamboo: It is a continuous integration and deployment tool that ties automated builds, tests and
releases together in a single workflow.
• Sensu: Sensu is one of the top DevOps monitoring tools, it is used for monitoring infrastructure
and applications solutions.
• SaltStack: It is also known as Salt, is a configuration management and orchestration tool. It uses
a central repository to provision new servers and other IT infrastructure, to make changes to
existing ones, and to install software in IT environments, including physical and virtual servers,
as well as the cloud.
• Splunk: It is a popular application monitoring tool to gain real-time visibility into DevOps-
driven application delivery for Continuous Delivery or Continuous Integration to move from
concept to production quickly.
Advantages of DevOps:
The following are the advantages of DevOps
• Faster delivery of software: DevOps teams work together to deliver software more quickly,
using automation and streamlined processes to speed up the development, testing, and
deployment of software.
10
• Increased agility: DevOps teams are able to respond more quickly to changing market
conditions and customer needs, allowing companies to stay ahead of their competition.
• Improved quality: By integrating testing and quality assurance into the development process,
DevOps teams are able to catch and fix bugs and issues more quickly, resulting in higher quality
software.
• Better collaboration: DevOps teams work together more closely, breaking down silos and
improving communication and collaboration between developers, operations, and other
stakeholders.
• Increased efficiency: By automating manual processes and reducing waste, DevOps teams are
able to work more efficiently and reduce costs.
• Better customer experience: By delivering software more quickly and with higher quality,
DevOps teams are able to improve the customer experience and increase customer satisfaction.
Overall, DevOps can help organizations achieve faster time-to-market, higher quality software,
improved collaboration, and increased efficiency, all of which can contribute to a competitive advantage
in today's fast-paced business environment.
DevOps goals and benefits:
When a team adopts DevOps culture, practices, and tools, they can achieve amazing things:
• Accelerate time to market: Through increased efficiencies, improved team collaboration,
automation tools, and continuous deployment--teams are able to rapidly reduce the time from
product inception to market launch.
• Adapt to the market and competition: A DevOps culture demands teams have a customer-first
focus. By marrying agility, team collaboration, and focus on the customer experience, teams can
continuously deliver value to their customers and increase their competitiveness in the
marketplace.
• Maintain system stability and reliability: By adopting continuous improvement practices,
teams are able to build in increased stability and reliability of the products and services they
deploy. These practices help reduce failures and risk.
• Improve the mean time to recovery: The mean time to recovery metric indicates how long it
takes to recover from a failure or breach. To manage software failures, security breaches, and
continuous improvement plans, teams should measure and work to improve this metric.
11
• The single-phase software development takes 6 to 18 months. In single-phase development, all
the requirement gathering and risks management factors are predicted initially. The agile
software development process frequently takes the feedback of workable product. The workable
product is delivered within 1 to 4 weeks of iteration.
Phases of Agile Model:
Agile Methodology
• Requirements Gathering-Here is where you define the project’s requirements. This phase
includes explaining business opportunities and planning the time and effort required for the
project. Once you quantify this information, you can evaluate the technical and economic
feasibility of your project
• Design the Requirements- Once you’ve identified the project parameters, work with the
stakeholders to define the requirements.
• Development/Iteration-After the team defines and designs the requirements, the real work
begins. Product, design, and developer teams start working on related projects, ultimately
deploying a product or service that is not static.
• Testing- The quality assurance (QA) team examines and evaluates the product's performance,
looking for bugs and other flaws.
• Deployment- The team deploys the product in a working environment.
• Feedback- Once the product is released, the team receives feedback about the product and
handles any issues that may have arisen.
Advantages of Agile Model: The following are the advantages of Agile model
• Customer satisfaction is high, continuous development and delivery of useful software.
• Customer, Developer and Product Owner interact regularly to emphasize rather than processes
and tools.
12
• Product is developed fast and frequently delivered.
• A face-to-face conversation is the best form of communication.
• It continuously gave attention to technical excellence and good design.
• Regular adaption to changing circumstances
• Even late change in requirements are welcomed.
Disadvantages of Agile methodology: The following are the disadvantages of Agile Model
• it is not useful for small development projects.
• There is a lack of intensity on necessary designing and documentation.
• It requires on expert project members to take crucial decisions in the meeting.
• Cost of Agile development methodology is slightly mere as compared to other development
methodology
• The project can quickly go out off-track if the project manager is not clear about requirements.
Examples of Agile Development Methods: The following are the Agile Development Methods
• Scrum
• Crystal
• Dynamic Software Development Method (DSDM)
• Feature Driven Development (FDD)
• Lean Software Development (LSD)
• eXtreme Programming (XP)
Agile Wheel of Wheels (Cycles in Agile Development Model):
Agile development encompasses several different cycles, from the Portfolio level through to the Scrum,
Kanban cycles and down to the Continuous Integration cycle.
The focus of cyclic activity varies based on the specific Agile methodology being used.
• Kanban which is often used in operations team, emphasizes the 24-hour time frame.
• Scrum cycles can be between 2 to 4 weeks and are commonly used by development teams using
the Scrum Agile process. Longer cycles are also common and are called Program Increments
under the scaled Agile Framework. These cycles encompass many scrum sprint cycles.
DevOps must be able to support all these cycles. This is quite natural given the central theme of DevOps:
cooperation between disciplines in an Agile organization.
The importance and significant benefits of DevOps lie in the shorter cycles, resulting in increased
efficiency in the longer cycles.
The following are the few instances where DevOps can enhance Agile Cycles.
✓ DevOps engineers enhance the speed and efficiency of deliverables at the final stage of scrum
cycles. Such cycles can occur over a frequency of 2 to 4 weeks. The organizations that mainly
13
depend on manual deployments, can involve several days to complete a deployment cycle. If
DevOps is implemented in such organizations, they can gain maximum benefits.
✓ Assuming that a Kanban cycle takes 24 hours, it is crucial that the deployment cycle gets
significantly faster than Kanban, in order to achieve success with Kanban.
A well-designed DevOps Continuous Delivery pipeline can deploy code from being committed to the
code repository to production in the order of minutes, depending on the size of the change.
1. Service Strategy: This publication provides guidance on how to develop and implement IT
service strategies that align with business goals and objectives.
2. Service Design: This publication covers the design of IT services, including how to design
service solutions, architectures, processes, and policies.
3. Service Transition: This publication provides guidance on how to manage the transition of IT
services from development to operations, including how to plan and execute changes, manage
risks, and ensure that new or changed services are ready for deployment.
4. Service Operation: This publication covers the management of IT services in operation,
including how to monitor and manage service performance, resolve incidents and problems,
and manage service requests.
5. Continual Service Improvement: This publication provides guidance on how to continuously
improve the quality and efficiency of IT services, including how to measure and report service
performance, identify areas for improvement, and implement changes.
ITIL and DevOps can work together to improve IT service delivery. ITIL focuses on aligning IT services
with the needs of the business, and DevOps focuses on improving the speed and quality of software
15
delivery. By combining ITIL and DevOps, organizations can create a more efficient and effective IT
service delivery process.
Here are some ways that ITIL can be integrated with DevOps:
• Incident Management: ITIL's incident management process can be used to manage and resolve
incidents that occur in production environments. DevOps can provide real-time monitoring
and alerting, enabling faster detection and resolution of incidents.
• Problem Management: The main goal of this management process is to maintain or manage the
life cycle of all the problems which happen in the services of IT. In the ITIL Framework, the
problem is referred to as “an unknown cause or event of one or more incident”.
• Change Management: ITIL's change management process can be integrated with DevOps to
ensure that changes are tested and approved before they are deployed to production. DevOps can
provide automation and agility to the change management process, enabling faster deployment of
changes while still ensuring compliance with ITIL policies.
• Service Level Management: ITIL's service level management process can be integrated with
DevOps to ensure that service level agreements (SLAs) are met. DevOps can provide continuous
delivery and deployment, enabling faster and more reliable delivery of services.
• Configuration Management: ITIL's configuration management process can be used to manage
and track the configuration of IT assets. DevOps can provide automation and infrastructure-as-
code (IaC) tools, enabling faster and more consistent configuration management.
By integrating ITIL and DevOps, organizations can improve their IT service delivery process, enabling
faster and more reliable delivery of services to the business.
ITIL Key Processes
Process Purpose Example
Incident Management Fix issues quickly Printer not working, Wi-Fi down
Problem Management Find root causes of frequent issues “Why does the same server crash
every week?”
Change Management Control and track system updates Upgrading software without
disrupting users
Service Level Management Handle user needs Password reset, new email account.
Configuration Management Track IT assets and their Know what servers, software, and
relationships hardware are used and how.
17
An example of a Continuous Delivery pipeline in a large organization is introduced in the following
image:
While the basic outline of this image holds true surprisingly often, regardless of the organization. There
are, of course, differences, depending on the size of the organization and the complexity of the products
that are being developed.
In general, similarities exist in the initial elements of the pipeline, particularly the developer
environments and the Continuous Integration environment. From organizations point of view, there
exists significant difference in both quantity and variety of testing environments. Moreover, variations
also exist in the production environments.
The various elements of the Continuous Delivery pipeline are as follows:
The Developers:
The developers work on their workstations. They develop code and need many tools to be efficient.
Ideally, they would each have production-like environments available to work with locally on their
workstations or laptops. Depending on the type of software that is being developed, this might actually
be possible, but it's more common to simulate, or rather, mock, the parts of the production environments
that are hard to replicate. One example of this could be constraints related to remote payment systems or
phone hardware.
preference is to use a development environment that is similar to the production environment. If you are
running Windows servers in production, it might also be more convenient to use a Windows development
machine.
This is a sound practice, since otherwise developers might spend a lot of time creating their development
environments. Such a prepackaged environment might, for instance, include a specific version of the
18
Java Development Kit and an integrated development environment, such as Eclipse. If you work with
Python, you might package a specific Python version, and so on.
The preceding developer environment consists of all the development tools we need. These will not be
installed on the test or production systems. This can be a virtual machine provisioned with Vagrant
running on the developer's machine, a cloud instance running on AWS, or a Docker container: there are
many ways to solve this problem.
The revision control system:
The revision control system is often the heart of the development environment. It is the storage area of
organization's software products. It is also common to store the configurations that form the
infrastructure here. If you are working with hardware development, the designs might also be stored in
the revision control system. It is one of the key tools used by successful DevOps teams for reducing
development time and increasing the rate of successful deployments.
The following image shows the systems dealing with code, Continuous Integration, and artifact storage
in the Continuous Delivery pipeline in greater detail:
Regardless of the revision control system you use in your organization, the choice of product is only one
aspect of the larger picture. Moreover, other decisions are also needed to be taken with respect to
directory structure conventions as well as the choice of branching strategy. If there is a large number of
distinctive components, a developer can choose to utilize individual repositories for every one of them.
The build server:
The build server is conceptually simple and easy to understand. A build server is a dedicated server or
computer that is used to automate the process of building software applications. It is also known as a
continuous integration (CI) server.
The build server typically runs a software tool called a build system, which automatically compiles
source code, runs unit tests, and generates binary files or other artifacts that are required to deploy the
software application.
The main benefits of using a build server are that it ensures consistency and repeatability in the software
build process, reduces the risk of errors, and helps to identify and fix issues quickly. By automating the
build process, developers can focus on writing code and testing new features, rather than manually
building and deploying the application each time there is a change in the codebase.
Typically, the build server is programmed to monitor the changes that are implemented inside the
revision control system. Whenever a change is detected, the build server retrieves its locally stored
replica of the source code from the revision control system. Afterwards, it compiles the source code and
executes desired tests to ensure the changes fulfill the required standards. This process is commonly
referred to as Continuous Integration.
19
As there exists Git tool that is used in revision control system, there is no obvious tool that can be
employed in build server field. However, Jenkins has become a popular open source solution for build
servers.
The artifact repository:
When the build server has verified the quality of the code and compiled it into deliverables, it is useful
to store the compiled binary artifacts in a repository. This is normally not the same as the revision control
system. An artifact refers to any file or collection of files that is produced during the software
development lifecycle. This can include source code, compiled binaries, documentation, test results,
configuration files, and other types of files.
An artifact repository is a central location for storing and managing software artifacts such as binary
files, build outputs, and other dependencies used in the software development process. Artifacts are
typically produced during the software development lifecycle, and can include things like compiled or
packaged software components.
By storing artifacts in a repository, developers can easily manage dependencies, share code between
projects and team members, and ensure that everyone is using the same versions of libraries and other
dependencies. This can help to reduce the risk of compatibility issues and make the development process
more efficient and streamlined.
Artifact repositories can be hosted on-premises or in the cloud, and there are a variety of different tools
and platforms available for managing and accessing repositories, such as Nexus, Artifactory, and Maven.
Usually, they include functionalities like searching and organizing data, and even storing metadata, like
different types of IDs and version details related to the artifacts.
In the Java world, a pretty common choice is Sonatype Nexus. Nexus is not limited to Java artifacts,
such as Jars or Ears, but can also store artifacts of the operating system type, such as RPMs, artifacts
suitable for JavaScript development, and so on.
Amazon S3 is an online storage service which is designed for storing binary artifacts using a key-value
structure. An example is the Ceph distributed filesystem, which comes with an object store designed to
be compatible with S3.
Package managers:
A package manager is a tool used in software development to manage the installation, update, and
removal of software packages and their dependencies.
Package managers automate the process of installing and managing software dependencies, making it
easier to install and configure software on different platforms and systems. Instead of manually
downloading and installing each software package and its dependencies, package managers allow
developers to simply specify the packages they need, and the package manager takes care of the rest,
automatically resolving any dependencies and installing the required packages.
Package managers are widely used in many programming languages and development environments.
There are several popular package managers available for Linux, Windows, and Unix systems, including:
For Linux package managers are:
✓ Advanced Packaging Tool (APT) - used by Debian and Ubuntu
✓ Yellowdog Updater, Modified (YUM) - used by Red Hat, CentOS, and Fedora
✓ Pacman - used by Arch Linux
✓ Portage - used by Gentoo Linux
✓ Zypper - used by SUSE Linux
20
For Windows package managers are:
✓ Chocolatey
✓ Scoop
✓ NuGet
✓ Windows Package Manager (winget)
Other package managers are:
✓ NPM for Node.js,
✓ pip for Python,
✓ RubyGems for Ruby,
✓ Maven for Java,
✓ Homebrew for macOS.
The great benefit of these package management systems is that it is easy to install and upgrade a package;
dependencies are installed automatically.
In case of a common system in place that does not offer sophisticated features, then it is needed to
remotely login into each server and execute the "yum upgrade" command. As a result, the most recent
packages will be retrieved and installed from the binary repository. In many sophisticated deployment
systems manual upgrades are not required.
Test environments:
After build server has stored the artifacts successfully in the binary repository, they can be installed from
there into test environments.
Test environments are separate environments that are created to test software applications before they
are deployed to production environments. These environments can be physical or virtual and are
designed to simulate the production environment as closely as possible.
Test environments should normally attempt to be as production-like as is feasible. Therefore, it is
desirable that the they be installed and configured with the same methods as production servers.
The following figure shows the test systems in greater detail:
It is used to test the software application after it has been built and before it is deployed to the production
environment. The staging environment is used to identify & fix any issues that may arise before the
software application is deployed to the production environment.
This helps to ensure that the software application performs as expected in the production environment.
A few organizations possess the resources required to uphold staging servers with production quality as
it is advantageous and secure approach to managing updates. However, many organizations lack such
resources.
Benefits of The Continues Delivery:
• Increases the number of deliveries.
• Minimizes the risk of failure in production.
• Reduces manual work.
• Increases confidence in the team.
• Enables the team to automate everything.
• Enables faster feedback.
Tools for Continuous Delivery:
Tool Purpose
Jenkins, GitLab CI Automate builds and tests
Docker Package apps into containers for deployment
Kubernetes Run and manage those containers
Spinnaker, ArgoCD Control deployment pipelines
22
1.5 RELEASE MANAGEMENT
Release management is a software development process that involves managing the planning,
scheduling, coordinating, and controlling of software releases. Release management typically included
the testing and deployment of software releases as well. It is a key aspect of software development and
involves a set of activities that ensure the smooth and efficient release of software products.
The main objectives of release management are to:
• Ensure the quality and reliability of software releases.
• Ensure that software releases are delivered on time and within budget.
• Minimize the risks associated with software releases.
• Maximize the value of software releases to the business.
Release management has had an important role in the software development lifecycle since before it was
known as release management. This Release management is a challenge to achieve in the real world.
• One reason for this is that it is usually hard to reach the level of test automation needed in order
to have complete confidence in automated deploys.
• Another reason is simply that the cadence of business development doesn't always the match
cadence of technical development. Therefore, it is necessary to enable human intervention in the
release process.
1.6 SCRUM
SCRUM is an Agile methodology that is used for iterative and incremental software development. Scrum
is focused primarily on ways to manage tasks in team-based development conditions. Scrum is a
framework used by teams comes together to manage work and solve problems collaboratively to move
the product forward in short cycles. Scrum is lightweight, simple to understand, but powerful when
used well.
Scrum implements the principles of Agile as a concrete set of artifacts, practices, and roles. Scrum
provides just enough structure for people and teams to integrate into how they work, while adding the
24
right practices to optimize for their specific needs. The entire lifecycle is completed in fixed time periods
(breaking down the development process into small iterations) called Sprints. A sprint is typically one-
to-four weeks long.
The team works on a set of features during each sprint, and at the end of each sprint, a potentially
shippable product increment is delivered. The Scrum framework consists of roles (Product Owner,
Scrum Master, and Development Team), events (Sprint Planning, Daily Scrum, Sprint Review, and
Sprint Retrospective), and artifacts (Product Backlog, Sprint Backlog, and Increment).
26
Sprint burndown chart: The sprint burndown is a graph that plots the daily total of remaining work,
typically shown in hours. The burndown chart provides a visual way of showing whether the team is
on track to complete all the work by the end of the sprint.
Repeat, learn, improve:
The entire cycle is repeated for the next sprint. Sprint planning selects the next items on the product
backlog and the cycle repeats. While the team executes the sprint, the product owner ensures the items
at the top of the backlog are ready to execute in the following sprint.
This shorter, iterative cycle provides the team with lots of opportunities to learn and improve. A
traditional project often has a long lifecycle, say 6-12 months. While a team can learn from a traditional
project, the opportunities are far less than a team who executes in two-week sprints, for example. This
iterative cycle is, in many ways, the essence of Agile.
Scrum is very popular because it provides just enough framework to guide teams while giving them
flexibility in how they execute. Its concepts are simple and easy to learn. Teams can get started quickly
and learn as they go. All of this makes Scrum a great choice for teams just starting to implement Agile
principles.
Scrum Activities:
• Each sprint begins with a sprint planning meeting, where the product owner presents the top
items on the product backlog to the team, and team members figure out how much work they can
commit to during the coming sprint.
• During each sprint, the team takes a small set of features from idea to fully implemented and
tested functionality. At the end, these features are done and could potentially be released to
customers.
• On each day of the sprint, all team members attend a daily scrum meeting. Daily scrums are a
way for team members to synchronize their work and collaborate to move that work to done. The
daily meetings last no more than 15 minutes and are intended to give the team a time to share
what they worked on the prior day, will work on that day, and identify any impediments to
progress.
• At the end of a sprint, the team conducts a sprint review during which the team demonstrates the
new functionality to the product owner or any other stakeholder who wishes to provide feedback
that could influence the next sprint.
• This feedback loop may result in changes to the freshly delivered functionality, but it may just
as likely result in revising or adding items to the work planned for the future.
• Another inspect-and-adapt activity is the sprint retrospective at the end of each sprint. The whole
team participates in this meeting. The meeting is an opportunity to reflect on the sprint that has
ended and to identify what changes or improvements the team may wish to make to the process
itself.
Advantages of Scrum: The following are the advantages of scrum
• Faster delivery - Working features delivered regularly
• Flexibility - Easy to adapt to changes
• Team collaboration - Everyone communicates daily
• Transparency - Everyone knows what’s going on
• Continuous improvement - Team gets better over time
Simple Example: Let’s say your class is building a school website:
27
Product Backlog:
✓ Create homepage
✓ Add photo gallery
✓ Add timetable section
✓ Contact form
Sprint 1 (2 weeks):
✓ Build homepage
✓ Add photo gallery
Sprint 2:
✓ Add timetable section
✓ Add contact form
➡️ Every day the team checks progress.
➡️ At the end of each Sprint, you review what was built.
➡️ Then you improve the process and plan the next Sprint.
1.7 KANBAN
Kanban is another Agile methodology that is used for continuous delivery. It involves visualizing the
flow of work, limiting work in progress, and optimizing the flow of work to improve efficiency and
quality. The Kanban framework consists of visual boards, work items, work in progress limits, delivery
cadence, and continuous improvement. Kanban which is often used in operations team, emphasizes the
24-hour time frame.
Kanban is a popular framework used to implement Agile and DevOps software development. It allows
project managers to successfully manage and keep track of their projects. Unlike some other popular
frameworks, Kanban believes in introducing little but meaningful changes in the continuing setup.
Kanban is used to optimize workflow and increase efficiency in various industries including software
development, manufacturing, shopping malls, etc.
Kanban is a Japanese term that means Visual board or signboard or billboard. An industrial engineer
named Taiichi Ohno developed Kanban at Toyota Motor Corporation to improve manufacturing
efficiency. Work items are represented visually on a board called Kanban-board, that allowing team
members to see the state of every piece of work at any time. Kanban is a work flow management method
for Defining, Managing, Improving the services, delivering the knowledge/work. It is used for
visualizing the work, Maximizing the efficiency and Improve continually.
Purpose of Kanban: Kanban helps to teams
✓ Visualize their work ✓ Identify bottlenecks
✓ Limit how much work is in progress ✓ Improve efficiency over time
It’s not just a tool — it’s a method for managing flow and improving continuously.
Components of Kanban:
1. Kanban Board: A Kanban board is the main workspace. It has columns that represent different
stages of work. Common columns are
Column Name Meaning
To Do Tasks that are ready to be worked on
In Progress Tasks that are currently being worked on
Done Finished tasks
28
2. Kanban Cards: Each task is a card that moves from left to right across the board. Each card
includes:
1. Task name 2. Person responsible 3. Due date (optional)
4. Description 5. Priority 6. Checklist (optional)
These cards are moved across the board as progress happens.
3. Work-In-Progress (WIP) Limits: One of the most powerful parts of Kanban. You limit how
many tasks can be in each column at once. Because
✓ It prevents people from starting too many tasks at once.
✓ It forces the team to focus and finish before starting new things.
4. Continuous Delivery / Flow: Kanban is not based on time (like Scrum’s Sprints). It’s based on
flow-the goal is to keep work moving smoothly. New work can be added anytime, and finished
work can be released anytime. There’s no “start” or “end” of a Sprint-work just flows
continuously.
5. Metrics & Improvement: Teams often use flow-based metrics to improve performance:
Metric Meaning
Lead Time Time from task added to task done
Cycle Time Time from task started to task done
Throughput Number of tasks completed per day/week
Kanban Process:
• The main idea of Kanban is that the flow of work is displayed on a large board with different
columns.
• Work is represented by a card on the board, and the board is divided into different columns. Each
column on the board displays a different state of the work process, and as the work continues,
the card is shifted from one column to the next to the next to track progress and possible
completion.
• The Kanban method uses something like a bulletin board put in the work area. Traditional
Kanban boards are divided into three columns named something like:
✓ To accomplish/ To do : To do-prioritized, To do-unprioritized.
✓ In progress/ Working/ Doing : Plan, Develop-Test-Launch
✓ Finished/ Done : Done, Approval Pending.
30
2. Product Mix or Demand Changes May Cause Problems: Changes in demand and products
may impact the functioning of the Kanban system. Thus, the system is less suitable for enterprises
where product volumes and mixes fluctuate.
3. The Kanban System Doesn't Eliminate Variability: The Kanban method may deliver poor-
quality items that need to be updated or scrapped if production is disrupted with long and
unpredictable downtimes. Any variability or unpredictability will impact the functioning of the
system, making it send confusing, mixed, and incorrect signals with respect to the optimal
production levels.
4. Quality Miscues: The Kanban approach brings quality levels of inventory close to zero. In cases
of high uncertainty and troubles in the transportation network, inventory buffers are required to
guard low-grade quality from the internal operations and also from the suppliers. This slows your
production process.
Tools for Kanban:
1. Trello - Most popular, simple drag-and-drop
2. Jira (Kanban board) - Used in software development
3. Asana, ClickUp, Notion - General project management tools
4. Miro - Whiteboard with Kanban templates.
Difference Between Scrum and Kanban:
Kanban and scrum share some of the same concepts but have very different approaches. Scrum focuses
on sprint cycles, which can occur biweekly or monthly. Kanban can be said to focus more on shorter
cycles, which can occur daily. The philosophical differences between Scrum and Kanban are a bit deeper,
although not mutually exclusive. Many organizations use both Kanban and Scrum together. From a
software-deployment viewpoint, both Scrum and Kanban are similar. Both require frequent hassle-free
deployments. From a DevOps perspective, a change starts propagating through the Continuous Delivery
pipeline toward test systems and beyond when it is deemed ready enough to start that journey.
KEY ITEM SCRUM KENBAN
Framework Scram is a framework that defines Kanban is a visual framework that focus
specific roles, events & artifacts on continuous delivery and optimizing
workflows.
Planning Scrum uses fixed length sprints typically Kanban emphasizes continuous work flow
2-4 weeks with preplanned work. and delivery with no pre-defined iteration.
Release At the end of each sprint if approved by Continuous delivery or at the team's
methodology the product owner. discretion.
Prioritization Scram uses a product owner and refined Kanban uses a backlog or queue that is
by the team continuously re-prioritized based on
customer needs and team capacity.
Roles Scrum has mainly 3 roles: Product owner, Kanban has no predefined roles.
Scrum master and Development team
Estimation Scrum uses relative estimation techniques Kanban doesn't require explicit estimation,
such as Planning Pokers to estimate work.
31
Metrics Scrum uses velocity, burn-down charts, Kanban uses lead-lime, cycle-time. and
etc. metrics to track work progress and other metrices to measure flow and
forecast future. work. identify the bottlenecks.
Change Teams should strive to not make changes Change can happen at any time
philosophy to the sprint forecast during the sprint.
Doing so compromises learnings around
estimation
Time-Based Fixed time periods (Sprints) No fixed time (flow-based)
Flexibility More structured Very flexible
Meetings Daily stand-ups, Sprint Planning, etc. No required meetings
Delivery At end of Sprint Continuous
33
1.9 IDENTIFYING BOTTLENECKS
When engaging in agile work, keep track of what you are doing, and try to identify problem areas. When
everything is working as it should, a commit to the code repository should result in the change being
deployed to integration test servers within a 15-minute time span. When things are not working well, a
deploy can take days of unexpected hassles.
Here are some possible causes:
• Database schema changes.
• Test data doesn't match expectations.
• Deploys are person dependent, and the person wasn't available.
• There is unnecessary red tape associated with propagating changes.
• Your changes aren't small and therefore require a lot of work to deploy safely. This might be
because your architecture is basically a monolith.
some more examples of bottlenecks: These are the 11 bottlenecks that have the biggest impact on the
flow of work.
1. Inconsistent Environments: In almost every company I have worked for or consulted with, a
huge amount of waste exists because the various environments (dev, test, stage, prod) are
configured differently. I call this “environment hell”. How many times have you heard a
developer say “it worked on my laptop”? As code moves from one environment to the next,
software breaks because of the different configurations within each environment.
I have seen teams waste days and even weeks fixing bugs that are due to environmental issues
and are not due to errors within the code. Inconsistent environments are the number one killer of
agility.
Create standard infrastructure blueprints and implement continuous delivery to ensure all
environments are identical.
2. Manual Intervention: Manual intervention leads to human error and non-repeatable processes.
Two areas where manual intervention can disrupt agility the most are in testing and deployments.
If testing is performed manually, it is impossible to implement continuous integration and
continuous delivery in an agile manner (if at all). Also, manual testing increases the chance of
producing defects, creating unplanned work. When deployments are performed fully or partially
manual, the risk of deployment failure increases significantly which lowers quality and reliability
and increases unplanned work.
Automate the build and deployment processes and implement a test automation
methodology like test driven development (TDD)
3. SDLC Maturity: The maturity of a team’s software development lifecycle (SDLC) has a direct
impact on their ability to deliver software. There is nothing new here; SDLC maturity has plagued
IT for decades. In the age of DevOps, where we strive to deliver software in shorter increments
with a high degree of reliability and quality, it is even more critical for a team to have a mature
process.
Some companies I visit are still practicing waterfall methodologies. These companies struggle
with DevOps because they don’t have any experience with agile. But not all companies that
practice agile do it well. Some are early in their agile journey, while others have implemented
what I call “Wagile”: waterfall tendencies with agile terminology sprinkled in. I have seen teams
34
who have implemented Kanban but struggle with the prioritization and control of WIP. I have
seen scrum teams struggle to complete the story points that they promised. It takes time to get
really good at agile.
Invest in training and hold blameless post mortems to continuously solicit feedback and
improve.
4. Legacy Change Management Processes: Many companies have had their change management
processes in place for years and are comfortable with it. The problem is that these processes were
created back when companies were deploying and updating back office solutions or
infrastructure changes that happened infrequently. Fast forward to today’s environments where
applications are made of many small components or micro services that can be changed and
deployed quickly, now all of a sudden, the process gets in the way.
Many large companies with well-established ITIL processes struggle with DevOps. In these
environments I have seen development teams implement highly automated CI/CD processes only
to stop and wait for weekly manual review gates. Sometimes these teams have to go through
multiple reviews (security, operations, code, and change control).
Companies with legacy processes need to look at how they can modernize processes to be
more agile instead of being the reason why their company can’t move fast enough.
5. Lack of Operational Maturity: Moving to a DevOps model often requires a different approach
to operations. Some companies accustomed to supporting back office applications that change
infrequently. It requires a different mindset to support software delivered as a service that is
always on, and deployed frequently. With DevOps, operations is no longer just something Ops
does. Developers now must have tools so they can support applications. Often I encounter
companies that only monitor infrastructure. In the DevOps model developers need access to
logging solutions, application performance monitoring (APM) tools, web and mobile analytics,
advanced alerting and notification solutions.
Assess your operational processes, tools, and organization and modernize to increase agility
and transparency.
6. Outdated testing practices: Too often I see clients who have a separate QA department that is
not fully integrated with the development team. The code is thrown over the wall and then testing
begins. Bugs are detected and sent back to developers who then have to quickly fix, build, and
redeploy. This process is repeated until there is no time remaining and teams are left to agree on
what defects they can tolerate and promote to production. This is a death spiral in action. With
every release, they introduce more technical debt into the system lowering its quality and
reliability, and increasing unplanned work. There is a better way.
The better way is to block bugs from moving forward in the development process. Testing must
be part of the development process, not a handoff that is performed after development.
Developers need to play a bigger part in testing and testers need to play a bigger part in
development. This strikes fear in some testers and not all testers can make the transition.
Quality is everyone’s responsibility, not just the QA team.
7. Automating waste: A very common pattern I run into is the automation of waste. This occurs
when a team declares itself a DevOps team or a person declares themselves a DevOps engineer
and immediately starts writing hundreds or thousands of lines of Chef or Puppet scripts to
automate their existing processes. The problem is that many of the existing processes are
35
bottlenecks and need to be changed. Automating waste is like pouring concrete around
unbalanced support beams. It makes bad design permanent.
Automate processes after the bottlenecks are removed.
8. Competing or Misaligned Incentives and Lack of Shared Ownership: This bottleneck has
plagued IT for years but is more profound when attempting to be agile. In fact, this issue is at the
heart of why DevOps came to be in the first place. Developers are incented for speed to market
and operations is incented to ensure security, reliability, availability, and governance. The
incentives are conflicting. Instead, everyone should be incented for customer satisfaction, with a
high degree of agility, reliability, and quality (which is what DevOps is all about). If all teams’
goals are in support of the goals I mentioned above, and everyone is measured in a way that
enforces those incentives, then everyone wins --- especially the customer.
Work with HR to help change the reward and incentives to foster the desired behaviors.
9. Dependence on Heroic Efforts: When heroic efforts are necessary to succeed, then a team is in
a dark place. This often means working insane hours, being reactive instead of proactive, and
being highly reliant on luck and chance. The biggest causes of this are a lack of automation, too
much tribal knowledge, immature operational processes, and even poor management.
If your organization relies on heroes, find out what the root causes are that creates these
dependencies and fix them fast.
10. Governance as an Afterthought: When DevOps starts as a grassroots initiative there is typically
little attention paid to the question “how does this scale?” It is much easier to show some success
in a small isolated team and for an initial project. But once the DevOps initiative starts scaling to
larger projects running on way more infrastructures or once it starts spreading to other teams, it
can come crashing down without proper governance in place. They all have different versions of
third party products and libraries on them. Suddenly, it is not so easy anymore.
With DevOps, the same thing can happen without the appropriate controls in place. Many
companies start their DevOps journey with a team of innovators and are able to score some major
wins. But when they take that model to other teams it all falls down. There are numerous reasons
that this happens. Is the organization ready to manage infrastructure and operations across
multiple teams? Are there common shared services available like central logging and monitoring
solutions or is each team rolling their own? Is there a common security architecture that everyone
can adhere to? Can the teams provision their own infrastructure from a self-service portal or are
they all dependent on a single queue ticketing system? I could go on but you get the point.
Assign an owner and start building a plan for scaling DevOps across the organization.
11. Limited to No Executive Sponsorship: The most successful companies have top level support
for their DevOps initiative. One of my clients is making a heavy investment in DevOps training
and it will run a large number of employees through the program. Companies with top level
support make DevOps a priority. They break down barriers, drive organizational change, improve
incentive plans, communicate “Why” they are doing Devops, and fund the initiative. When there
is no top level support, DevOps becomes much more challenging and often becomes a new silo.
Don’t let this stop you from starting a grass roots initiative. These grassroots teams measured
their success and pitched their executives.
If running a grassroots effort, gather before and after metrics and be prepared to sell and
evangelize DevOps upward.
36