First time at Zeet?

17 Nov
2023
-
7
min read

The Self-Service Revolution: How IDPs Empower Developers

Guide to building an internal developer platform to empower developers. Covers strategies, architectures, roadblocks, and tips to create a "golden path" to success with executive buy-in, clear vision, feedback loops, and cross-functional teams.

Jack Dwyer

Product
Platform Engineering + DevOps
Content
heading2
heading3
heading4
heading5
heading6
heading7

Share this article

What is an Internal Developer Platform (IDP)?

An Internal Developer Platform (IDP) is a central platform that companies create to improve developer productivity and experience. IDPs aim to streamline the software development process by providing developers with self-service interfaces to manage applications and provision the resources they need.

Rather than requiring developers to go through lengthy processes to request compute resources, databases, or other tools, an IDP gives them an intuitive way to spin up and manage these resources themselves. This self-service capability is typically provided through interfaces like developer portals, CLIs, and APIs.

A key aspect of IDPs is that they integrate with a company's existing tools and infrastructure. The platform brings together and builds on top of things like Kubernetes clusters, CI/CD pipelines, artifact repositories, monitoring tools, and more. So an IDP is not something completely new - it's about connecting and improving the developer experience across existing investments.

By creating a centralized platform to bring all these capabilities together in one place, companies can greatly improve developer velocity and satisfaction. IDPs enable developers to focus on writing code rather than dealing with IT tickets and resource requests.

Benefits of Implementing an IDP

Implementing an internal developer platform provides several key benefits for engineering organizations:

Increased Speed of Delivery

An IDP improves velocity by removing friction from the development process. Developers can self-service environments, tools, and services rather than waiting on tickets and manual provisioning. Automated infrastructure provisioning, deployment pipelines, and integration with existing tools ensures developers can go from code to production faster.

Ability to Scale DevOps Practices

As organizations adopt DevOps, they often struggle to scale new practices across large engineering teams. An IDP provides a consistent set of self-service capabilities, automation, and tools that allow DevOps workflows to scale across the organization.

Improved Developer Experience

Developers can spend more time building features and less time battling infrastructure and tools. IDPs provide a productive developer experience with self-service access, turnkey tooling, and automated workflows. This improves developer satisfaction, recruitment and retention.

Core Components of an IDP

An IDP is comprised of several core components and services that provide the functionality developers need to build and deploy applications efficiently. These typically include:

Developer Control Plane

The developer control plane provides self-service interfaces that enable developers to easily provision resources, manage apps, and access services. This includes:

  • Developer portal - A central web interface for developers to manage apps and resources.
  • CLI - A command line interface to automate infrastructure tasks.
  • API - Programmatic access to infrastructure and services.

Integration and Delivery

These components support continuous integration and delivery of applications:

  • CI/CD pipelines - Automate build, test, and deployment processes.
  • Artifact management - Stores build artifacts and dependencies.

Monitoring and Logging

Observability into apps and infrastructure through:

  • Metrics - Time-series data about performance and usage.
  • Logging - Centralized logging for apps and systems.
  • Tracing - Track requests across microservices.

Security

Securing access and infrastructure:

  • IAM - Manage user identities and access controls.
  • Secrets management - Securely store and rotate credentials.
  • Policy as code - Infrastructure policies defined as code.

Resource Platform

Foundational infrastructure like:

  • Kubernetes - Container orchestration.
  • Serverless - Event-driven, autoscaling functions.
  • DBaaS - Managed database services.

When You Need an Internal Developer Platform

The demand for software solutions continues to accelerate across all industries. Whether it's building customer-facing apps, internal business systems, IoT solutions, or data pipelines, companies rely on developers to deliver quality software faster than ever before. This rapid pace of delivery requires scaling software development practices across the entire organization.

An internal developer platform becomes essential when:

  • Demand for faster software delivery skyrockets - Release cycles continue to compress from months to weeks to days. Business expectations have increased along with the pace of industry disruption. Without a unified internal platform, developers end up bogged down by infrastructure tasks instead of writing code. An IDP abstracts away this undifferentiated heavy lifting to increase velocity.
  • Need to scale DevOps across the org - Piecemeal adoption of DevOps practices in silos causes friction. An IDP provides Guardrails as a Service to codify security, compliance, and best practices organization-wide. Instead of reinventing the wheel, teams can self-serve a curated set of managed services.
  • Developer experience issues arise - Without unified self-service workflows, developers waste time toggling between disparate tools and tickets to IT. Developer experience suffers from the cognitive load. An IDP delivers a centralized control plane for provisioning infrastructure, deploying applications, and managing the entire software lifecycle.

