Nezar Gharbia
← Back to Portfolio

The Evolution of Software Delivery

A Deep Dive into Platform Engineering” The progression from IT operations to DevOps to platform engineering represents a significant evolution in how software development and deployment are managed. Initially, IT…

A Deep Dive into Platform Engineering”

The progression from IT operations to DevOps to platform engineering represents a significant evolution in how software development and deployment are managed. Initially, IT operations focused on maintaining and managing the infrastructure, ensuring stability and reliability. With the advent of DevOps, the emphasis shifted towards integrating development and operations teams to enhance collaboration, streamline workflows, and accelerate the delivery of software through continuous integration and continuous deployment (CI/CD) practices. This transition was driven by the need for faster delivery cycles, improved efficiency, and enhanced quality of software products. This often turned DevOps into bottlenecks, as most development teams struggled to keep pace.  The rise of cloud computing further accelerated this shift, providing scalable and flexible infrastructure but also introducing complexity. It became increasingly challenging for engineers to track and manage the myriads of cloud services and configurations.

Platform engineering addresses this challenge by creating and maintaining internal developer platforms (IDPs)  that provide an abstraction layer, enabling development teams to leverage the latest cloud capabilities without delving into the intricate details of each service. This abstraction lowers the cognitive load allowing engineers to focus on building and deploying applications while taking full advantage of cloud innovations and maintaining efficiency and scalability. The main drivers behind this progression include the need for greater agility, scalability, efficiency, and innovation in software development, ultimately leading to more resilient and scalable systems.

In This article we will delve deeper into platform engineering, its definition, what it consists of, Best practices, anti-patterns and ultimately a road map how to start your own practice of platform engineering.

DEFINITION

Platform engineering is the discipline of designing, building, and operating Internal Developer Platforms (IDPs) that standardize tools, processes, and workflows for software delivery. These IDPs include self-service interfaces, golden paths (opinionated, recommended ways to accomplish common tasks), and frameworks built using standardized tools. Workflows can include but are not limited to:

  •  
  • IaC (infrastructure as code),
  • Continuous Integration (CI)
  • Continuous Delivery (CD)
  • Containerization and orchestration
  • SSO & AIM frameworks
  • Observability platform (Analysis, alerting, logging and monitoring),
  • Messaging
  • storage
  • Compute resources (what resources to use and when)
  • Self-Serve
  • Documentation.
  • Developer portals for centralized service catalogs and self-service actions

Advantages

1. Improved Developer Productivity

Abstraction of Complexity: By providing standardized and reusable components, platform engineering abstracts the underlying complexity, allowing developers to focus more on coding and less on infrastructure management. It also drastically reduces onboarding of new engineers

Through self-service capabilities developers can access the resources they need quickly through reducing wait times and increasing efficiency.

2. Enhanced Consistency and Standardization

Uniform Environments ensure consistency across development, testing, and production environments, reducing the likelihood of environment-specific bugs and issues leading to improving code quality and maintainability.

3. Increased Scalability and Flexibility

Scalable Architecture: Platforms are designed to scale easily, accommodating growth in user base, data, and transaction volumes without significant rework.  They also make it easier to quickly adapt to new tools, technologies, and methodologies, keeping the organization at the cutting edge of innovation.

4. Enhanced Reliability and Performance

Automation of processes like CICD and QA reduces human error and increases the reliability of deployments and operations.

Comprehensive standardized way of monitoring and logging help in early detection and resolution of issues, ensuring high availability and performance.  It allows any engineer to troubleshoot any system as the tools and methodology are the same.

5. Improved Security

Centralized management of security policies and configurations ensures consistent application of security measures across all environments. The use of integrated security tools for identity management, secret management, and threat detection enhances the overall security posture.

6. Cost Efficiency

Efficient use of standardized resources through automated scaling and resource management reduces operational costs.  By standardizing and automating infrastructure management, operational overhead is significantly reduced.

7. Better Collaboration and Communication

Cross-Functional Collaboration facilitates better collaboration between development, operations, and security teams through shared tools and processes.  Transparency also improved visibility into workflows and processes promoting better communication and coordination.

