Skip to content

Autopsy of DevOps Foundation - Part 2

Published: at 16 min read

DevOps building block : Lean

7 Principles of Lean Software

  1. Eliminate Waste (Muda):

    • To identify and eliminate any activities, processes, or resources that do not add value to the customer or the product. Common types of waste in software development include overproduction (building features not needed), extra features, delays, and partially completed work.
  2. Amplify Learning (Mudan):

    • Encourages a culture of continuous learning and feedback.
    • Teams should actively seek feedback from users, stakeholders, and the market to iterate and improve the product continuously.
    • This principle aligns with Agile practices like frequent customer feedback and iterative development.
  3. Decide as Late as Possible (Muda o Akirame):

    • Delaying decisions until they are absolutely necessary is a way to reduce uncertainty and make more informed choices.
    • In software development, this means deferring design and implementation decisions until they are required, often based on user feedback or changing requirements.
  4. Deliver as Fast as Possible (Kanban):

    • Lean emphasizes delivering value to the customer as quickly as possible. By minimizing work in progress (WIP), focusing on flow, and reducing cycle times, teams can achieve faster delivery and better responsiveness to changing demands.
  5. Empower the Team (Kanban):

    • Empowering teams means giving them the autonomy and authority to make decisions about how they work and what they prioritize.
    • Self-organizing teams are more likely to find creative solutions and improve processes.
  6. Build Integrity In (Jidoka):

    • This principle emphasizes the importance of building quality and integrity into the product from the beginning.
    • By using practices like automated testing, code reviews, and continuous integration, teams can prevent defects and ensure that the product works correctly from the start.
  7. See the Whole (Zaiten):

    • Seeing the whole means looking at the entire software development process from end to end.
    • Instead of optimizing individual components or stages, Lean encourages optimizing the entire value stream to improve efficiency and reduce waste.

CALMS in DevOps

CALMS is an acronym that represents five key principles or areas of focus in DevOps. These principles are used to guide organizations in adopting DevOps practices effectively. CALMS stands for ->

C - Culture -> It involves fostering a collaborative, transparent, and innovative culture within the organization.

A - Automation -> It involves automating manual and repetitive tasks throughout the software development and delivery pipeline.

L - Lean -> Lean principles, derived from Lean manufacturing, focus on eliminating waste, optimizing processes, and delivering value efficiently.

M - Measurement -> Measurement involves collecting and analyzing data to gain insights into the performance and efficiency of the DevOps process.

S - Sharing -> It involves sharing information, knowledge, and experiences among team members and across teams.

CALMS provides a holistic framework for organizations to adopt and implement DevOps practices successfully. It emphasizes the importance of not only technological aspects but also cultural and organizational factors in achieving the goals of DevOps, such as faster delivery, improved quality, and enhanced collaboration.

Infrastructure as Code in DevOps

Infrastructure as Code (IaC) is a fundamental practice in DevOps that involves managing and provisioning infrastructure using code and automation. It allows development and operations teams to treat infrastructure as software, enabling the automated creation, configuration, and management of infrastructure resources such as servers, networks, databases, and storage.

Common IaC Tools ~

Terraform: A widely-used open-source tool for provisioning and managing infrastructure resources across various cloud and on-premises providers.

Ansible: An open-source automation tool that can be used for configuration management and infrastructure provisioning.

Puppet and Chef: Configuration management tools that can also be used for Infrastructure as Code, particularly for managing server configurations.

AWS CloudFormation: A service-specific IaC tool for provisioning AWS resources using JSON or YAML templates.

Configuration management pipeline in DevOps

configurationManagementPipeline

Container Pipeline in DevOps

containerPipeline

The Bakery Pipeline

bakeryPipeline

Continuous Delivery in DevOps

Continuous Delivery (CD) is a DevOps practice that focuses on automating and streamlining the software delivery pipeline to enable the rapid, reliable, and frequent release of software updates to production or staging environments. CD builds upon Continuous Integration (CI) and extends the automation process further into the deployment and release phases.

Trunk Based Development in Continuous Delivery

Branch Based Development in Continuous Delivery

How Artifacts flow through the system

workflowArtifact

Five Practices when building out a continuous Delivery Pipeline

Software Testing and its Types

Software testing is a critical part of the software development lifecycle, and it involves evaluating an application or system to identify and resolve defects, validate that it meets requirements, and ensure its quality and reliability.

Types of Software Testing ~

  1. Unit Testing:

    • Scope: Tests individual components or units of code in isolation (e.g., functions, methods, classes).
    • Purpose: To verify that each unit of code functions correctly in isolation.
  2. Integration Testing:

    • Scope: Focuses on testing the interactions and interfaces between different units or modules of code.
    • Purpose: To ensure that integrated components work together as expected.
  3. Functional Testing:

    • Scope: Evaluates the functionality of the software as a whole, typically based on defined requirements.
    • Purpose: To verify that the software functions correctly according to specified functional requirements.
  4. Regression Testing:

    • Scope: Repeatedly tests the application to ensure that recent code changes haven’t introduced new defects or broken existing functionality.
    • Purpose: To maintain the integrity of previously tested and functioning code.
  5. User Acceptance Testing (UAT):

    • Scope: Involves end-users or stakeholders testing the software to ensure it meets their requirements and expectations.
    • Purpose: To gain user approval and ensure that the software aligns with business needs.
  6. Alpha Testing:

    • Scope: Conducted by the development team internally to assess the application’s functionality and quality.
    • Purpose: To identify and address issues before releasing the software to a wider audience.
  7. Beta Testing:

    • Scope: Involves a select group of external users or early adopters testing the software in a real-world environment.
    • Purpose: To gather feedback and identify any issues before a wider release.
  8. Usability Testing:

    • Scope: Evaluates the user-friendliness and overall user experience of the application.
    • Purpose: To ensure that the application is intuitive and meets the needs of its intended users.
  9. Security Testing:

    • Scope: Focuses on identifying vulnerabilities, weaknesses, and security risks in the application.
    • Purpose: To ensure that the application is secure and protected against threats and attacks.
  10. Performance Testing:

    • Scope: Assesses the application’s performance characteristics, including speed, scalability, and responsiveness.
    • Purpose: To identify performance bottlenecks, optimize code, and ensure the application can handle expected loads.