By providing self-service access to compliant and secured infrastructure, IDPs empower developers to focus on writing business logic. Unifying teams under a common platform also improves collaboration and sharing of knowledge across the organization. With an IDP, companies can scale DevOps best practices while accelerating delivery and enhancing developer experience.

IDPs vs. PaaS

An Internal Developer Platform (IDP) is different from a Platform-as-a-Service (PaaS) offering in a few key ways:

  • Tailored to your tech stack: An IDP is custom-built for your company's specific technology stack, tools, and goals. A PaaS is a generalized, multi-tenant platform.
  • Single vs multi-tenant: An IDP serves a single organization. A PaaS hosts multiple customers on the same infrastructure.
  • More control: With an IDP, you have full control to customize and optimize the platform for your needs. A PaaS limits customization options.
  • More work: Building and managing an IDP requires significantly more upfront and ongoing work compared to adopting a PaaS solution.

The tradeoff is an IDP provides more control and customization for your developers' needs, but at the cost of additional overhead for your team to build and operate it. A PaaS requires less effort to implement but offers less flexibility.

Evaluate both options and weigh the benefits of control vs. ease of management for your use case. An IDP may be the right choice if you have very specific needs and your team can support it long-term.

Getting Started with IDPs

Implementing an internal developer platform (IDP) may seem daunting at first, but breaking it down into smaller steps can set your organization up for success. Here are some tips for getting started:

Start with a reference architecture

Having a well-defined reference architecture is key to building a successful IDP. This provides a blueprint for the core components and helps align stakeholders on the vision. Some common elements in an IDP reference architecture include:

  • Developer portal and CLI
  • CI/CD pipelines
  • Artifact management
  • Infrastructure provisioning
  • Monitoring and observability

Build an MVP with a lighthouse team

Don't try to build the entire platform at once. Start with a minimum viable product (MVP) that focuses on high value capabilities. Creating the MVP with a small lighthouse team helps build momentum and gives opportunity for feedback.

Expand capabilities incrementally

Once the MVP is built, prioritize adding new services and capabilities based on developer needs. Focus on areas that will provide the most productivity gains. Expand incrementally vs trying to rebuild the whole platform at once.

Tighten feedback loops

Developer experience is key for platform adoption. Make sure to directly engage with developers frequently and tighten feedback loops. Set up forums for developers to provide input and influence the roadmap.

By starting with a solid foundation, building incrementally, and keeping developers involved, you can increase the chances of successfully implementing an internal developer platform. Focus on delivering value early and often.

IDP Reference Architectures

Internal developer platforms typically contain common components and follow general patterns, while allowing flexibility to meet an organization's specific needs. Here are some sample reference architectures for an IDP:

AWS IDP Reference Architecture

Amazon's proposed architecture includes:

  • Developer Portal - Self-service UIs, CLI access, APIs
  • CI/CD Pipelines - Build, test, deploy automation
  • Artifact Management - Source control, package management
  • Infrastructure - AWS services like EC2, RDS, ECS
  • Observability - CloudWatch, X-Ray, Managed Prometheus
  • Security - IAM, WAF, Shield, Secrets Manager

Azure IDP Reference Architecture

The Azure architecture consists of:

  • Developer Services - Portal, CLI, REST APIs
  • CI/CD - Azure Pipelines, GitHub Actions
  • Environments - App Service, AKS, Azure Functions
  • Monitoring - Application Insights, Log Analytics
  • Identity - Azure Active Directory, Managed Identities
  • Storage - Blob Storage, Managed Disks

Netflix IDP Reference Architecture

Netflix's platform includes:

  • Developer Console - Self-service UIs and APIs
  • Continuous Delivery - Spinnaker, Jenkins
  • Runtime Plane - EC2, Auto Scaling Groups
  • Data Plane - Cassandra, DynamoDB
  • Insights - Atlas, CloudWatch
  • Security - IAM roles, Security Monkey

