Skip to main content

Foundational Terminology and Concepts

  • Building a strong foundation for effective DevOps involves understanding key terms and concepts.
  • Software development methodologies have been described throughout the history of computer engineering to improve the development and operations process.
  • Many methodologies split work into phases with distinct activities, but they can lead to conflicting goals between development and operations teams.
  • Forcing teams to follow specific methodologies can cause resentment and frustration if they don't align with their existing processes and goals.
  • DevOps is not rigidly defined, and it does not prohibit any particular methodology.
  • DevOps originated from advocating for Agile system administration and collaboration between development and operations teams.
  • The practice of DevOps is unique to each environment, and the key is to assess and evaluate different tools and processes to find the most effective ones for the specific context. 

Software Development Methodologies

Waterfall Model
  • A software development methodology splits development work into distinct phases.
  • Waterfall is a sequential project management process that originated in manufacturing and construction industries and later adapted to software development in the early 1980s.
  • Waterfall involves stages like requirements specification, design, implementation, integration, testing, installation, and maintenance.
  • The Waterfall model assumes that spending significant time in the requirements and design phases would reduce the number of mistakes found later in the development process.
  • During the heyday of the waterfall model, delivering software on physical media like CD-ROMs or floppy disks was common.
  • Manufacturing and distributing new CDs or floppies to fix bugs were costly and time-consuming processes.
  • However, this approach had its limitations, and it became evident that software development could benefit from more flexible and iterative approaches like Agile and DevOps.
Agile
  • Agile is a group of software development methodologies that are lightweight and flexible, with a focus on collaboration, flexibility, and working software.
  • The Agile Manifesto values individuals and interactions over processes and tools, working software over comprehensive documentation, customer collaboration over contract negotiation, and responding to change over following a plan.
  • DevOps shares characteristics with the Agile movement, emphasizing collaboration and individuals, but it is a separate cultural movement with a broader focus beyond just development.
Scrum
  • Scrum is a software development methodology that focuses on maximizing a development team's ability to quickly respond to changes in project and customer requirements.
  • Scrum uses predefined development cycles called sprints, usually between one week and one month long, beginning with a sprint planning meeting to define goals and ending with a sprint review and sprint retrospective to discuss progress and any issues that arose during that sprint. 
  • The daily Scrum or daily standup is a key feature of the Scrum methodology in Agile software development.
  • During the daily Scrum, team members gather for a short meeting, usually in the morning, to answer three specific questions related to their progress and goals.
  • The three questions team members answer are:
    • What did I do yesterday that helped the team meet its sprint goals?
    • What am I planning to do today to help the team meet those goals?
    • What, if anything, do I see that is blocking either me or the team from reaching their goals?
  • The purpose of the daily Scrum is to provide a quick status update on the team's progress, ensure alignment among team members, and identify any potential obstacles or blockers.
  • The meeting is usually time-boxed to keep it short and focused, typically lasting around 15 minutes.
  • The Scrum master, an important role within the Scrum framework, often facilitates the daily Scrum. The Scrum master's responsibilities include helping the team self-organize, coordinating work efforts, and removing any impediments that may hinder progress.
  • The Scrum master also collaborates with project owners and stakeholders to ensure a shared understanding of what it means for a task or feature to be "done" and to track the overall progress of the project.
  • While Scrum is a specific Agile methodology, its principles, including the daily standup and focus on collaboration and flexibility, are often applied less formally in many modern software development practices today. These principles are aimed at fostering better communication and productivity within development teams.
  • The principles of Scrum are widely applied in software development practices today, even in less formal ways.

Operations Methodologies

  • ITIL (Information Technology Infrastructure Library) is a set of practices designed for managing IT services. It was developed by the British Central Computer and Telecommunications Agency in response to the increasing diversity of IT practices among organizations in the 1980s.
  • ITIL is published as a series of five volumes that outline its processes, procedures, tasks, and checklists. The core sections of ITIL in the most recent version (2011) include service strategy, service design, service transition, service operation, and continual service improvement.
  • ITIL aims to standardize IT practices, and there are over 1.5 million ITIL-certified individuals worldwide.
  • While ITIL offers many benefits through standardization, it is often criticized for being more reactive than proactive. Practitioners are encouraged to find ways to add proactive planning and customer focus to their ITIL practices.
  • COBIT (Control Objectives for Information and Related Technology) is an ISACA framework for governance and management of information and technology, initially released in 1996.
  • The core principles of COBIT include meeting stakeholder needs, covering the enterprise from end to end, applying a single integrated framework, enabling a holistic approach, and separating governance from management.
  • COBIT emphasizes aligning business goals with IT goals, ensuring effective IT governance, and providing a comprehensive approach to managing information and technology within an organization.
  • COBIT is based on 5 principles:
    • • meeting stakeholder needs;
    • • covering the enterprise from end to end;
    • • applying a single integrated framework;
    • • enabling a holistic approach; and
    • • separating governance from management.
  • Both ITIL and COBIT are methodologies that aim to improve the efficiency and effectiveness of IT operations and services within an organization. Organizations may choose to adopt these methodologies or adapt them to suit their specific needs and requirements.

