Continuous Integration and Automation with DevOps

Chapter 15
AI-Assisted DevOps and Emerging Practices

Diploma in Cloud Computing
Continuous Integration and Automation with DevOps   •   Diploma

AI-Assisted DevOps and Emerging Practices

Introduction

DevOps combines software development, operations, security, quality assurance, and business objectives into a continuous system for delivering reliable digital services. Artificial intelligence (AI) is increasingly being added to this system. AI-assisted DevOps does not mean replacing engineers with autonomous software. It means using machine-learning models, generative AI, statistical analysis, and automation to support decisions across the software-delivery and service-operations lifecycle.

AI can generate code, propose tests, summarise incidents, detect unusual behaviour, recommend pipeline configurations, and forecast operational demand. These capabilities can improve speed and reliability, but they also introduce new risks. A generated code fragment may contain a vulnerability; an operational model may produce false alarms; a language model may disclose confidential information or reproduce copyrighted material. Consequently, AI adoption requires engineering judgement, governance, traceability, and human accountability.

This chapter evaluates AI-assisted coding, testing, pipeline generation, anomaly detection, AIOps, and predictive operations. It also examines GitOps, serverless delivery, autonomous operations, sustainable DevOps, and the associated risks of hallucination, privacy, intellectual property, and security.

Learning objectives

By the end of this chapter, a learner should be able to:

  1. Explain how AI supports major DevOps activities.
  2. Distinguish generative AI, machine learning, anomaly detection, AIOps, and predictive operations.
  3. Evaluate AI-generated code, tests, and deployment pipelines safely.
  4. Explain GitOps, serverless delivery, autonomous operations, and sustainable DevOps.
  5. Identify hallucination, privacy, intellectual-property, bias, and security risks.
  6. Design suitable human approval, testing, monitoring, and governance controls.
  7. Select practical metrics for evaluating AI-assisted DevOps.

1. AI in the DevOps value stream

A DevOps value stream commonly includes planning, coding, building, testing, releasing, deploying, operating, and learning. AI can assist at each stage, but the nature of assistance differs.

DevOps activityPossible AI assistanceRequired control
PlanningSummarising requirements and identifying dependenciesHuman validation of requirements
CodingCode completion, refactoring, documentationSecure review, tests, licence checks
BuildingDiagnosing build failures and optimising workflowsReproducible builds
TestingGenerating test cases and prioritising regression testsCoverage and mutation testing
ReleaseRisk scoring and release-note generationApproval and change control
DeploymentPipeline suggestions and configuration generationPolicy-as-code and staged rollout
OperationsLog summarisation, anomaly detection, incident correlationObservability and escalation
LearningPost-incident analysis and trend identificationEvidence-based review

AI assistance is most valuable when it reduces repetitive cognitive work while leaving responsibility for consequential decisions with qualified people. A useful principle is: automate execution when the action is reversible and well-tested; require approval when the action can cause material security, financial, safety, or availability consequences.

2. AI-assisted coding

Generative AI coding tools use language models trained on large collections of text and source code. They predict probable continuations or produce code from a natural-language request. Common uses include producing boilerplate, explaining unfamiliar code, translating between programming languages, suggesting refactorings, and drafting documentation.

The output is probabilistic rather than verified. A model may produce syntactically valid code that is semantically wrong, inefficient, insecure, or incompatible with the project’s version of a library. It can also recommend a package with a misleading name or an obsolete API. Therefore, generated code must be treated as an untrusted contribution, not as an authoritative implementation.

A safe coding workflow is:

  1. State the requirement, constraints, interfaces, and expected failure behaviour.
  2. Ask for a small, reviewable change rather than an entire application.
  3. Inspect dependencies, permissions, error handling, and input validation.
  4. Compile or lint the result.
  5. Run unit, integration, security, and performance tests.
  6. Review provenance and licensing implications.
  7. Commit the change with an ordinary peer-review trail.

AI can improve developer productivity, but productivity should not be measured only by lines of generated code. More meaningful indicators include lead time, escaped defects, change-failure rate, review quality, and service reliability.

3. AI-assisted testing

AI supports testing in several ways. It can generate unit-test scaffolding, identify input partitions, propose boundary cases, translate requirements into test scenarios, classify flaky tests, and select a subset of regression tests likely to be affected by a change. It can also analyse failures by correlating stack traces, logs, commits, and environment changes.