8. Continuous Improvement and Innovation

Continuous monitoring and feedback loops enable ongoing improvements and quick adaptation to new requirements and challenges.  This frees up time for teams to focus on innovation and new feature development instead of managing infrastructure and all of its issues.

Best Practices

Understand Developer Needs

Regularly gather feedback from developers to ensure the platform meets their requirements, enhances productivity, and reduces friction.  They are your client your success is defined by their success in utilizing the platform that you are creating for them. Prioritize voluntary adoption through intrinsic value and excellent developer experience rather than mandates.

Modular and Scalable Design

Build the platform with modular components that can be scaled independently, enabling flexibility and easier maintenance.  Keep in mind that you are catering to multiple teams/ clients, who have different requirements.  Your ability to scale the environment and update it in a module fashion is critical.

Self-Service Capabilities

Keep in mind that the whole purpose of Platform engineering is to allow teams to self-serve and remove the DevOps team from being the bottleneck.  Provide self-service tools for developers, such as CI/CD pipelines, environment provisioning, observability tools, and containerization templates to reduce dependencies on the platform team.  Also provide a self-Service portal that provides single point for documentation, list of Services, discoverability, KPIs, feedback mechanisms, and knowledge base for sharing.

Focus on Developer Experience (DX)

Simplify workflows, reduce cognitive load, and ensure tools are user-friendly, enabling developers to focus on building features.  Keep in mind ease of use will control the adoption of the platform, increase its value and will define your success. Incorporate a developer portal for intuitive self-service and discoverability.

Automation First

Overall, you should have an iterative road map, and automation should be at the top of its priority.  Automate repetitive tasks, such as infrastructure provisioning, testing, and deployments, to reduce errors and speed up delivery.  Automation will provide an immediate value to the engineering team, increase the value you provide, and it will spread good well.  Obviously what dictates what to automate are the teams you are serving.  Embrace GitOps practices for declarative, version-controlled operations.

Security by Design

Embed security controls into the platform, including access management, secret handling, and automated compliance checks.  That will enable the whole organization to adopt a shift left strategy when it comes to security.  It will also ease adoption of such concepts as zero trust design philosophy.

Observability and Monitoring

In today’s very distributed micro-service, asynchronous cloud-based systems, troubleshooting an issue can be a nightmare if you do not have the right process and tools.  Implement comprehensive monitoring, logging, alerting and analysis systems to provide insights into platform performance and quickly detect issues.

Version Control Everything

This is an obvious one, buy it can’t be ignored.  Use version control for platform configurations, scripts, and documentation to ensure changes are tracked and can be rolled back if needed.  Try to version control everything that you can even binaries Embracing GitOps practices for declarative, version-controlled operations.

Standardize Tools and Processes

Standardize the tooling and workflows across teams to minimize complexity and improve collaboration and support.  Including standardization of processes should not be overlooked.  Thinks like configuration, change, incident, problem and continuous improvement processes are critical. Everyone should be singing the same song in the same language.

Continuous Improvement

Regularly review platform performance and seek opportunities to optimize, improve reliability, and reduce costs. The platform should really be treated as a product.  In big organizations, it should have its own product owner, team, priorities and objectives. 

Clear Documentation and Training

Provide clear, accessible documentation and training resources to help developers use the platform effectively.  This will improve adoptability and usage of the platform and reduce the steep learning curve.

Define SLAs and KPIs

Establish service level agreements (SLAs) and key performance indicators (KPIs) to measure the platform’s reliability, performance, and impact on development velocity.  Again treat it as a product that has customers, and customer satisfaction (e.g., NPS or CSAT) and track adoption metrics.

Anti-Patterns

Over-Engineering the Platform

  • Complexity Overload: Creating overly complex solutions with unnecessary features can lead to maintenance challenges and reduced usability for developers.
  • Feature Bloat: Adding too many features without clear prioritization, leading to a bloated platform that is difficult to manage.

Ignoring Developer Feedback