While actual implementations vary, most IDPs share those core components for provisioning infrastructure, deploying code, managing apps, monitoring, and security. The reference architectures provide a blueprint while allowing customization to meet specific needs.

Best Practices for Managing IDPs

Managing an internal developer platform requires some key strategies and best practices to ensure its success. Here are some of the most important practices to focus on:

Treat the IDP as a Product

Your IDP should be treated with the same priority and processes as an external customer product. Have a product manager responsible for the roadmap. Create user stories and continuously deliver value. Use data and feedback to drive priorities.

Central Platform Team

Have a dedicated team responsible for building, maintaining and evolving the platform. Don't make it a part-time job for infrastructure engineers. This team collaborates closely with app teams but owns the platform codebase.

Enable Developer Self-Service

Make provisioning resources, deploying code, and managing apps something developers can do without tickets or delays. Provide self-service interfaces like CLI, API, and portals. Automate everything you can.

Tight Collaboration Between Teams

App developers should be responsible for their code and SLOs once deployed. But platform engineers need direct feedback to improve the developer experience. Keep a tight, continuous feedback loop between the central and app teams.

Incremental Delivery

Don't try to build everything at once or over-architect upfront. Start with developer pain points and iterate. Deliver incrementally while refactoring along the way. Plan for flexibility, not perfection.

Focusing on these best practices will help you better manage your IDP, enable developer autonomy, and continuously improve the platform. But it requires executive sponsorship, a clear vision, and cross-functional team collaboration to be successful.

Measuring IDP Success

An effective IDP should aim to improve developer productivity, increase velocity, enhance reliability, and boost developer satisfaction. Here are some key metrics to track:

Developer Productivity

  • Number of features/stories delivered per developer
  • Code commit frequency
  • Automated test coverage
  • Lead time from commit to production

Application Delivery Velocity

  • Deployment frequency
  • Change failure rate
  • Time to restore service after incidents

Platform Reliability

  • IDP uptime/availability
  • Mean time to resolution for IDP issues
  • Number of critical IDP incidents

Developer Satisfaction

  • IDP NPS (Net Promoter Score)
  • IDP usage and adoption rates
  • Developer survey ratings
  • Number of support tickets

By establishing benchmarks and measuring these metrics over time, you can quantify the impact of your IDP investment and demonstrate hard ROI. Improvements in productivity, reliability, and velocity indicate your IDP is delivering on its promise.

Skills Needed for IDP Teams

Building and maintaining an effective Internal Developer Platform requires bringing together a diverse set of skills and mindsets within your teams. Here are some of the key skills and attributes to look for:

Platform Engineering Skills

Your IDP team needs strong capabilities around building and operating large-scale distributed systems. Look for engineers with experience in areas like:

  • Cloud infrastructure (AWS, GCP, Azure)
  • Container orchestration (Kubernetes, Docker)
  • Observability (logging, monitoring, alerting)
  • APIs and microservices
  • Infrastructure as code (Terraform, CloudFormation)

Platform engineers should be comfortable working across the full software stack from low-level infrastructure to end-user experiences.

DevOps Skills

Adopting DevOps practices is critical for delivering an agile, reliable IDP. Your team should be fluent in areas like:

  • CI/CD pipelines
  • Infrastructure as code
  • Testing automation
  • Security best practices
  • Collaborative development workflows (git, code reviews)

Experience with DevOps tooling like Jenkins, Spinnaker, and Ansible is highly desirable.

Developer Empathy

Your platform engineers need to deeply understand the developer experience. Look for people with first-hand experience as application developers and the ability to advocate for developer needs.

Communication and Collaboration

Since an IDP serves many internal teams, collaboration is crucial. Strong verbal and written communication skills are key. Look for platform engineers who can build connections throughout the organization.

The right mix of technical chops, DevOps practices, and people skills will set your Internal Developer Platform up for ongoing success.

Subscribe to Changelog newsletter

Jack from the Zeet team shares DevOps & SRE learnings, top articles, and new Zeet features in a twice-a-month newsletter.

Thank you!

Your submission has been processed
Oops! Something went wrong while submitting the form.