Generated tests are not automatically good tests. A model may create tests that merely repeat the implementation, omit negative cases, or encode an incorrect assumption. Test quality should therefore be assessed through requirements traceability, branch or path coverage where appropriate, mutation testing, defect detection, and independent review.

A useful distinction is between test generation and test oracles. Test generation creates inputs and procedures. A test oracle determines whether the result is correct. Generative AI may be effective at producing inputs but unreliable at deciding correctness, particularly for complex business rules. Explicit assertions, domain invariants, reference implementations, and human-reviewed acceptance criteria remain essential.

For example, an AI assistant may generate a test for a payment service that checks whether a request returns HTTP status 200. A stronger test also verifies that the amount is correct, the transaction is idempotent, a duplicate request does not double-charge the customer, sensitive data is not logged, and a failed downstream call produces the intended recovery behaviour.

4. AI-assisted pipeline generation

A pipeline generator can draft YAML or other configuration for continuous integration and continuous delivery. It may infer build commands, recommend caching, create parallel jobs, or suggest deployment stages. This reduces the initial configuration burden, but pipeline files are executable operational policy. A small error can expose credentials, bypass tests, deploy to the wrong environment, or grant excessive permissions.

A secure pipeline-generation process should include:

  • approved templates and reusable pipeline components;
  • schema validation and static analysis;
  • least-privilege identities and short-lived credentials;
  • secret-management systems rather than embedded secrets;
  • mandatory tests and security gates;
  • signed artefacts and provenance records;
  • environment separation and protected deployment branches;
  • human approval for production or irreversible changes;
  • a rollback or forward-fix plan.

Pipeline-as-code improves repeatability, but generated pipeline-as-code must still be reviewed as software. Policy-as-code can enforce rules such as “production deployment requires a signed artefact” or “critical vulnerabilities block release.”

5. Hallucination and verification

In generative AI, a hallucination is a plausible-looking but false, unsupported, or invented output. Examples include an invented API parameter, a non-existent security standard, an incorrect diagnosis, or a fabricated citation. Hallucination is especially dangerous in DevOps because generated output may be executed automatically.

Risk reduction requires grounding and verification. Grounding supplies the model with approved repository files, runbooks, API specifications, architecture records, and current telemetry. Verification then checks the response against compilers, linters, tests, policy engines, documentation, and subject-matter review. Retrieval-augmented generation can improve factual alignment, but it does not guarantee correctness: retrieved documents may be outdated, contradictory, or themselves inaccurate.

A practical control is to classify outputs by consequence:

ConsequenceExampleControl
LowDrafting a commit-message summaryUser review
ModerateSuggesting a test or dashboard queryReview plus automated validation
HighChanging access policy or production infrastructureIndependent review, policy gates, staged execution
CriticalAutonomous action affecting safety, regulated data, or major financial exposureExplicit authorisation and restricted automation

6. Anomaly detection and predictive operations

Anomaly detection identifies observations that differ materially from an expected pattern. It may use static thresholds, statistical methods, clustering, time-series models, or machine learning. A threshold such as “CPU utilisation above 90%” is simple and interpretable, but it may generate noise during legitimate batch processing. A model can account for seasonality and relationships among metrics, but it may be difficult to explain and can fail when conditions change.

An anomaly score is not automatically an incident. It is a signal requiring context. A sudden increase in latency may be caused by a deployment, a dependency failure, a traffic surge, or an instrumentation error. Effective operations correlate metrics, logs, traces, deployment events, topology, and business indicators.

Predictive operations uses historical and current data to forecast events such as capacity exhaustion, certificate expiry, hardware failure, or likely incident risk. Forecasts must include uncertainty and a defined decision threshold. A prediction should lead to a proportionate action, such as capacity review, canary deployment, or increased observation—not an unreviewed destructive change.

For binary incident prediction, precision and recall are useful measures. Precision is:

Precision = TP ÷ (TP + FP)

Recall is:

Recall = TP ÷ (TP + FN)

Here, TP is the number of true positives, FP the number of false positives, and FN the number of false negatives. Precision answers “of the alerts classified as incidents, how many were correct?” Recall answers “of the actual incidents, how many were detected?” These measures apply to a defined classification threshold and labelled dataset. They do not by themselves measure operational usefulness, alert fatigue, or the cost of errors.