Keep in mind that you are developing a product whose customers are developers.  Listening to them, getting their feedback and tracking the adoption rate of the platform is critical.

  • Top-Down Approach: Building the platform without consulting or incorporating feedback from the end-users, i.e., the developers.
  • Lack of Iteration: Failing to iterate based on user feedback, resulting in a platform that does not meet developers’ needs.

Poor Documentation and Training

You could have developed the greatest platform, but without proper training, documentation, and collaboration we the intended audience you are doomed to failure.

  • Inadequate Documentation: Providing insufficient or unclear documentation, making it hard for developers to understand and use the platform effectively.
  • Lack of Training: Neglecting to offer adequate training and support, leading to low adoption rates and increased frustration among users.

Siloed Development and Operations

  • Disconnected Teams: Keeping development and operations teams isolated without fostering collaboration and shared ownership of the platform.
  • Lack of Integration: Implementing separate tools and processes for development and operations, which undermines the benefits of a unified platform.

Neglecting Security and Compliance

  • Security Blind Spots: Overlooking security considerations or treating them as an afterthought, leading to vulnerabilities in the platform.
  • Non-Compliance: Failing to ensure the platform meets regulatory and compliance requirements, exposing the organization to risks.

Rigid and Inflexible Architecture

  • Monolithic Design: Building a monolithic platform that is difficult to scale or adapt to changing requirements.
  • Lack of Modularity: Designing the platform without modular components, making it hard to update or extend.

Failing to Automate and Monitor

  • Manual Processes: Relying on manual processes for deployment, scaling, and monitoring, which can lead to errors and inefficiencies.
  • Inadequate Monitoring: Implementing insufficient monitoring and logging, making it difficult to detect and resolve issues promptly.

Neglecting Performance and Scalability

  • Underestimating Load: Designing the platform without considering performance and scalability requirements, leading to bottlenecks and outages.
  • Ignoring Load Testing: Failing to conduct thorough load testing, resulting in a platform that cannot handle the expected traffic and usage.

Inconsistent Governance and Policies

  • Lack of Standards: Failing to establish and enforce coding standards, deployment policies, and best practices across the platform.
  • Ad Hoc Changes: Allowing uncoordinated and ad hoc changes to the platform, which can lead to inconsistencies and technical debt.

Overlooking Integration and Interoperability

  • Isolated Systems: Developing components or services that do not integrate well with each other or with external systems.
  • Vendor Lock-In: Choosing technologies or services that create dependencies on a single vendor, reducing flexibility and increasing costs.

Insufficient Planning and Road mapping

  • Short-Term Focus: Focusing only on immediate needs without a long-term roadmap, leading to a lack of strategic direction.
  • Skipping Architecture Reviews: Neglecting regular architecture reviews and updates, resulting in a platform that becomes outdated and ineffective.

Lack of Continuous Improvement

  • Stagnation: Failing to continuously evaluate and improve the platform based on new technologies, feedback, and changing business needs.
  • Resisting Change: Being resistant to adopting new tools, practices, or technologies that could enhance the platform’s capabilities.
  • Rebranding the Operations Team: Simply renaming an existing ops/infra team to “platform engineers” without changing the operating model, adopting a product mindset, or focusing on self-service.
  • Building the Front End (Portal) First: Focusing on a developer portal or UI before building robust backend platform capabilities, leading to a “shiny but hollow” experience.
  • Build It and They Will Come: Assuming developers will adopt the platform without proactive feedback loops, quick wins, or demonstrated value (often leading to low adoption).

Phase 1: Assessment and Planning

1.1 Define Objectives

Identify Goals: Improve developer productivity, streamline processes, enhance scalability, and ensure reliability.

Set Metrics: Determine key performance indicators (KPIs) such as deployment frequency, mean time to recovery (MTTR), and lead time for changes.

1.2 Current State Analysis

Evaluate Existing Infrastructure: Assess current tools, workflows, and infrastructure on Google Cloud.

Identify Pain Points: Gather feedback from developers and operations teams to understand current challenges.

1.3 Stakeholder Alignment

Engage Stakeholders: Involve key stakeholders from development, operations, and business teams.

