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

Example of Maven project that interacts with a MySQL database and includes testing

Example Maven project that interacts with a MySQL database and includes testing To install Java, MySQL, Maven, and write a Java program to fetch table data, execute, and create a JAR file using Maven on Ubuntu, you can follow these steps: Step 1: Install Java You can install Java using the following commands: sudo apt update sudo apt install default-jre sudo apt install default-jdk Verify the installation by running: java -version Step 2: Install MySQL You can install MySQL using the following commands: sudo apt update sudo apt install mysql-server During the installation, you'll be prompted to set a root password for MySQL or you can set password at latter stage using following steps.  sudo mysql ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password'; exit Step 3: Install Maven You can install Maven using the following commands: sudo apt update sudo apt install maven Verify the installation by running: mvn -version Step 4: Create ...

Maven Create and Build Artifacts

In Maven, you can create and build artifacts using the package phase of the build lifecycle. The package phase is responsible for taking the compiled code and other project resources and packaging them into a distributable format, such as a JAR (Java Archive), WAR (Web Application Archive), or other custom formats. Here are the steps to create and build artifacts using Maven: Configure the Build Output: In your project's pom.xml file, you need to configure the output of the build. This includes specifying the type of artifact you want to create (e.g., JAR, WAR) and any additional resources to include. You do this in the <build> section of your pom.xml: <build>     <finalName>my-artifact</finalName> <!-- Name of the artifact without the extension -->     <plugins>         <!-- Plugin configurations for creating the artifact -->         <!-- For example, maven-jar-plugin or maven-war-p...

Maven Repositories (local, central, global)

Maven relies on repositories to manage dependencies, plugins, and other artifacts required for a project. There are typically three types of repositories in Maven: local, central, and remote/global repositories. Local Repository: Location: The local repository is located on your local development machine. By default, it's in the .m2 directory within your user home directory (e.g., C:\Users\<username>\.m2\repository on Windows or /Users/<username>/.m2/repository on macOS and Linux). Purpose: The local repository is used to store artifacts (JARs, POMs, and other files) that your machine has downloaded or built during previous Maven builds. These artifacts are specific to your local development environment. Benefits: Using a local repository improves build performance since it caches dependencies locally, reducing the need to download them repeatedly. It also ensures reproducibility by maintaining a local copy of dependencies. Central Repository: Location: The central repo...