For service operations, the four golden signals—latency, traffic, errors, and saturation—provide a practical foundation. AI should enrich these signals, not replace basic instrumentation. Models also require monitoring for drift: the relationship between inputs and outcomes may change after an architecture, workload, or user-behaviour change.

7. AIOps

AIOps refers to the application of analytics and machine learning to IT operations. Typical capabilities include event deduplication, alert correlation, topology discovery, probable-cause analysis, incident summarisation, capacity forecasting, and automated remediation.

AIOps is best understood as a sociotechnical system. Its performance depends on telemetry quality, service ownership, operational procedures, and feedback from engineers. A model trained on inconsistent service names or incomplete incident records will produce unreliable correlations. Automation can also amplify a mistake: a faulty remediation rule may repeatedly restart healthy services or hide evidence needed for diagnosis.

A mature AIOps design separates four functions:

  1. Observation: collect and normalise telemetry.
  2. Interpretation: detect patterns, correlate events, and estimate impact.
  3. Decision: select an action under explicit policy and confidence limits.
  4. Execution and learning: perform a reversible action, record the result, and update procedures.

The separation makes it possible to audit why an action occurred and to disable execution while retaining analytical assistance.

8. GitOps and declarative delivery

GitOps uses a version-controlled repository as the declared source of truth for infrastructure and application configuration. An automated controller compares the desired state in Git with the observed state in an environment and works to reconcile differences. Pull-based reconciliation is common: the controller inside the environment retrieves approved changes rather than accepting unrestricted inbound deployment commands.

GitOps provides review history, reproducibility, rollback through a previous commit, and a clear audit trail. It does not make every change safe. A harmful configuration can still be merged, a secret can still be committed, and a controller can still have excessive privileges. Effective GitOps requires protected branches, code review, signed commits or artefacts where appropriate, secret encryption or external secret stores, policy validation, drift detection, and clear ownership.

The declarative model can be expressed conceptually as:

Observed state → Reconciliation controller → Desired state

The arrow represents a continuing control loop, not a one-time script. Convergence may fail because of unavailable dependencies, invalid configuration, permission errors, or conflicting controllers. These failure conditions must be observable and safely handled.

9. Serverless delivery

Serverless computing abstracts much of the server and cluster management. Functions, managed containers, event-driven services, and platform services can scale according to demand and are commonly billed according to use. Serverless delivery therefore shifts operational attention from host administration toward event contracts, identity, observability, quotas, latency, and vendor-specific behaviour.

A serverless CI/CD process should package immutable artefacts, test event schemas, scan dependencies, deploy to isolated stages, and use canary or weighted traffic where supported. Important risks include cold-start latency, distributed tracing difficulty, asynchronous failure, duplicate event delivery, hidden platform limits, vendor lock-in, and uncontrolled invocation cost. Idempotency is particularly important: a function should produce the correct result even if an event is delivered more than once.

10. Autonomous operations and human oversight

Autonomous operations refers to systems that detect conditions, decide on responses, and execute changes with limited direct intervention. Full autonomy is appropriate only in narrowly bounded, well-understood, reversible domains. Examples may include restarting a stateless worker after health checks fail, scaling a tested service within a budget, or rotating a certificate through an approved workflow.

Autonomy should be graduated rather than treated as a binary property:

  • Assistive: the system recommends an action.
  • Approved: a person confirms the recommendation.
  • Supervised: the system acts within a policy and a person monitors exceptions.
  • Bounded autonomous: the system acts automatically within strict limits.
  • Unrestricted autonomous: generally unsuitable for critical production decisions.

Controls include confidence thresholds, blast-radius limits, maintenance windows, rate limits, circuit breakers, dry runs, rollback, immutable logs, and an emergency stop. Human oversight must be meaningful: the reviewer needs sufficient information, time, authority, and technical ability to reject the action.

11. Sustainable DevOps

Sustainable DevOps considers the environmental, economic, and social consequences of software delivery and operation. Cloud efficiency is not identical to sustainability. Reducing cost may reduce waste, but an energy-efficient design also depends on workload location, hardware utilisation, cooling, renewable-energy availability, data movement, and software behaviour.

Practical measures include right-sizing resources, shutting down non-production environments when unused, selecting efficient algorithms, reducing unnecessary builds, caching responsibly, compressing data, using autoscaling limits, extending hardware life, and measuring energy or carbon where credible data is available. Sustainability must not compromise availability, security, accessibility, or legal obligations.