Systems Methodologies

  • Systems methodologies focus on considering complex systems as a whole, rather than focusing on specific areas like software development or IT operations.
  • Systems thinking skills are crucial for understanding and working with complex systems, and recommended resources for learning more include "Thinking in Systems" by Donella Meadows and "How Complex Systems Fail" by Dr. Richard Cook.
  • Lean is a methodology that originated from the Toyota Production System (TPS) and aims to maximize customer value while minimizing waste.
  • The five principles of Lean Thinking are value, value stream, flow, pull, and perfection.
  • Lean systems focus on eliminating waste in all areas except those that add value to the system. This includes waste in software development and IT operations.
  • Waste in Lean can include unnecessary software features, communication delays, slow application response times, overbearing bureaucratic processes, and more.
  • Lean software development focuses on eliminating waste and optimizing flow of work, either through a set of tools or following "The Toyota Way."
  • There is no one prescribed way to do Lean software development, and different approaches may lead to different outcomes, but the ultimate goal remains the same: maximizing value and reducing waste in the development and operation of software products.

Development, Release, and Deployment Concepts

Development, release, and deployment concepts encompass several terms related to the processes of creating, releasing, and deploying software. Understanding these concepts is essential for knowing how to develop and deploy software effectively and efficiently, and it also helps in selecting appropriate tools to facilitate these practices.
  • Version Control: A system that records changes to files or sets of files, such as source code, assets, and documents, allowing collaboration, history tracking, and the ability to revert to previous versions.
  • Test-Driven Development: Developers write tests before writing the code, ensuring clear specifications for the functionality and encouraging developers to take responsibility for code quality.
  • Application Deployment: The process of planning, maintaining, and executing software releases, considering changes and dependencies to minimize inconsistencies in the deployed software.
  • Continuous Integration (CI): The practice of integrating new code frequently throughout the day to avoid integration problems and ensure that tests are automatically run upon integration.
  • Continuous Delivery (CD): Principles allowing for frequent releases of new software through automated testing and continuous integration, ensuring that the software is deployable.
  • Continuous Deployment (CD): The process of deploying changes to production with defined tests and validations to minimize risk, enabling quick iteration and customer feedback.
  • Minimum Viable Product (MVP): A prototype of a product with the minimum features necessary to determine its viability, allowing for faster iteration and reduced waste.

Infrastructure Concepts

  • Configuration Management: The process of identifying, managing, monitoring, and auditing a product through its lifecycle, including policies, documentation, tools, and systems involved.
  • Cloud Computing: Shared, internet-based computing where customers can use computing resources offered by cloud providers, providing cost savings and flexibility for rapid iteration.
  • Infrastructure Automation: Creating systems that reduce human effort and increase precision by automating tasks and reducing repetitive work.
  • Artifact Management: Managing and storing the output of the software development process, such as libraries, assets, and applications, ensuring easy access and promotion of build artifacts.
  • Containers: Isolated structures that allow rapid and consistent deployment of applications, reducing friction between development and operations teams.

Cultural Concepts

  • Retrospective: A discussion after a project's completion to evaluate what went well and what could be improved in future projects.
  • Postmortem: A discussion that occurs after an unplanned incident or outage to understand what happened, learn from the event, and implement remediation measures.
  • Blamelessness: A cultural concept emphasizing learning from incidents rather than assigning blame to individuals.
  • Organizational Learning: The process of collecting, growing, and sharing an organization's knowledge to foster continuous improvement and success.


Comments

Popular posts from this blog

Experiment No. 5 Title: Applying CI/CD Principles to Web Development Using Jenkins, Git, and Local HTTP Server

  Experiment No. 5 Title: Applying CI/CD Principles to Web Development Using Jenkins, Git, and Local HTTP Server  Objective: The objective of this experiment is to set up a CI/CD pipeline for a web development project using Jenkins, Git, and webhooks, without the need for a Jenkinsfile. You will learn how to automatically build and deploy a web application to a local HTTP server whenever changes are pushed to the Git repository, using Jenkins' "Execute Shell" build step. Introduction: Continuous Integration and Continuous Deployment (CI/CD) is a critical practice in modern software development, allowing teams to automate the building, testing, and deployment of applications. This process ensures that software updates are consistently and reliably delivered to end-users, leading to improved development efficiency and product quality. In this context, this introduction sets the stage for an exploration of how to apply CI/CD principles specifically to web development using J

Experiment No. 10 Title: Create the GitHub Account to demonstrate CI/CD pipeline using Cloud Platform.

  Experiment No. 10 Title: Create the GitHub Account to demonstrate CI/CD pipeline using Cloud Platform. Objective: The objective of this experiment is to help you create a GitHub account and set up a basic CI/CD pipeline on GCP. You will learn how to connect your GitHub repository to GCP, configure CI/CD using Cloud Build, and automatically deploy web pages to an Apache web server when code is pushed to your repository. Introduction: Continuous Integration and Continuous Deployment (CI/CD) pipelines are essential for automating the deployment of web applications. In this experiment, we will guide you through creating a GitHub account and setting up a basic CI/CD pipeline using Google Cloud Platform (GCP) to copy web pages for an Apache HTTP web application. Continuous Integration and Continuous Deployment (CI/CD) is a crucial practice in modern software development. It involves automating the processes of code integration, testing, and deployment to ensure that software changes are co

Experiment No. 6 Title: Exploring Containerization and Application Deployment with Docker

  Experiment No. 6 Title: Exploring Containerization and Application Deployment with Docker  Objective: The objective of this experiment is to provide hands-on experience with Docker containerization and application deployment by deploying an Apache web server in a Docker container. By the end of this experiment, you will understand the basics of Docker, how to create Docker containers, and how to deploy a simple web server application. Introduction Containerization is a technology that has revolutionised the way applications are developed, deployed, and managed in the modern IT landscape. It provides a standardised and efficient way to package, distribute, and run software applications and their dependencies in isolated environments called containers. Containerization technology has gained immense popularity, with Docker being one of the most well-known containerization platforms. This introduction explores the fundamental concepts of containerization, its benefits, and how it differs