Define Roles and Responsibilities: Clearly outline the roles of platform engineers, developers, and operations teams.

Phase 2: Design and Tool Selection

2.1 Architecture Design

Platform Architecture: Design a scalable and modular IDP using cloud-agnostic tools where possible. A platform should provide tools, templates, or processes for:

  • Dev boxes: accelerate onboarding.
  • Env provision & management.
  • IaC
  • Messaging.
  • Logging
  • Source Repositories
  • Containerization & orchestration.
  • Builds
  • Deployment:  CICD
  • Monitoring
  • Security:  IAM

Integration Points: Identify integration points with existing systems and tools.

2.2 Tool Selection

Foundational (cloud-agnostic recommendations in 2026):

Infrastructure as Code (IaC): Terraform/OpenTofu (preferred for multi-cloud).

CI/CD Pipelines: GitHub Actions, GitLab CI, or cloud-native equivalents with GitOps (ArgoCD/Flux).

Container Orchestration: Kubernetes (via GKE, AKS, EKS).

Developer Portal: Backstage (Spotify OSS) or alternatives like Port/Cortex.

Monitoring and Logging: Cloud-native suites plus open standards.

Security: IAM, Secret Managers, policy-as-code.

Google

Infrastructure as Code (IaC): Use Google Cloud Deployment Manager or Terraform.

CI/CD Pipelines: Use Google Cloud Build, Google Cloud Source Repositories, and GitHub Actions.

Container Orchestration: Use Google Kubernetes Engine (GKE).

Monitoring and Logging: Use Google Cloud Operations Suite (formerly Stackdriver), including Cloud Monitoring, Cloud Logging, and Error Reporting.

Security: Use Google Cloud Identity and Access Management (IAM), Google Secret Manager, and Google Cloud Armor.

Azure

Infrastructure as Code (IaC): Use Azure Resource Manager (ARM) templates, Terraform, or Azure Blueprints.

CI/CD Pipelines: Use Azure DevOps, GitHub Actions, or Jenkins on Azure.

Container Orchestration: Use Azure Kubernetes Service (AKS).

Monitoring and Logging: Use Azure Monitor, Azure Log Analytics, and Azure Application Insights.

Security: Use Azure Active Directory (AAD), Azure Key Vault, and Azure Security Center.

AWS

Infrastructure as Code (IaC): Use AWS CloudFormation, AWS CDK, or Terraform.

CI/CD Pipelines: Use AWS CodePipeline, AWS CodeBuild, and GitHub Actions.

Container Orchestration: Use Amazon Elastic Kubernetes Service (EKS) or Amazon Elastic Container Service (ECS).

Monitoring and Logging: Use Amazon CloudWatch, AWS X-Ray, and AWS CloudTrail.

Security: Use AWS Identity and Access Management (IAM), AWS Secrets Manager, and AWS Shield.

Phase 3: Development and Deployment

3.1 Develop Platform Components

Google

Infrastructure Automation: Implement IaC using Google Cloud Deployment Manager or Terraform.

CI/CD Pipelines: Set up CI/CD pipelines with Google Cloud Build for automated testing and deployment.

Container Management: Deploy and manage containers using Google Kubernetes Engine (GKE).

Azure

Infrastructure Automation: Implement IaC using Azure Resource Manager (ARM) templates or Terraform.

CI/CD Pipelines: Set up CI/CD pipelines with Azure DevOps or GitHub Actions for automated testing and deployment.

Container Management: Deploy and manage containers using Azure Kubernetes Service (AKS).

AWS

Infrastructure Automation: Implement IaC using AWS CloudFormation, AWS CDK, or Terraform.

CI/CD Pipelines: Set up CI/CD pipelines with AWS CodePipeline and AWS CodeBuild for automated testing and deployment.

Container Management: Deploy and manage containers using Amazon EKS or Amazon ECS.

3.2 Testing and Validation

Google

Automated Testing: Implement automated testing frameworks using Google Cloud Build and Google Cloud Functions for integration tests.

Performance Testing: Conduct load testing using Google Cloud’s Performance Monitoring tools.

Azure