Useful metrics include resource utilisation, build minutes, storage growth, data-transfer volume, idle capacity, and energy or emissions estimates. Measurements should state boundaries and assumptions. A cloud provider’s regional emissions estimate may not be comparable with a direct energy measurement, so apparent precision should be treated cautiously.

12. Risk, privacy, intellectual property, and security governance

Privacy

Prompts, source code, logs, traces, tickets, and incident transcripts may contain personal data, credentials, customer identifiers, or confidential architecture details. Before using an AI service, an organisation should classify data, minimise inputs, redact sensitive content, define retention and training-use terms, restrict access, and assess cross-border transfers. Sensitive workloads may require a private deployment or a provider contract with appropriate controls.

Intellectual property

Generated code may resemble training material or include incompatible licence obligations. Organisations should define acceptable sources, scan dependencies and licences, retain provenance records, and require legal review for high-risk outputs. A claim that code is “AI-generated” does not remove the organisation’s responsibility to comply with copyright, licence, confidentiality, and contractual obligations.

Security

AI systems introduce familiar and new attack surfaces: prompt injection, malicious repository instructions, data poisoning, model theft, insecure tool use, excessive agent permissions, and leakage through generated responses. An AI agent connected to a shell, ticketing system, cloud account, or deployment platform should receive only the permissions necessary for its task. Tool calls should be authenticated, authorised, logged, rate-limited, and validated.

Governance

A practical governance framework includes an inventory of AI use cases, risk classification, approved tools, data rules, model and prompt versioning, evaluation datasets, access controls, audit logs, incident procedures, supplier assessment, and periodic review. Governance should align with applicable privacy, cybersecurity, employment, safety, and sector regulations. Standards and legal requirements vary by jurisdiction; organisations must obtain current professional advice rather than relying on a generic checklist.

13. Metrics and evaluation

AI adoption should be evaluated against engineering and organisational outcomes. Suitable measures include deployment frequency, lead time for changes, change-failure rate, mean time to restore service, escaped defects, test effectiveness, alert precision, alert recall, toil reduction, cost, energy use, and user satisfaction.

The mean time to restore service (MTTR) is commonly calculated as:

MTTR = Total restoration time ÷ Number of restored incidents

The units are normally minutes or hours. The metric assumes that restoration intervals and incident boundaries are defined consistently. It should not be compared across teams without accounting for incident severity, service architecture, and reporting practice. Faster restoration is not necessarily better if it is achieved by unsafe workarounds or incomplete recovery.

A sound evaluation compares an AI-assisted process with a baseline, uses representative tasks, measures both benefits and harms, and checks performance over time. Pilot studies should include failure cases, not only successful demonstrations.

14. Illustrative case: AI-assisted delivery for a digital payments service

Background

A fictional financial-technology company operates a payment API and deploys several times each week. Engineers report slow test diagnosis, repetitive pipeline maintenance, and excessive alerts during peak periods. The company proposes an AI assistant connected to its code repository, CI system, observability platform, and internal runbooks.

Problem analysis

The initial assessment identifies three risks. First, payment code contains confidential business logic and personal data. Second, a false deployment recommendation could cause financial loss. Third, the alert dataset contains duplicated and poorly labelled incidents, making model evaluation unreliable.

Approach

The company begins with low-risk assistance. The model drafts test cases, summarises failed builds, and retrieves relevant runbook sections. It cannot merge code, access production secrets, or execute shell commands. Prompts are filtered for personal data, and repository access is restricted to approved projects.

All generated code is compiled, scanned, tested, and reviewed. A pipeline policy blocks production deployment unless the artefact is signed, required tests pass, and two authorised reviewers approve the change. Anomaly detection is first run in shadow mode: it generates alerts but cannot remediate. Engineers label alerts and measure precision and recall by service.

After evaluation, a bounded automation rule is introduced for restarting a stateless worker only when health checks fail repeatedly, the workload is below a defined limit, and the action has not occurred more than a specified number of times in an interval. Every action is logged, and the system disables itself after repeated unsuccessful remediation.

Outcome

The assistant reduces time spent reading build logs and improves the completeness of test suggestions, but it does not replace review. Alert volume falls only after service ownership and telemetry naming are improved. The company decides not to enable autonomous production changes for payment authorisation because the consequences are difficult to reverse.