Six Phases of Continuous Delivery

six key phases for continuous delivery and the tooling that’s associated with it. The key areas are:

Continuous Integration ToolChain

Some of the examples of ToolChain ~

  1. Basic CI Toolchain:

    • Version Control System (VCS): Git, SVN, Mercurial.
    • Build Server: Jenkins, Travis CI, CircleCI.
    • Artifact Repository: Nexus, JFrog Artifactory.
    • Testing Frameworks: JUnit, NUnit, Selenium.
  2. Container CI/CD Toolchain:

    • Version Control System (VCS): Git, GitHub, GitLab.
    • Containerization: Docker, containerd.
    • Container Orchestration: Kubernetes, Docker Swarm.
    • Container Registry: Docker Hub, AWS ECR.
    • CI/CD Platform: GitLab CI/CD, GitHub Actions, AWS CodePipeline.
  3. Mobile App CI/CD Toolchain:

    • Mobile App Platforms: iOS, Android.
    • CI/CD Platform: Jenkins, Bitrise, Fastlane.
    • Testing Frameworks: XCTest, Espresso, Appium.
  4. DevSecOps CI/CD Toolchain:

    • Security Scanning: SonarQube, OWASP ZAP, Nessus.
    • Secrets Management: HashiCorp Vault, AWS Secrets Manager.
    • CI/CD Platform: Jenkins, GitLab CI/CD.
    • Logging and Monitoring: ELK Stack, Prometheus.
  5. IoT CI/CD Toolchain:

    • IoT Platforms: Raspberry Pi, Arduino, ESP8266.
    • CI/CD Platform: Jenkins, Travis CI.
    • IoT Testing: Device simulators, MQTT testing tools.

Reliability Engineering in DevOps

What does Reliability means

The ability of a system or component to function under stated conditions for a specified period of time. In IT, this includes availability, performance, security and all the other factors that allow the service to actually deliver its capabilities to the users.

Mean Time to Recovery(MTTR) ~ How quickly a service can recover from a disruption and restore service.

Mean Time between Failures(MTBF) ~ The average time between service disruptions.

The total disruption of the service is a function of the MTBF and the MTTR

Definition of Reliability Engineering ~

Reliability Engineering is a discipline that focuses on designing, building, and maintaining systems and products to ensure they perform their intended functions under specified conditions, while also minimizing the likelihood and impact of failures. In the context of DevOps, reliability engineering plays a crucial role in creating software systems and services that are highly available, performant, and resilient.

Logging in DevOps

Usage of Logging ~

Five Ws of Logging

  1. What happened?
  2. When did it happen?
  3. Where did it happen?
  4. Who was involved?
  5. Where did that entity come from?

Centralized Logging

Five principles of Centralized Logging:

  1. Don’t collect log data you won’t use.
  2. Retain log data for as long as they can be used.
  3. Alert only what you must respond to.
  4. Don’t exceed business security needs.
  5. Log change, as their format or their messages.

Rational Unified Process (RUP)

The Rational Unified Process (RUP) is a comprehensive software development process framework, provides a structured and disciplined approach to software development, focusing on iterative development, best practices, and customizable processes.

From business modeling through deployment and has deliverables for each phase in addition to well-defined handoffs.

RUP places a stronger emphasis on upfront planning, extensive documentation, and a well-defined process framework. RUP projects often have more structured phases and roles.

Comparing Scrum with Kanban

Both Scrum and Kanban are agile methodologies but they have some differences from each others.

ScrumKanban
Prescriptive with sprints, burn down charts and cross-functional teams.No prescribed iterations, continuous and optional cross-functional teams.
Defined rolesNo defined roles
Change waits for next sprintChange can happen at any time

Explain - Lean

Lean is a systematic method to eliminate waste and maximize the flow of value through a system.

The Seven Wastes of Lean Software

Each on of these can identified and reduced in the development process by using lean techniques.

Important terms of using methodologies

There are some ceremonies required to run any project smoothly and follow the rules of the methodologies

  1. Stand-Up (or Scrum) ~ A Short daily meeting the team uses to sync up with each others.
  2. Backlog - The list of work items for the team, sorted in the order they should be performed.
  3. Iteration (Sprint) - A single time boxed development cycle, at the end of which something of business value is produced.
  4. Theory of Constraints - A methodology for optimizing flow by identifying the limiting factor in a system, improving it until it is no longer the bottleneck, and repeating the process.
  5. Minimum Viable Product - An initial deliverable of a product with just enough features to engage early customers and start gathering feedback for future development.

Summary of Part 2

DevOps is not a framework or a workflow. It’s a culture that is overtaking the business world. DevOps ensures collaboration and communication between software engineers (Dev) and IT operations (Ops). With DevOps, changes make it to production faster. Resources are easier to share. And large-scale systems are easier to manage and maintain.

Happy Learning!!

Share :
Written by:Parita Dey

Interested in Writing Blogs, showcase yourself ?

If you're passionate about technology and have insights to share, we'd love to hear from you! Fill out the form below to express your interest in writing technical blogs for us.

If you notice any issues in this blog post or have suggestions, please contact the author directly or send an email to hi@asdevs.dev.