14. Platform Engineering, GitOps and Multi-Cloud OperationsIntroduction and ContextCloud adoption has changed the technical environment in which software is designed, deployed, and operated. Teams can provision infrastructure through APIs, package applications as containers, scale services automatically, and use managed databases and observability platforms. Yet the availability of cloud capabilities does not automatically produce speed, reliability, or good developer experience. Without common patterns, developers may face complex infrastructure interfaces, inconsistent security controls, duplicated automation, and unclear operational responsibilities. Platform engineering has emerged as a response to this problem. It treats the internal developer platform as a product whose users are application teams. The platform provides reliable, self-service capabilities while hiding unnecessary infrastructure complexity. GitOps complements platform engineering by using version-controlled, declarative repositories as the primary source of truth for infrastructure and application operations. Multi-cloud operations extend the challenge: organizations must decide what should be standardized across AWS, Google Cloud Platform, Microsoft Azure, private infrastructure, or edge environments, and what should remain cloud-specific. These subjects are closely related but not identical. Platform engineering concerns the design of productive and governed internal services. GitOps concerns an operating model for managing desired state through Git and automated reconciliation. Multi-cloud operations concern architecture, governance, portability, resilience, cost, skills, and the practical coordination of different providers. Together they form an important part of contemporary DevOps practice. Learning ObjectivesAfter studying this chapter, the reader should be able to: 1. Explain the purpose, architecture, and operating model of an internal developer platform. 2. Distinguish a platform product, a golden path, a paved road, and a self-service environment. 3. Design GitOps workflows using declarative configuration, pull requests, reconciliation, and progressive delivery. 4. Evaluate service meshes, policy automation, and platform observability in relation to organizational needs. 5. Analyse portability, cloud lock-in, resilience, cost, and capability trade-offs in multi-cloud strategies. 6. Recommend governance, security, and operating practices for platform teams. 7. Assess a platform initiative using developer-experience, delivery, reliability, and business measures. From DevOps Toolchains to Internal Developer PlatformsA traditional DevOps programme often begins by assembling tools: a source-code repository, CI server, container registry, infrastructure-as-code system, secrets manager, monitoring platform, and deployment mechanism. The resulting toolchain may be technically capable but difficult to use. Developers must understand cloud networking, identity, cluster configuration, policy syntax, deployment manifests, and operational procedures before releasing a simple service. Platform engineering addresses this cognitive burden by creating a coherent set of reusable interfaces. A platform team combines infrastructure, automation, documentation, templates, workflows, and guardrails into an internal product. The platform does not eliminate engineering responsibility; rather, it makes the routine and well-understood parts of delivery easier and more consistent. Application teams remain responsible for application behaviour, data, service-level commitments, and appropriate operational ownership. A useful platform architecture has several layers: - Experience layer: a portal, command-line interface, templates, documentation, service catalogue, and feedback channels.
- Workflow layer: provisioning, deployment, promotion, rollback, environment creation, and decommissioning workflows.
- Control layer: identity, policy, secrets, approvals, audit records, cost controls, and compliance checks.
- Infrastructure layer: Kubernetes or other compute platforms, networks, databases, queues, storage, DNS, and cloud services.
- Observability layer: logs, metrics, traces, events, service-level indicators, and operational dashboards.
The platform should expose a stable interface even when underlying implementation changes. For example, a developer may request a production web service with a database, encrypted secrets, monitoring, and a deployment pipeline without manually creating subnets, security groups, workload identities, or alert rules. The platform translates this request into approved infrastructure and operational configuration. This design creates an important distinction between complexity absorption and complexity concealment. A good platform absorbs repetitive complexity and presents meaningful choices. A poor platform merely hides complexity until an unusual failure occurs, at which point developers lack the knowledge or access needed to diagnose it. Platform documentation, transparent abstractions, escape hatches, and clear ownership are therefore essential. Golden Paths and Self-Service EnvironmentsA golden path is a recommended, supported route for performing a common engineering task. It may define a standard repository structure, application runtime, deployment method, observability package, security configuration, and support model. A golden path is not necessarily mandatory. Its value comes from making the preferred route easier than an improvised alternative. The related expression paved road emphasizes a path that is maintained and convenient, while an unsupported route remains possible when justified. A golden path should therefore include: - a clear use case and target user;
- an opinionated but adaptable reference architecture;
- automated creation and configuration;
- secure defaults;
- documentation and examples;
- upgrade and deprecation procedures;
- measurable service levels; and
- an exception or escape process.
Self-service means that an authorized user can obtain a capability without waiting for a separate infrastructure team to perform routine manual work. Examples include creating a development environment, requesting a database, registering a service, obtaining a temporary test namespace, or promoting a version to a controlled environment. Self-service is not equivalent to unrestricted access. It should operate within identity, policy, budget, quota, and lifecycle controls. A mature self-service workflow is usually idempotent: repeated execution produces the same intended result rather than creating duplicates or inconsistent state. It is also reversible where practical. Environment creation should include ownership, expiration, cost attribution, data-handling rules, and deletion mechanisms. Ephemeral environments can improve testing and review, but unmanaged environments create security exposure and cloud waste. The platform should be designed as a product. Platform teams need user research, a roadmap, release notes, support channels, service-level objectives, and adoption measures. They should interview developers about friction rather than assuming that adding another portal will improve experience. A platform with many features but poor discoverability may be less useful than a smaller, reliable platform with strong documentation. GitOps as an Operating ModelGitOps applies declarative infrastructure and software delivery principles to operations. The desired state of an environment is stored in version control, and an automated agent continuously compares that desired state with actual state. When differences exist, the agent attempts to reconcile the environment. Human changes are normally proposed through code review rather than made directly in production. The central concepts are: - Declarative configuration: the repository states what should exist, not every imperative step required to create it.
- Versioned desired state: changes have authorship, history, review, and rollback references.
- Automated reconciliation: a controller repeatedly works to make actual state match desired state.
- Observable divergence: drift, failed reconciliation, and policy violations generate visible signals.
- Separation of concerns: application code, environment configuration, secrets references, and infrastructure may be organized in separate but connected repositories.
In a typical workflow, a developer submits a pull request that changes an application image tag or deployment configuration. Automated checks validate syntax, security, policy, tests, and resource constraints. After approval, the change is merged. A GitOps controller detects the new desired state and applies it to the target environment. Health checks determine whether the rollout succeeds. If not, the system can halt progression or revert to a known-good version. GitOps does not mean that every secret should be stored in plain text in Git. Secret references, encrypted secret objects, external secret operators, or cloud secret managers may be used. Access to repositories and deployment controllers must be protected because control of desired-state repositories can become equivalent to control of production. GitOps also does not remove the need for imperative operations. Incident response, data repair, emergency containment, and certain cloud APIs may require direct action. Such actions should be authorized, recorded, time-limited where possible, and followed by reconciliation with the repository. Otherwise, emergency changes become permanent undocumented drift. Repository and Environment PatternsOrganizations use several repository structures. A monorepository can simplify coordinated changes but may increase access and pipeline complexity. Separate application and environment repositories provide clearer separation of ownership and promotion control, but synchronization becomes a design concern. A common pattern is to build an immutable artifact once and promote the same artifact through development, staging, and production by changing environment-specific references. Configuration inheritance can reduce duplication, but excessive overlays make behaviour difficult to understand. The best design makes the effective configuration inspectable. Environment differences should be deliberate—for example, replica counts or domain names—not accidental differences caused by manual edits. Progressive DeliveryGitOps can support progressive delivery techniques such as blue-green deployment, canary release, feature flags, and automated rollback. A canary release sends a controlled proportion of traffic to a new version and evaluates latency, error rate, saturation, and business indicators. Promotion should be based on explicit analysis rather than on deployment completion alone. This connects GitOps with site reliability engineering: delivery decisions are informed by service-level objectives and the impact on users. Policy Automation, Security, and GovernanceA platform is a control point for organizational policy. Policy automation can check whether images are signed, containers run without excessive privileges, resources have owners and cost tags, data stores use encryption, networks follow segmentation requirements, and public exposure is justified. Policies may be evaluated during pull requests, at admission to a cluster, during continuous compliance scans, or through cloud configuration rules. Preventive controls block unsafe changes; detective controls identify violations; corrective controls attempt remediation. Excessive blocking, however, can encourage bypasses and slow legitimate work. Policies should distinguish high-risk violations from advisory findings and should provide actionable feedback. Exceptions require an owner, reason, expiry date, and compensating control. Identity should be based on least privilege and workload identity rather than long-lived shared credentials. Platform components need separate identities for provisioning, deployment, monitoring, and administration. Audit records should connect a user, change, automated action, and resulting resource. Supply-chain controls may include dependency scanning, provenance records, artifact signing, isolated builds, and verification before deployment. Governance also includes data residency, privacy, retention, accessibility, licensing, incident reporting, and regulatory obligations. In a multi-cloud setting, policy must be translated across provider-specific control models. A policy saying that production data must be encrypted is incomplete unless the organization defines approved algorithms, key ownership, rotation, backup treatment, and evidence requirements. Service Meshes: Capability and ProportionA service mesh inserts a data-plane proxy alongside services and uses a control plane to distribute communication policy and telemetry. It can provide mutual TLS, service identity, traffic routing, retries, timeouts, circuit breaking, authorization rules, and distributed communication metrics without requiring each application to implement all these features independently. The benefits are most visible in complex service-to-service environments where uniform security and traffic control are important. A mesh can support canary routing between versions, enforce authenticated communication, and expose latency by service relationship. However, it introduces proxies, certificates, control-plane dependencies, configuration complexity, resource overhead, and a new failure domain. Poorly configured retries may amplify overload; opaque proxy behaviour may complicate diagnosis. A service mesh should therefore be adopted because a defined problem requires it, not because it is fashionable. Teams should first assess whether platform networking, gateway capabilities, library-based controls, or cloud-native services are sufficient. A mesh also does not replace application-level authorization, sound API design, testing, or observability. It is an enabling layer, not a complete operations strategy. Multi-Cloud Operations and the Portability QuestionMulti-cloud may refer to using more than one public cloud, combining public and private environments, or distributing workloads across providers for particular business reasons. The term is often used imprecisely. A company may use several clouds for acquisitions or different business units without operating one portable application across all of them. Conversely, a portable deployment model may still depend heavily on provider-specific databases or identity services. Portability exists at several levels: 1. Application portability: the application code and runtime can operate elsewhere. 2. Data portability: data can be moved with acceptable time, cost, integrity, and compliance risk. 3. Operational portability: monitoring, deployment, identity, backup, and incident processes work across environments. 4. Organizational portability: teams possess the skills, contracts, support arrangements, and governance needed to operate another provider. Containers and Kubernetes can standardize some interfaces, but they do not make clouds equivalent. Networking, identity, storage performance, managed databases, availability zones, quota models, billing, support, and security services differ. A Kubernetes abstraction may hide provider variation while leaving performance and reliability differences unresolved. The strategic question is not whether lock-in can be eliminated completely. Some degree of specialization may deliver better reliability, productivity, or cost. The question is whether dependencies are intentional, understood, and reversible enough for the organization’s risk profile. Portability has a cost: duplicated skills, duplicated controls, cross-cloud networking, data transfer charges, lower use of specialized services, and more complicated incident management. A rational multi-cloud decision begins with a threat and business analysis. Relevant drivers may include regulatory constraints, customer requirements, acquisition integration, resilience against provider-specific disruption, bargaining power, regional availability, or access to a distinctive capability. “Avoiding lock-in” by default is not a sufficient business case. Operating Model and Measures of Platform SuccessPlatform teams require explicit boundaries. They typically own the platform interfaces, automation, reliability of shared services, documentation, and lifecycle management. Product teams own application functionality and domain outcomes. Security, finance, architecture, and compliance teams contribute standards and oversight. A responsibility model should identify who designs, approves, operates, changes, and responds to each capability. Platform performance should be assessed through outcomes rather than the number of tools or templates. Useful measures include: - time for a new team to reach a successful deployment;
- lead time from approved change to production;
- deployment frequency and change failure rate;
- restoration time after incidents;
- percentage of services using supported golden paths;
- platform availability and workflow success rate;
- developer satisfaction and cognitive-load indicators;
- cost per environment or workload;
- policy compliance and exception ageing; and
- percentage of infrastructure managed through reviewed desired state.
These measures must be interpreted carefully. High deployment frequency may represent unhealthy change volume if failure rate is also high. Platform adoption may be coerced rather than earned. Developer satisfaction surveys need qualitative context. Measurement should support learning, not become a mechanism for punishing teams. Illustrative Case Study: Northstar Retail’s Platform TransformationBackgroundNorthstar Retail, a fictional regional retailer, operated online services in AWS and analytics workloads in Azure. Development teams used different pipeline tools, manually configured cloud resources, and maintained inconsistent monitoring. The company intended to launch services more frequently while meeting payment-security and privacy obligations. Situation and ProblemA new service required nearly three weeks to obtain a database, network access, deployment configuration, and monitoring. Production changes were often made directly through cloud consoles. Audits found incomplete ownership tags and inconsistent backup settings. Executives proposed moving all workloads to Kubernetes across both clouds to eliminate lock-in. AnalysisAn assessment showed that the principal problem was not the absence of Kubernetes. It was the lack of a common delivery interface, ownership model, and controlled change process. The analytics platform also depended on provider-specific data services, making complete portability expensive and of limited business value. The organization identified three categories of workload: portable containerized APIs, AWS-specialized retail services, and Azure-oriented analytics workloads. Approach and SolutionNorthstar created a platform product team with representatives from development, security, operations, and finance. It introduced a golden path for containerized APIs, including repository templates, automated build and image signing, environment configuration, workload identity, standard dashboards, alert rules, and service registration. Developers could request an environment through a portal, while the resulting resources were created through reviewed infrastructure code. The company adopted GitOps for application and environment configuration. Pull requests triggered testing, policy checks, and cost validation. A reconciliation controller deployed approved states. Direct production changes remained possible for emergency response but required incident records and subsequent repository correction. Rather than forcing all workloads into one abstraction, Northstar defined a portability matrix. API services used cloud-neutral packaging and Kubernetes where that reduced operational effort. Analytics retained selected Azure-managed services because their performance and integration benefits outweighed migration flexibility. Critical data was backed up and periodically restored in an alternate environment, which provided a more realistic resilience measure than attempting active-active operation everywhere. A limited service-mesh deployment was introduced only for APIs requiring mutual TLS and progressive traffic management. Other workloads used simpler platform networking. Policy automation enforced encryption, ownership, approved regions, signed images, and expiry for temporary environments. OutcomeThe organization reduced routine environment provisioning time, improved audit evidence, and gained visibility into service ownership and cloud expenditure. Teams reported fewer repeated infrastructure tasks, although the first version of the platform required substantial documentation and migration support. The portability matrix prevented an expensive attempt to duplicate every workload across both clouds. Learning PointsThe case demonstrates that platform engineering is an organizational product initiative, not merely a tooling project. GitOps improves traceability and consistency but depends on secure repositories, robust controllers, and operational discipline. Multi-cloud value must be demonstrated by business and risk requirements. Selective portability is often more realistic than universal portability, and a smaller number of well-supported golden paths is preferable to a catalogue of poorly maintained options. Challenges, Risks, and Common MistakesA frequent mistake is building a platform around the preferences of infrastructure engineers rather than the tasks and constraints of application teams. Another is treating the internal platform as a one-time project. Cloud services, runtimes, security standards, and developer expectations change; platforms require product management and lifecycle investment. Abstraction can also go too far. If a platform removes all visibility into networking, identity, storage, or failure modes, teams may be unable to make informed decisions. Conversely, exposing raw cloud APIs through a thin portal merely transfers complexity. The right abstraction is shaped by a stable user need and supported by transparent documentation. GitOps introduces its own risks. A compromised repository or deployment controller can create widespread impact. Reconciliation loops can repeatedly apply a harmful configuration. Poorly designed rollback procedures may restore application versions without restoring compatible database schemas. Teams should test controller failure, repository unavailability, secret rotation, partial deployment, and drift recovery. Multi-cloud operations increase the number of platforms, credentials, policies, skill sets, support contracts, and failure modes. Cross-cloud traffic may incur cost and latency. Independent environments can produce inconsistent security evidence. A strategy based only on provider failure may also underestimate application, data, identity, and human dependencies that remain common across clouds. Emerging DevelopmentsPlatform engineering is moving toward more composable and event-driven internal services. Backstage-like portals, software catalogues, infrastructure modules, and workflow engines are increasingly integrated with automated documentation and service ownership. Infrastructure definitions may be generated from higher-level specifications, but generated code still requires review and testing. Policy-as-code is expanding from admission control to continuous compliance, cost governance, software supply-chain verification, and data-policy enforcement. Artificial intelligence can assist with documentation search, configuration explanation, incident summarization, and suggested remediation. It should not be allowed to make unreviewed production changes merely because it can generate plausible configuration. Human accountability, approval boundaries, auditability, and protection of sensitive operational data remain essential. Workload identity, confidential computing, software bills of materials, provenance verification, eBPF-based observability, and platform support for edge and hybrid environments are also influencing design decisions. The enduring principle is not adoption of a particular product. It is the creation of trustworthy, understandable, and measurable interfaces between developers and operational infrastructure. Best-Practice GuidanceA sound platform and multi-cloud programme generally follows these practices: 1. Begin with developer and business problems, not a preferred tool. 2. Treat the platform as a product with users, a roadmap, support, and service objectives. 3. Provide a small number of secure, documented golden paths before expanding choice. 4. Use declarative, versioned desired state and make drift visible. 5. Separate secrets from ordinary configuration and apply least-privilege identity. 6. Build policy checks into the delivery flow, with governed and expiring exceptions. 7. Design rollback, disaster recovery, and controller failure procedures before production use. 8. Prefer selective portability and explicit provider-specific decisions over theoretical uniformity. 9. Measure delivery outcomes, reliability, cost, compliance, and developer experience together. 10. Review abstractions regularly and provide safe escape hatches for legitimate exceptions. Chapter SummaryPlatform engineering creates internal products that absorb repetitive infrastructure complexity and provide developers with reliable self-service capabilities. Golden paths make recommended practices convenient, while secure defaults, documentation, ownership, and escape mechanisms prevent the platform from becoming either restrictive or opaque. GitOps manages declarative desired state through version control, automated validation, reconciliation, and observable drift. It improves traceability and repeatability but requires secure repositories, careful secret management, tested recovery procedures, and disciplined emergency operations. Service meshes can standardize communication security and traffic management, but their operational cost means they should be introduced for clear requirements. Multi-cloud operations involve more than running containers in several providers. They require analysis of application, data, operational, and organizational portability, together with honest assessment of cost, resilience, capability, and lock-in. The most effective operating model combines platform product management, policy automation, measurable developer experience, and deliberate use of cloud-specific capabilities. Key TermsInternal Developer Platform: An organization-owned product providing standardized tools, workflows, infrastructure interfaces, and guardrails to application teams. Platform Engineering: The discipline of designing and operating internal platforms that improve software delivery and developer experience. Golden Path: A supported, recommended route for completing a common engineering task. Paved Road: A maintained and convenient engineering path that is preferred but normally permits justified alternatives. Self-Service: Authorized ability to obtain or operate a capability without routine manual intervention from another team. GitOps: An operating model in which version-controlled declarative state drives automated reconciliation of environments. Declarative Configuration: A description of the desired result rather than a complete sequence of implementation commands. Reconciliation: Automated comparison and correction of actual state to match desired state. Drift: A difference between declared desired state and the state actually running. Progressive Delivery: Gradual release of changes with automated or human evaluation before wider promotion. Policy as Code: Machine-readable rules that automatically evaluate or enforce security, compliance, architecture, or cost requirements. Service Mesh: A communication infrastructure layer that provides service identity, traffic control, security, and telemetry through proxies and control-plane components. Workload Identity: An identity assigned to an application or workload for controlled access to resources without shared long-lived credentials. Portability: The ability to move an application, data, or operating process between environments with acceptable effort and risk. Cloud Lock-in: Dependence on a provider that makes changing provider, architecture, or service difficult or costly. Ephemeral Environment: A temporary environment created for a specific development, testing, or review purpose. Platform Product: An internal platform managed according to user needs, lifecycle planning, support, and measurable outcomes. Reconciliation Controller: An automated component that continuously works to make an environment match declared configuration. Review QuestionsShort Answer Questions1. What problem is an internal developer platform intended to solve? 2. Distinguish a golden path from unrestricted self-service. 3. Identify the four central principles of a GitOps operating model. 4. Why should a service mesh not be adopted automatically for every Kubernetes environment? 5. What is meant by operational portability in a multi-cloud strategy? Long Answer Questions1. Explain the architecture of an internal developer platform and discuss how its experience, workflow, control, infrastructure, and observability layers interact. 2. Describe a complete GitOps workflow from pull request creation to deployment, monitoring, rollback, and drift correction. 3. Evaluate the advantages and risks of policy automation in a platform engineering programme. 4. Discuss the strategic trade-offs between cloud portability and the use of provider-specific managed services. 5. Explain how a platform team should measure developer experience, delivery performance, reliability, cost, and governance outcomes. Analytical / Application Questions1. An organization has slow environment provisioning, frequent console changes, and weak ownership tagging. Design a first-year platform and GitOps intervention, including priorities and measures. 2. A company proposes operating every workload actively across two clouds to avoid lock-in. Analyse the proposal using application, data, operational, organizational, cost, and resilience considerations. 3. A GitOps controller repeatedly deploys a faulty configuration after an emergency console change. Diagnose the governance and technical weaknesses and propose a safer recovery and reconciliation process. 22. Multiple Choice Questions with AnswersQuestion 1Which characteristic most clearly distinguishes a platform product from a collection of infrastructure tools? A. It contains more tools than a conventional DevOps toolchain. B. It provides a supported user interface, workflows, documentation, ownership, and measurable outcomes. C. It prevents application teams from accessing infrastructure directly in all circumstances. D. It requires every workload to use the same cloud provider service. Correct Answer: B. It provides a supported user interface, workflows, documentation, ownership, and measurable outcomes. Question 2A developer submits a pull request changing an environment image tag. In a GitOps model, what normally happens after approval and merge? A. An operator manually repeats the change in the production console. B. The application team emails the cloud provider to apply the change. C. A reconciliation controller detects the desired-state change and attempts to apply it. D. The configuration is deleted after the deployment pipeline completes. Correct Answer: C. A reconciliation controller detects the desired-state change and attempts to apply it. Question 3Which practice best manages secrets in a GitOps repository? A. Store all secrets as unencrypted plain text so the controller can read them. B. Use secret references, encryption, or an external secret manager with controlled identity. C. Place one shared administrator credential in every environment repository. D. Allow developers to copy production secrets into temporary environments. Correct Answer: B. Use secret references, encryption, or an external secret manager with controlled identity. Question 4Which statement best describes a golden path? A. A mandatory architecture that permits no exceptions. B. An unsupported experimental deployment route. C. A recommended and maintained route that makes a common task easier and safer. D. A provider contract guaranteeing application portability. Correct Answer: C. A recommended and maintained route that makes a common task easier and safer. Question 5A service mesh is most justified when an organization needs which combination of capabilities? A. Basic source-code versioning and issue tracking. B. Uniform service identity, mutual TLS, traffic routing, and service-level communication telemetry. C. Replacement of all application authorization and database logic. D. Automatic elimination of cloud networking costs. Correct Answer: B. Uniform service identity, mutual TLS, traffic routing, and service-level communication telemetry. Question 6Which example represents operational portability rather than merely application portability? A. The application source code compiles in two programming languages. B. A container image can run on two cloud providers. C. Deployment, monitoring, identity, backup, and incident processes work across environments. D. A database uses a provider-specific indexing feature. Correct Answer: C. Deployment, monitoring, identity, backup, and incident processes work across environments. Question 7Why can enforcing identical infrastructure across two clouds be a poor multi-cloud strategy? A. Cloud providers never support automation. B. It may increase cost and complexity while preventing useful provider-specific capabilities. C. Containers cannot run in more than one cloud. D. GitOps cannot manage more than one environment. Correct Answer: B. It may increase cost and complexity while preventing useful provider-specific capabilities. Question 8Which control is primarily detective rather than preventive? A. Blocking deployment of an unsigned image. B. Requiring an owner tag before resource creation. C. Scanning running resources and reporting an unencrypted storage volume. D. Rejecting a pull request that violates a policy. Correct Answer: C. Scanning running resources and reporting an unencrypted storage volume. Question 9Northstar Retail retained selected Azure analytics services while using portable packaging for APIs. What principle does this illustrate? A. Universal portability is always cheaper than specialization. B. Selective portability should be based on business value, risk, and operating cost. C. Multi-cloud requires every workload to run actively in every provider. D. Provider-specific services cannot be governed through policy. Correct Answer: B. Selective portability should be based on business value, risk, and operating cost. Question 10Which measure would best reveal whether a platform is improving developer experience? A. The number of cloud products purchased by the platform team. B. The number of lines of infrastructure code in repositories. C. Time to reach a successful deployment, combined with workflow reliability and developer feedback. D. The number of mandatory approval meetings held each month. Correct Answer: C. Time to reach a successful deployment, combined with workflow reliability and developer feedback.
|