Learning points

The case demonstrates that AI value depends on process quality, not only model capability. Data minimisation, staged adoption, shadow evaluation, least privilege, policy gates, and bounded autonomy allow useful experimentation without treating generated recommendations as facts. It also demonstrates that some problems attributed to AI are actually problems of unclear ownership, poor observability, or weak deployment discipline.

15. Implementation guidance

An organisation adopting AI-assisted DevOps can proceed through the following sequence:

  1. Identify a narrowly defined problem and measurable baseline.
  2. Classify data, consequences, and acceptable automation boundaries.
  3. Select an approved model and establish contractual and security controls.
  4. Begin with assistive use cases such as documentation or log summarisation.
  5. Add automated validation, provenance, and human review.
  6. Test against normal, boundary, adversarial, and failure scenarios.
  7. Run operational models in shadow mode before allowing action.
  8. Introduce bounded automation with rollback and an emergency stop.
  9. Monitor quality, drift, cost, privacy, security, and user impact.
  10. Retire or redesign the use case if evidence does not support its value.

Challenges and limitations

AI systems can be confidently wrong, difficult to explain, sensitive to prompt or data changes, and costly to operate. Models may inherit bias from historical incidents, underrepresent rare failures, or optimise a measurable proxy while harming an unmeasured goal. Automation can reduce human learning if engineers stop investigating causes. Vendor dependence may limit portability and make pricing or model behaviour unpredictable.

The remedy is not to reject AI categorically. It is to match the level of automation to the quality of evidence and the consequence of failure. Reliable engineering fundamentals—version control, testing, observability, least privilege, incident learning, and clear ownership—remain necessary whether or not AI is used.

Chapter Summary

AI-assisted DevOps applies generative models, machine learning, and automation to coding, testing, pipelines, deployment, monitoring, and incident response. Generated code and configuration are probabilistic outputs that require compilation, testing, security review, provenance checks, and human accountability. AI-assisted testing can generate cases and prioritise regression suites, but explicit test oracles and domain review remain essential.

Anomaly detection and AIOps correlate telemetry and events to identify unusual behaviour, forecast operational conditions, and support remediation. Precision and recall help evaluate classification quality, while staged deployment, shadow mode, policy gates, and bounded autonomy reduce operational risk. GitOps provides declarative, version-controlled reconciliation; serverless delivery shifts responsibility toward event contracts, identity, observability, and cost control. Sustainable DevOps addresses resource use, emissions, and long-term operational efficiency.

Hallucination, privacy, intellectual-property, bias, prompt-injection, excessive permissions, and data leakage are central governance concerns. Successful adoption treats AI as a sociotechnical capability: it combines suitable tools with trustworthy data, secure architecture, measurable outcomes, skilled people, and accountable decision-making.

Key Terms

AI-assisted DevOps: Use of AI technologies to support software delivery and operations.

AIOps: Application of analytics and machine learning to IT operations.

Anomaly detection: Identification of observations that differ from an expected pattern.

Autonomous operations: Operational systems that can detect, decide, and act with limited direct intervention.

Canary deployment: A release strategy that exposes a new version to a small proportion of traffic before wider release.

Drift: Divergence between an intended configuration or model relationship and current reality.

GitOps: Declarative operations using version control as a source of desired state.

Hallucination: A plausible but false, unsupported, or invented AI output.

Idempotency: Property whereby repeated processing produces the same intended result as one processing operation.

Least privilege: Granting only the permissions required for an authorised task.

Mutation testing: Testing test-suite effectiveness by introducing controlled code changes.

Observability: Ability to infer internal system state from outputs such as metrics, logs, and traces.

Policy-as-code: Machine-enforceable rules expressed and evaluated as code.

Predictive operations: Use of historical and current data to forecast operational events or risks.

Precision: Proportion of positive classifications that are true positives.

Recall: Proportion of actual positive cases that are detected.

Reconciliation: Automated process of moving an observed system toward a declared desired state.

Serverless computing: Cloud execution model that abstracts much server management from the user.

Shadow mode: Running a model or rule for observation without allowing it to affect production.

Sustainable DevOps: DevOps that considers environmental, economic, and social sustainability.

Review Questions

Short Answer Questions

  1. Why must AI-generated code be treated as an untrusted contribution?
  2. What is the difference between test generation and a test oracle?
  3. Define GitOps and identify one advantage it provides.
  4. What is a hallucination in generative AI?
  5. Name two controls that can limit the risk of autonomous remediation.

