Set Up Your Internal Developer Platform With These Open-Source Solutions
Tags: devops, opensource, idp, productivity
Published: 2023-04-19 07:22:38


Internal Developer Platforms (IDPs) are revolutionizing the way developers work by automating repetitive tasks, standardizing workflows, and reducing the time spent on infrastructure management. This not only leads to increased productivity but also fosters a culture of collaboration, innovation, and growth within the team. In this article, we dive into the world of open-source solutions that help you elevate your development process, streamline workflows, and improve efficiency. In other words, these solutions put together can provide you with the benefits of an IDP.

While there are several [SaaS products](https://www.argonaut.dev/blog/internal-developer-platform-guide#commercially-available-internal-developer-platforms) like Argonaut, there might be org specific needs because of which bespoke tooling is needed. In such cases, open-source solutions can be leveraged to build your IDP. In this article, we explore the tools that can be used to build an IDP.

By leveraging open-source software to build your IDP, you benefit from a vast community of developers and documentation. However, in reality, there is no plug-and-play OSS IDP and some assembly is required. Some of the reasons are:

1. Unique requirements: Your organization’s requirements vastly differ from other organizations that use IDPs. Matching these features to feature would usually require building a custom solution or severely modifying an available OSS.
1. Open-source solutions rely on community support. Therefore, ensuring there’s an active community or the resources required to keep it up-to-date is important.
1. Integration challenges: It is unlikely to find open-source solutions that seamlessly integrate with your company's existing tools, technologies, and infrastructure. This could lead to additional time and effort spent on customizing and integrating the solutions into your IDP, which may not always be feasible. Some OSS tools also lack proper documentation and don’t offer support, which could make implementing them even more challenging and costly.

## Tooling for an Internal Developer Platform

The minimal requirements for an effective Internal Developer Platform (IDP) are an effective IaC solution, GitOps tooling, and a service catalog. There can be [several other tools](https://internaldeveloperplatform.org/platform-tooling/), such as monitoring, databases, CI tools, and security, as a part of your IDP. These together help your dev team automate repetitive tasks and standardize workflows.

Here we explore popular tools in each of these categories, along with alternatives.

### Defining Infrastructure as Code (IaC)

An Infrastructure as Code tool is an essential component of an IDP; it enables managing infra at scale and in a declarative way. It provides [several benefits](https://www.argonaut.dev/blog/infrastructure-as-code-tools#the-benefits-of-iac), like collaborating more effectively, managing complex cloud complexities, and improving consistency.

**Crossplane**

Crossplane is a framework for building cloud-native control planes without the need to write code. It provides the building blocks that enable you to provision, compose, and consume infrastructure with the Kubernetes API. Its ability to work as a control plane, interact with multiple services across vendors, and create [custom](https://docs.crossplane.io/v1.9/concepts/composition/) and [composite resources](https://docs.crossplane.io/v1.9/getting-started/provision-infrastructure/) make it suitable for IDPs.

**Setting up**

Set up Crossplane in your Kubernetes cluster ([Helm Install](https://docs.crossplane.io/v1.11/software/install/)) to manage and provision infrastructure resources. You can then define custom resources for the cloud services and infrastructure components you want to manage.

**Alternatives**

- Terraform is a powerful and flexible Infrastructure as Code (IaC) tool that can be used to build, manage, and scale internal developer platforms. Its extensibility, multi-cloud support, declarative configuration, Kubernetes-native architecture, and composability make it an ideal choice for organizations looking to streamline their infrastructure management processes and empower their development teams.
- Pulumi is a versatile IaC tool designed with cloud-native applications in mind. It allows developers to manage and provision infrastructure using familiar programming languages. Its versatility, multi-cloud support, and integration with Kubernetes make it an ideal solution for constructing internal developer platforms (IDPs). By leveraging Pulumi's language-specific SDKs and reusable components, teams can efficiently collaborate, standardize infrastructure configurations, and create customized resources tailored to their specific needs.
  > 💡 For more IaC tools, check out our [Top IaC tools](https://www.argonaut.dev/blog/infrastructure-as-code-tools) article. And here’s an [in-depth comparison](https://www.argonaut.dev/blog/comprehensive-iac-comparison) between Pulumi, Terraform, and AWS CloudFormation.

### Continuous Delivery (CD)

Continuous delivery tools are crucial in IDPs, enabling faster and more reliable software releases. By automating the deployment process, teams can minimize human errors, enhance collaboration, and maintain consistent quality throughout the development lifecycle. This ultimately accelerates innovation and increases overall efficiency within an organization.

**ArgoCD**

[ArgoCD](https://github.com/argoproj/argo-cd) is an open-source Continuous Delivery tool for automating application deployment in Kubernetes clusters. Utilizing the GitOps methodology, it monitors Git repositories to synchronize the desired state with the live environment, ensuring efficient and reliable application delivery.

**Setting up**

Set up a Git repository containing the desired state of your applications and infrastructure, including the custom resources [defined using Crossplane](https://docs.crossplane.io/v1.10/guides/argo-cd-crossplane/). ArgoCD can then be used to manage the deployment and configuration of your applications and infrastructure resources using GitOps methodology.

**Alternatives**

- [Flux](https://fluxcd.io/) is a popular GitOps alternative to ArgoCD. It helps you manage deployments, resources, and integrations with various Git providers and provides multi-tenancy support. It uses a cluster operator to start deployments in Kubernetes, so there's no need for another CD tool.
- [Gimlet](https://gimlet.io/) is a command line tool and a dashboard that packages a set of conventions and matching workflows to manage a GitOps developer platform effectively. It is built on top of Helm and Flux and provides you with a paved path, a set of best-practices, so you can focus on your task at hand.
  > 💡 [In-depth comparison between ArgoCD and Flux](https://www.argonaut.dev/blog/gitops-argocd-vs-flux).

### Service Catalogs

A service catalog, such as [backstage.io](http://backstage.io/), serves as a developer portal that offers a comprehensive view of various applications, services, and resources managed by engineering teams. It includes information about ownership, metadata, and essential service-related links. While it primarily benefits engineers and engineering managers, it does not directly address the need for quicker collaboration between Operations and engineering teams.

**Backstage**

[Backstage](https://backstage.io/) is a comprehensive platform designed to streamline the development process for product teams by centralizing software catalogs, infrastructure tooling, services, and documentation. Key features include the Backstage Software Catalog for managing various software types, Software Templates for creating new projects in alignment with organizational best practices, and TechDocs for seamless technical documentation. Additionally, Backstage offers an expanding ecosystem of open-source plugins for enhanced customization and functionality.

**Setting Up**

1. Install and [configure Backstage](https://www.youtube.com/watch?v=d2L6PWGfhXI) to provide a unified interface for your developers. Integrate Backstage with Crossplane and ArgoCD, so developers can easily discover, manage, and deploy applications and infrastructure resources through the Backstage portal.
2. Leverage [Backstage’s custom plugins](https://backstage.io/plugins/) and integrations to further tailor the platform to your organization's needs. This can include integrating with other tools, services, and APIs used in your development processes.

**Alternatives**

- [Port](https://www.getport.io/) can be used as an alternative to [Backstage.io](http://Backstage.io). It offers a way to build internal developer portals with context-rich software catalogs with maturity and quality
- [Compass](https://www.atlassian.com/software/compass) by Atlassian aids engineering teams in managing software sprawl by offering a single source of truth for distributed architecture. It enables understanding of built components, ownership, operational health, and applied policies. Compass provides insights into problem areas and changes over time, enhancing architecture and development velocity.
- [OpsLevel](https://www.opslevel.com/) is a uniform interface that lets developers manage everything from one place, including their tools, services, and systems.

Here we’ve used Crossplane for IaC and as an infrastructure control plane, ArgoCD for Continuous Delivery and GitOps best practices, and Backstage as a service catalog. This combination provides a powerful, customized IDP that simplifies the management of your cloud infrastructure while providing a seamless experience for your developers. [Here’s a video demo](https://www.youtube.com/watch?v=d2L6PWGfhXI) of one such setup.

The setup and its complexity may vary depending on your company’s size and the tools you are currently using. It will also require a significant time and development commitment to build and maintain the platform.

## Add-on capabilities for your IDP

While the combination of the above three tools provides a basic solution for IDP, the below tools can provide more add-on capabilities.

### Kubernetes control planes

1. [Shipa.io](http://Shipa.io) is a Kubernetes control plane that provides an abstraction level for deploying clusters while maintaining the same user experience. It requires YAML files for configuration and CI pipeline connections but lacks dynamic workload and environment creation. Shipa is suitable for governance purposes but may not be ideal for building an IDP.
1. [Kubermatic Kubernetes Platform](https://github.com/kubermatic/kubermatic) (KKP) is an open source project that helps centrally manage the global automation of thousands of Kubernetes clusters across multicloud, on-prem and edge with unparalleled density and resilience. KKP is compatible with all major cloud providers even supports custom infrastructure setups. By offering a user-friendly, self-service portal for developers and IT teams, KKP simplifies the complexities of managing cloud-native IT infrastructure and multi-cloud operations.

### Continuous Integrations (CI)

1. [GitLab](https://docs.gitlab.com/ee/ci/) is a versatile application that many organizations depend on for tasks like source code management, continuous integration, and deployment. It provides the flexibility of creating and running pipelines with multiple CI/CD stages. [Auto DevOps](https://docs.gitlab.com/ee/topics/autodevops/index.html) makes using GitLab a breeze.
1. [GitHub Actions](https://github.com/features/actions) provides a wide range of pre-built actions, integration with third-party tools, and the ability to create custom actions, making it a versatile solution for implementing CI in any project. With CI, developers can automatically build, test, and validate their code whenever changes are made, ensuring that it is always in a deployable state.

### Monitoring and observability

1. ELK stack: Elasticsearch, Logstash, Kibana is a popular open-source stack for log management. It is a powerful tool for collecting, storing, and analyzing log data. Kibana is quite useful for visualizing the data.
1. [Grafana stack](https://grafana.com/): Grafana, Loki, Tempo is an open-source stack to compose observability dashboards with everything from Prometheus and Graphite metrics to logs and application data. Grafana connects with a plethora of data sources, including Graphite, Prometheus, Influx DB, ElasticSearch, MySQL, and PostgreSQL. It helps to monitor and analyze data and track user and application behavior, including error type and frequency in pre-production and production environments. If you’re ok with the additional overhead, it’s a great way to monitor.

> 💡 For more observability tools, check [out this article](https://www.argonaut.dev/blog/observability-top-20). Here’s an in-depth comparison between [Datadog, New Relic, and Splunk](https://www.argonaut.dev/blog/observability-comparison-2022).

## Best Practices for Internal Developer Portal

Here are some best practices to consider while creating and maintaining your own Internal Developer platform (IDP).

1. Ensuring clear documentation - IDPs are meant to be easy to use and provide self-serve capabilities. Whether they are in-built or purchased solutions, having clear and concise documentation helps its users understand why and how to resolve their issues. A well-documented IDP would also make it easy for new team members to get up to speed and collaborate better.
1. Encouraging collaboration and communication among developers - Since IDPs are used by the entire team, understanding who uses what in an IDP is important. These controls can be set using RBAC in most IDPs.
1. Monitoring usage and performance to identify areas for improvement - By adding monitoring abilities, team leaders or Ops professionals can get a sense of cloud usage and associated costs. It is also essential to have observability over issues and logs of the various cloud services.
1. Regularly updating SDKs, libraries, and code samples - As a part of maintaining the IDP, maintaining the versions of the dependency libraries is important for the developers. This becomes even more important when the IDP is a combination of several tools and needs to meet security standards.
1. Integrating user feedback to enhance the overall developer experience - If you’re just starting out, getting feedback from your developer team is the best way to ensure that your IDP meets the organizational requirements.

IDPs are a way to highlight the golden paths for your team and include best practices when it comes to the development and deployment of both infra and app. Following these five best practices can help you get started in creating an effective and useable platform to elevate your dev team’s productivity.

## Conclusion

The significance of Internal Developer Platforms (IDPs) for developer teams is immense, as they offer a wide range of advantages that help streamline various aspects of the development process. By automating repetitive tasks and standardizing workflows, IDPs allow developers to focus on critical aspects of their work, leading to increased productivity and growth. Additionally, IDPs help reduce the time and effort spent on managing infrastructure, allowing teams to concentrate on innovation and delivering high-quality applications.

To create an effective IDP that caters to their specific needs, organizations should follow best practices and actively seek user feedback. By doing so, they can ensure that their IDP addresses their unique requirements and enhances the overall developer experience. In today's competitive and rapidly evolving technological landscape, embracing the power of IDPs is crucial for organizations aiming to stay ahead of the curve. Adopting a well-designed and efficient IDP can make all the difference in empowering development teams to excel and drive the organization's success.

---

[Argonaut](https://ship.argonaut.dev/) is a DevOps automation platform designed to streamline the management of both applications and infrastructure, enabling engineering teams to accelerate delivery. By incorporating GitOps best practices, Argonaut simplifies the process of creating and maintaining complex cloud setups. With support for Kubernetes application deployment on AWS and GCP, Argonaut offers a single pane to manage all your cloud apps, infra, integrations, and deployment workflows, catering to a wide range of organizational needs. [Try it out](https://ship.argonaut.dev/) for free today!