Automated Testing: Implement automated testing frameworks using Azure DevOps and Azure Test Plans.

Performance Testing: Conduct load testing using Azure Load Testing and Application Insights.

AWS

Automated Testing: Implement automated testing frameworks using AWS CodeBuild and AWS Lambda for integration tests.

Performance Testing: Conduct load testing using AWS CloudWatch and AWS X-Ray.

Phase 4: Implementation and Rollout

4.1 Gradual Rollout

Pilot Projects: Start with pilot projects to validate the platform’s effectiveness.

Feedback Loop: Collect feedback from pilot users and make necessary adjustments.

4.2 Training and Documentation

Developer Training: Conduct training sessions to familiarize developers with the new platform using Google Cloud’s training resources.

Documentation: Provide comprehensive documentation for platform usage, best practices, and troubleshooting.

Phase 5: Monitoring and Continuous Improvement

5.1 Monitoring and Metrics

Real-Time Monitoring: Implement monitoring tools using Google Cloud Operations Suite or Azure Monitor and Log Analytics to track platform performance and usage.

KPIs Review: Regularly review KPIs to measure the success of the platform.

5.2 Continuous Improvement

Iterative Enhancements: Continuously enhance the platform based on feedback and performance data.

Stay Updated: Keep abreast of new tools and technologies from Google Cloud to incorporate into the platform.

People, Processes, and Tools

People

Platform Engineers: Specialists responsible for building and maintaining the platform using Google Cloud.

DevOps Team: Integrates development and operations to streamline processes on Google Cloud.

Developers: End-users of the platform who need to be trained and onboarded.

Processes

Agile Methodology: Adopt agile practices for iterative development and continuous feedback.

DevOps Practices: Implement DevOps practices to ensure collaboration between development and operations.

Change Management: Establish a robust change management process to handle platform updates and modifications.

Tools

Google

IaC Tools: Google Cloud Deployment Manager, Terraform.

CI/CD Tools: Google Cloud Build, Google Cloud Source Repositories, GitHub Actions.

Container Tools: Google Kubernetes Engine (GKE).

Monitoring Tools: Google Cloud Operations Suite (Cloud Monitoring, Cloud Logging, Error Reporting).

Security Tools: Google Cloud IAM, Google Secret Manager, Google Cloud Armor.

Azure

IaC Tools: Azure Resource Manager (ARM) templates, Terraform, Azure Blueprints.

CI/CD Tools: Azure DevOps, GitHub Actions, Jenkins on Azure.

Container Tools: Azure Kubernetes Service (AKS).

Monitoring Tools: Azure Monitor, Azure Log Analytics, Azure Application Insights.

Security Tools: Azure Active Directory (AAD), Azure Key Vault, Azure Security Center.

AWS

IaC Tools: AWS CloudFormation, AWS CDK, Terraform.

CI/CD Tools: AWS CodePipeline, AWS CodeBuild, GitHub Actions.

Container Tools: Amazon EKS, Amazon ECS.

Monitoring Tools: Amazon CloudWatch, AWS X-Ray, AWS CloudTrail.

Security Tools: AWS IAM, AWS Secrets Manager, AWS Shield.

KPIs and measurements

We can always starts with DORA Metrics which includes

DF – Deployment Frequency—How often an organization successfully releases to production.  (How agile & mature is the team)

MLT – Mean Lead Time for Changes—The amount of time it takes a commit to get into production. This measure How Agile is the team and the streamlining of the SDLC as a while.  The faster we are able to take an idea from just an idea to production

CFR – Change Failure Rate—The percentage of deployments causing a failure in production  (measures quality)

MTTR – Mean Time to Restore Service—How long it takes an organization to recover from a failure in production. (observability)

I would also add

MTTD – Mean time to Detect.  This measure the effectiveness of our observability platform which should include analysis of patterns, logging, Monitoring and Alerting

Conclusion

By following this roadmap, you can systematically implement platform engineering on your Cloud to improve your software development and delivery processes. This approach will help you create a scalable, reliable, and efficient platform that enhances developer productivity and operational efficiency.