Long Answer Questions

  1. Explain how AI can support the software-delivery lifecycle from coding through operations, including appropriate controls at each stage.
  2. Discuss the benefits and limitations of AIOps for incident detection and response.
  3. Compare GitOps and serverless delivery as emerging DevOps practices.
  4. Explain the privacy, intellectual-property, and security risks of using generative AI with source code and operational data.
  5. Describe a governance framework for introducing AI-assisted DevOps in a regulated organisation.

Analytical / Application Questions

  1. A model classifies 80 alerts as incidents. Of these, 60 are genuine incidents, while 20 are false positives. It also misses 15 genuine incidents. Calculate precision and recall, and explain what the results imply for alert fatigue and missed incidents.
  2. Design a staged adoption plan for an AI agent that proposes production infrastructure changes. Specify permissions, testing, approval gates, monitoring, rollback, and conditions for refusing autonomy.
  3. A serverless payment function may receive the same event twice after a network timeout. Explain how you would design the function and delivery pipeline to prevent duplicate financial effects while preserving auditability.

Multiple Choice Questions with Answers

Question 1

Which statement best describes AI-assisted DevOps?

A. Replacing all DevOps engineers with autonomous models

B. Using AI to support delivery and operations while retaining appropriate engineering controls

C. Using only manual deployment because AI cannot be tested

D. Using machine learning exclusively for cybersecurity

Correct Answer: B. Using AI to support delivery and operations while retaining appropriate engineering controls

Question 2

Why is a generated test suite not automatically sufficient?

A. Generated tests can never compile

B. Tests may omit negative cases or encode incorrect assumptions

C. Testing is unrelated to requirements

D. Test suites must not contain assertions

Correct Answer: B. Tests may omit negative cases or encode incorrect assumptions

Question 3

Which control is most appropriate for an AI-generated production pipeline?

A. Embedding credentials directly in the pipeline file

B. Disabling all deployment tests to increase speed

C. Using least privilege, policy gates, and protected approvals

D. Allowing every repository contributor to deploy production

Correct Answer: C. Using least privilege, policy gates, and protected approvals

Question 4

What does precision measure in binary incident classification?

A. The proportion of actual incidents that were detected

B. The proportion of predicted positives that are true positives

C. The total number of observations in the dataset

D. The time required to restore a service

Correct Answer: B. The proportion of predicted positives that are true positives

Question 5

Which statement about an anomaly score is correct?

A. It is automatically proof that an incident has occurred

B. It is a signal that requires operational context and investigation

C. It eliminates the need for observability

D. It guarantees the correct remediation action

Correct Answer: B. It is a signal that requires operational context and investigation

Question 6

What is a defining feature of GitOps?

A. Configuration is changed only through undocumented manual actions

B. Git is used as the declared source of desired state

C. Production systems cannot be monitored

D. All applications must run on physical servers

Correct Answer: B. Git is used as the declared source of desired state

Question 7

Why is idempotency important in serverless event processing?

A. Events are guaranteed to arrive exactly once

B. It ensures repeated delivery does not create unintended duplicate effects

C. It removes the need for identity controls

D. It prevents all cold starts

Correct Answer: B. It ensures repeated delivery does not create unintended duplicate effects

Question 8

Which is an example of meaningful human oversight?

A. A person is nominally responsible but cannot inspect or stop the system

B. A reviewer has information, authority, and time to reject a consequential action

C. A model approves its own deployment

D. All alerts are ignored after automation is enabled

Correct Answer: B. A reviewer has information, authority, and time to reject a consequential action

Question 9

Which practice reduces privacy risk when using AI with operational data?

A. Sending complete production logs to any public model

B. Disabling access controls for convenience

C. Minimising and redacting sensitive data before processing

D. Retaining all prompts indefinitely without review

Correct Answer: C. Minimising and redacting sensitive data before processing

Question 10

Which activity is associated with sustainable DevOps?

A. Increasing idle capacity in every environment

B. Reducing unnecessary builds and measuring resource use

C. Removing observability to save storage in all cases

D. Ignoring data-transfer costs

Correct Answer: B. Reducing unnecessary builds and measuring resource use

Continuous Integration and Automation with DevOps
Chapter 15 of 15