Building Internal Developer Platforms: The Path to Self-Service Infrastructure
Author : Abdul Khader Abdul Hanif, Founder, Zazo Tech
Date : 31 October 2025
Reading Time: 10 minutes
In most organisations, provisioning infrastructure is a bottleneck. Developers wait days or weeks for infrastructure teams to provision environments. Security teams review every configuration manually. Compliance requirements add layers of approval. By the time a development team gets the resources they need, requirements have changed, deadlines have slipped, and frustration has mounted.
This bottleneck isn't just an operational annoyance. It's a strategic liability. In markets where speed of delivery determines competitive advantage, organisations that can't provision infrastructure quickly fall behind. Developers become dependent on centralised teams that can't scale to meet demand. Innovation slows. Technical debt accumulates. The promise of cloud agility—the ability to provision resources in minutes rather than months—remains unrealised.
The solution isn't hiring more infrastructure engineers. It's building internal developer platforms that enable self-service whilst maintaining security, compliance, and operational standards. Done correctly, these platforms transform infrastructure from a bottleneck into an accelerator, allowing developers to provision what they need, when they need it, without compromising governance.
I've led the design of internal developer platforms for organisations managing hundreds of AWS accounts and thousands of developers. The pattern is consistent: organisations that successfully implement self-service infrastructure see dramatic improvements in delivery speed, developer satisfaction, and operational efficiency. Those that fail to implement self-service struggle with backlogs, shadow IT, and security incidents caused by developers circumventing controls to get work done.
The imperative for self-service stems from a fundamental mismatch between developer needs and traditional infrastructure provisioning models. Developers need infrastructure frequently—for feature development, testing, experimentation, and production deployments. They need it quickly, often within hours of identifying a requirement. And they need it to be consistent, so that environments behave predictably across development, testing, and production.
Traditional provisioning models can't meet these needs. Centralised infrastructure teams, no matter how skilled or well-resourced, become bottlenecks when they're the only path to infrastructure. Ticket-based systems introduce delays. Manual reviews catch some problems but miss others. Approval workflows designed for risk management become obstacles to delivery.
The result is predictable: developers find workarounds. They provision infrastructure outside approved channels. They use personal cloud accounts. They bypass security controls because following proper procedures takes too long. This shadow IT introduces risks that centralised governance was designed to prevent. The organisation ends up with the worst of both worlds—slow delivery and compromised security.
The Platform Engineering ApproachInternal developer platforms solve this problem by inverting the traditional model. Instead of developers requesting infrastructure from centralised teams, platforms provide self-service capabilities that allow developers to provision infrastructure themselves—within guardrails that enforce security, compliance, and operational standards automatically
The key is abstraction. Developers don't need to understand every detail of AWS IAM policies, VPC networking, or security group configurations. They need to provision a database, deploy an application, or create a development environment. Platforms abstract away complexity, presenting developers with simple interfaces that provision infrastructure according to organisational standards
At the UK's financial regulator, we designed an internal platform that allowed development teams to provision entire AWS environments—complete with networking, security controls, monitoring, and compliance logging—through a single request. The platform used AWS Control Tower for landing zone management, Terraform for infrastructure provisioning, and GitLab for version control and CI/CD. Developers described their requirements in simple configuration files. The platform translated those requirements into secure, compliant infrastructure automatically.
The result was transformative. Provisioning time dropped from weeks to hours. Security findings decreased because infrastructure was deployed according to tested, approved patterns rather than manual configurations. Developer satisfaction improved because teams could focus on building features rather than wrestling with infrastructure. And the infrastructure team's workload decreased because they were maintaining platform capabilities rather than responding to individual provisioning requests.
Effective internal developer platforms share common capabilities, regardless of the specific technologies used to implement them.
Standardised infrastructure patterns form the foundation. Instead of allowing developers to provision any configuration, platforms offer a curated set of patterns—reference architectures for common use cases like web applications, data pipelines, or machine learning workloads. These patterns embed security controls, compliance requirements, and operational best practices. Developers select the pattern that fits their needs, provide application-specific parameters, and the platform provisions infrastructure accordingly.
At major UK banks, we implemented patterns for different data classification levels. A development team building a customer-facing application would select the "public-facing web application" pattern, which provisioned infrastructure with appropriate security controls: WAF for DDoS protection, encryption for data at rest and in transit, and logging that met regulatory requirements. A team building an internal analytics platform would select the "data warehouse" pattern, which provisioned different infrastructure: Redshift or Snowflake for storage, Databricks for processing, and network isolation that prevented external access.
Self-service provisioning interfaces make these patterns accessible. The interface might be a web portal, a command-line tool, or API endpoints that integrate with existing development workflows. The key is removing friction. Developers shouldn't need to learn new tools or languages. The best platforms integrate with tools developers already use—Git for version control, CI/CD pipelines for deployment, and Slack or Teams for notifications.
We implemented a GitOps approach where developers described infrastructure requirements in YAML files stored in Git repositories. When they committed changes, automated pipelines validated the configuration, checked for security violations, and provisioned infrastructure if all checks passed. This approach had several advantages: infrastructure was version-controlled, changes were auditable, and developers used familiar Git workflows rather than learning platform-specific tools.
Automated governance and compliance ensure that self-service doesn't compromise security. Platforms implement policy-as-code that enforces organisational standards automatically. Before provisioning infrastructure, the platform checks that configurations comply with security policies, don't exceed cost budgets, and meet regulatory requirements. Non-compliant requests are rejected with clear explanations of what needs to change.
We used tools like Open Policy Agent and AWS Service Control Policies to enforce guardrails. Policies prevented developers from disabling encryption, opening security groups to the internet, or provisioning resources in non-approved regions. These controls operated automatically—developers never had the opportunity to create non-compliant infrastructure, even accidentally.
Observability and cost management provide visibility into platform usage. Developers need to understand how their infrastructure is performing and what it costs. Platforms integrate monitoring, logging, and cost tracking, presenting this information through dashboards that make it easy to identify performance issues or cost overruns
We implemented tagging strategies that associated every resource with the team, project, and cost centre responsible for it. This enabled accurate cost allocation and made it easy to identify which teams were consuming the most resources. When costs exceeded budgets, automated alerts notified teams before the problem became serious.
Lifecycle management handles the full infrastructure lifecycle, not just provisioning. Platforms provide capabilities for updating infrastructure, scaling resources, and decommissioning environments when they're no longer needed. This is particularly important for development and testing environments, which are often provisioned but never deleted, accumulating costs unnecessarily.
We implemented automated policies that tagged development environments with expiration dates. When the date arrived, the platform sent notifications to the owning team. If no response was received, the environment was automatically decommissioned. This simple capability reduced our development environment costs by over 40%.
One of the most important architectural decisions in platform design is how to handle infrastructure provisioning relative to application deployment. Many organisations conflate these concerns, treating infrastructure provisioning as just another step in the software development lifecycle (SDLC). This creates problems.
Infrastructure changes have different risk profiles than application changes. Modifying a VPC configuration or changing IAM policies can impact multiple applications. These changes require different approval processes, testing procedures, and rollback strategies than application code changes.
We addressed this by segregating the Infrastructure Development Life Cycle (IDLC) from the SDLC. Infrastructure changes followed a separate pipeline with distinct stages: development, testing, and production. Changes were tested in isolated environments before being promoted to production. Approval gates ensured that infrastructure changes were reviewed by teams with appropriate expertise—network engineers for networking changes, security teams for IAM policy changes.
Application deployments, by contrast, followed the SDLC pipeline. Developers could deploy application code to infrastructure that had already been provisioned and validated through the IDLC. This separation meant that application deployments were fast and low-risk, whilst infrastructure changes received appropriate scrutiny.
The practical implementation used separate Git repositories and CI/CD pipelines. Infrastructure code lived in repositories managed by platform teams. Application code lived in repositories managed by development teams. When developers needed infrastructure changes, they submitted pull requests to infrastructure repositories. Platform teams reviewed and merged these requests, triggering the IDLC pipeline. Once infrastructure was provisioned, developers deployed applications through their own SDLC pipelines.
The Developer Experience FocusThe success of internal developer platforms hinges on developer experience. If the platform is difficult to use, developers will avoid it. If it introduces friction, they'll find workarounds. If it doesn't meet their needs, they'll provision infrastructure through other channels.
We obsessed over developer experience. Every interface was designed to be intuitive. Documentation was comprehensive and included examples for common use cases. Errors provided actionable guidance, not cryptic messages. And we solicited feedback continuously, iterating on the platform based on how developers actually used it.
One of the most impactful improvements came from observing that developers frequently needed to provision similar infrastructure with slight variations. Rather than forcing them to modify complex Terraform configurations, we introduced a templating system. Developers selected a base template, specified parameters like instance size or database engine, and the platform generated the full infrastructure configuration. This abstraction made provisioning accessible to developers who weren't infrastructure experts whilst still allowing advanced users to customise configurations when necessary.
We also integrated the platform with developers' existing workflows. Rather than requiring them to log into a separate portal, we built Slack integrations that allowed provisioning through chat commands. We created CLI tools that worked like familiar commands—platform create app-environment --name=dev --size=small provisioned a development environment without leaving the terminal. These integrations met developers where they were, rather than forcing them to adopt new tools.
Practical Implementation for SMEsSMEs face a challenge: they need the benefits of internal developer platforms but lack the resources to build custom solutions from scratch. Fortunately, the platform engineering ecosystem has matured significantly. Open-source tools and commercial platforms now provide capabilities that previously required custom development.
Start with landing zones. AWS Control Tower and Azure Landing Zones provide foundational governance capabilities out of the box. They establish organisational structures, implement security guardrails, and provide account vending capabilities that allow teams to provision new accounts according to organisational standards. These are free services that dramatically simplify multi-account management.
Use infrastructure-as-code from day one. Terraform, AWS CloudFormation, and Azure Bicep allow you to define infrastructure as code. Store these definitions in Git repositories. Use CI/CD pipelines to deploy them. This provides version control, auditability, and repeatability—the foundation for self-service platforms
Implement policy-as-code for governance. Tools like Open Policy Agent, Sentinel, and AWS Service Control Policies allow you to define policies that enforce security and compliance automatically. Start with simple policies—require encryption, prevent public access to storage, enforce tagging—and expand over time.
Leverage platform tools. . Solutions like Harness, Backstage, and Humanitec provide self-service interfaces, service catalogues, and developer portals that reduce the custom development required. These tools integrate with your existing infrastructure-as-code and CI/CD pipelines, providing the abstraction layer that makes self-service accessible to developers.
Focus on developer experience. The best platform is one that developers actually use. Invest time in documentation, examples, and training. Solicit feedback and iterate based on how developers interact with the platform. A simple platform that developers love is more valuable than a sophisticated platform they avoid.
Internal developer platforms aren't just operational improvements. They're strategic enablers. Organisations with effective platforms ship features faster, respond to market changes more quickly, and attract better engineering talent.
The speed improvement is measurable. At the FCA, provisioning time dropped from weeks to hours. At major UK banks, we reduced infrastructure-related deployment delays by over 60%. These improvements compound—when developers can provision infrastructure quickly, they experiment more, iterate faster, and deliver features that would have been impractical under traditional provisioning models.
The governance improvement is equally significant. By embedding security and compliance into platform capabilities, organisations reduce risk whilst increasing agility. Developers can move fast without compromising security because guardrails operate automatically. Security teams shift from reviewing individual requests to maintaining platform policies—a more scalable and effective model.
Perhaps most importantly, platforms improve developer satisfaction. Developers want to build features, not wrestle with infrastructure. Platforms that remove friction and enable self-service make developers more productive and more satisfied. In competitive talent markets, this matters. The best engineers gravitate toward organisations where they can focus on solving interesting problems rather than fighting bureaucracy.
The Path ForwardThe shift toward internal developer platforms is accelerating. Organisations that embrace platform engineering are outpacing competitors. Those that cling to traditional, centralised provisioning models are falling behind.
For SMEs, the opportunity is clear. Platform engineering tools have matured to the point where even small organisations can implement self-service infrastructure. The investment required—primarily time and expertise rather than large budgets—pays dividends in delivery speed, operational efficiency, and developer satisfaction.
The key is starting with a clear vision: infrastructure should enable developers, not constrain them. Self-service should be the default, with guardrails that enforce standards automatically. And platforms should evolve based on developer needs, not infrastructure team preferences.
Build your platform incrementally. Start with landing zones and infrastructure-as-code. Add policy-as-code for governance. Implement self-service interfaces for common use cases. Iterate based on feedback. Over time, your platform will become a strategic asset—one that accelerates delivery, reduces risk, and attracts the talent you need to compete.
The organisations that master platform engineering won't just deliver faster. They'll deliver better, with security and compliance embedded from the start. That's the promise of internal developer platforms. And for organisations willing to invest in building them, it's a promise that delivers
About the AuthorAbdul Khader Abdul Hanif is the founder of Zazo Tech, a UK-based consultancy specialising in security-first digital transformation. He has designed internal developer platforms for organisations managing hundreds of AWS accounts, including the UK's financial regulator and major UK banks. He holds AWS Professional and Azure Expert certifications and has extensive experience with platform engineering, DevSecOps, and infrastructure automation.
Contact us at admin@zazotech.com or Call 020 3576 3613