From Operating System to Internal Developer Platforms

From Operating System to Internal Developer Platforms

Introduction

Imagine a world where deploying a web application meant manually configuring servers and wrestling with complex infrastructure, taking care of information security and scalability. Significant progress has been made. Let’s take a journey through the history of the term "platform" in software engineering, from its roots in operating systems to the modern era of cloud-native platforms and Internal Developer Platforms (IDPs).

Initially, a platform was primarily defined by the hardware and operating system (e.g., Windows, Linux, Symbian, Palm OS, z/OS). Today, however, a platform encompasses a much broader set of tools, services, and workflows designed to empower developers.

The concept of a "platform" in computing predates the year 2000, even if it wasn't always explicitly defined as such. Early platforms often centered around mainframe computers, which provided not only the hardware but also complex operating systems like MVS and accompanying middleware. These mainframes offered a complete environment for developing and running applications, including proprietary languages and databases. The rise of personal computers in the 1980s and 90s introduced new platforms like DOS, Windows, and Unix, each with its own ecosystem of hardware, operating systems, and applications. These platforms began to diversify the computing landscape, moving away from the centralized mainframe model. While the term "platform" wasn't as widely used as it is today, the fundamental idea of a foundation upon which software is built was already present. Early examples like the Apple II with its specific hardware and operating system, or the various Unix flavors with their standardized APIs (dynamic link library, shared objects and archive libraries), all contributed to the evolving understanding of what constituted a computing platform.

 

The Early Days (2000-2010)

  • Rise of Web Applications: The focus shifted towards web applications, with platforms like Java and .NET providing frameworks for building and deploying online services.
  • The adoption of Open-source Software: With Linux becoming a dominant operating system, the increasing use of open-source software in production broadened the definition of “platform” beyond just the OS. MySQL and PostgreSQL emerged as relational database platforms, Apache HTTP Server, Nginx and HAProxy became popular as web servers capable of handling over 10K connections in commodity hardware. Software stacks like LAMP were viewed as standard software development and deployment platforms.
  • Enterprise Architecture (EA) began to gain traction as a discipline for managing increasingly complex IT landscapes.  Software platforms, while not yet as clearly defined as they are today, were emerging as key components of EA, often centered around monolithic applications and application servers.  Message-Oriented Middleware (MOM), a technology already established, played a vital role in integrating these platforms within the broader enterprise.  MOM's ability to decouple systems and enable asynchronous communication was crucial for connecting applications, often running on different platforms and technologies. While the "platform" concept was still evolving, MOM was instrumental in enabling the integration and interoperability that would eventually pave the way for the more modern platform thinking, bridging the gap between individual systems and the emerging enterprise architecture vision.
  • SaaS companies started to emerge due to a confluence of factors: improved internet infrastructure, decreasing hardware and software costs, the success of SaaS pioneers like Salesforce, the post dot-com bubble search for cost-effective solutions, and an increasing organizational focus on business agility. The growth of SaaS created a new challenge: integrating disparate SaaS applications hindered the realization of a unified 'platform' vision. Each SaaS offering operated in its own silo, often with proprietary APIs and data formats, making interoperability complex and requiring custom integrations. To address these challenges, the concept of a "platform" needed to evolve.  Instead of isolated applications, a true SaaS platform would offer open APIs and standardized interfaces. This reliance on third-party services also brought the issue of vendor lock-in to the forefront. When selecting SaaS partners, organizations needed to strategically balance the desire for rapid time-to-value with the potential risk of vendor lock-in.

Platform as a Service (PaaS) (2010-2015)

  • Cloud Revolution: The rise of cloud computing led to the development of Platform as a Service (PaaS). Providers like AWS (Elastic Beanstalk), Heroku, and Google App Engine offered managed environments for deploying and scaling applications.
  • Developer Productivity: PaaS aimed to abstract away infrastructure complexities, allowing developers to focus on writing code rather than managing servers. The adoption of a DevOps culture was on the rise alongside SRE principles and practices, which emphasized collaboration, automation, and shared ownership, further influencing the evolution of platform thinking.
  • The concept of microservices began to gain traction, with applications being broken down into smaller, independent services. This required more sophisticated platforms to manage and orchestrate these services.
  • Serverless computing represents a significant evolution in the platform landscape, taking the PaaS model a step further by abstracting away not only infrastructure management but also server provisioning and scaling. In a serverless environment, developers focus solely on writing code, while the platform automatically handles the underlying infrastructure. While serverless can be considered a type of PaaS, it distinguishes itself through its granular scaling and event-driven nature, enabling developers to build highly scalable and cost-effective applications.
  • Kubernetes 1.0: Announced in 2014 and released in 2015 by Google, focused mainly to automate the deployment, scaling and management of containerized applications. K8S shifted the platform paradigm by abstracting away the underlying infrastructure complexities, allowing developers to focus on application logic rather than server management. This decoupling of application and infrastructure, combined with its ability to orchestrate containers across a cluster of machines, enabled a new level of portability, scalability, and resilience for applications, fostering the rise of microservices architectures and cloud-native development. Essentially, Kubernetes transformed the platform from a static environment to a dynamic and programmable one. This shift empowered developers with self-service capabilities and paved the way for modern platform engineering practices. An important factor for its success and adoption is that Google offered K8S as the seed technology for the formation of the Cloud Native Computing Foundation (CNCF).

 

The Rise of Internal Platforms (2015-2020)

  • Cloud-Native: As organizations embraced cloud-native technologies like containers (Docker) and orchestration platforms (Kubernetes), the need for internal platforms became apparent.
  • Developer Self-Service: Companies like Google, Facebook, and Netflix built internal platforms to empower developers with self-service capabilities for deploying, monitoring, and managing their applications.
  • Platform as a Product: The concept of treating internal platforms as products, with a focus on user experience and developer satisfaction, emerged.

Platform Engineering (2020-Present)

  • Formalizing the Discipline: Platform Engineering emerged as a formal discipline, focusing on building and maintaining internal developer platforms.
  • Toolchains and Workflows: Platform engineers design and build toolchains and workflows to automate software delivery and reduce developer toil.
  • Cognitive Load: A key goal of Platform Engineering is to reduce the cognitive load on developers, allowing them to focus on building features rather than managing infrastructure.

 

Key Concepts in Platform Engineering

  • Internal Developer Platform (IDP), a self-service platform that provides developers with the tools and services they need to build, deploy, and manage applications. A typical IDP might include a self-service portal for provisioning cloud resources, a centralized logging and monitoring dashboard, and automated security scanning tools.
  • Golden Path, a set of pre-defined, opinionated workflows and tools that guide developers towards best practices and ensure consistency. The Golden Path might include pre-configured CI/CD pipelines, automated testing frameworks, and standardized deployment scripts, allowing developers to quickly and easily release their code while adhering to best practices.
  • Abstraction involves hiding the complexity of the underlying infrastructure from developers, providing them with a simplified interface while still offering the necessary level of control and visibility for tasks like debugging, performance tuning, and advanced configurations.

 

Benefits of Platform Engineering for companies

  • Increased Developer Productivity: By automating tasks and providing self-service capabilities, Platform Engineering frees up developers to focus on building features and delivering value.
  • Faster Time to Market: Streamlined workflows and automated deployments enable faster release cycles and quicker delivery of new features.
  • Improved Operational Efficiency: Standardized tools and processes reduce operational overhead and improve the reliability and scalability of SaaS platforms.
  • Enhanced Security and Compliance: Platform Engineering can help enforce security policies and ensure compliance with industry regulations.

 

The role of Platform Teams

Platform Engineering, as a discipline, is fundamentally about building and maintaining internal developer platforms (IDPs). Dedicated Platform Teams, composed of individuals with diverse technical skills and a shared focus on developer enablement, perform this crucial work. These teams act as internal product teams, treating the IDP as a product they are responsible for designing, building, and iterating upon. The core responsibility of a Platform Team is to create and operate the IDP, providing a curated set of tools, services, and workflows that streamline the software development lifecycle. This involves selecting and integrating various technologies, automating key processes, and ensuring the platform is secure, reliable, and scalable.  Platform Teams are also responsible for defining and maintaining the "Golden Path", guiding developers towards best practices and ensuring consistency across projects, while also allowing for flexibility and innovation. They act as internal consultants, providing support and training to development teams on how to effectively utilize the platform.

Furthermore, Platform Teams play a critical role in gathering feedback from developers, continuously improving the platform based on their needs and experiences. Platform Team members require a multifaceted skillset. They need a strong understanding of cloud-native technologies like Kubernetes, Docker, and various CI/CD tools. Expertise in infrastructure as code (IaC), automation, and monitoring is essential. A solid grasp of security best practices and compliance requirements is also crucial. Beyond technical skills, Platform Team members need strong communication and collaboration abilities, as they work closely with development teams. A product-centric mindset, with a focus on user experience and developer satisfaction, is paramount for building effective and widely adopted internal platforms.

Platform Teams also play a key role in organizational governance by addressing critical questions such as:

·      Who decides which technologies are incorporated into the platform, ensuring alignment with organizational strategy and developer needs?

·      How are standards and best practices enforced to maintain consistency and quality across applications?

·      How is security managed, ensuring compliance with regulations and protecting sensitive data?

This includes establishing clear processes for vulnerability management, access control, and data privacy. Furthermore, platform governance must define how the platform evolves over time, balancing innovation with stability. Without clear governance, platforms can become inconsistent and insecure.

Essentially, Platform Teams act as the bridge between infrastructure and development, empowering engineers to focus on delivering business value.

Conclusion

The concept of "Platform" in software engineering has evolved significantly since 2000. From its early association with operating systems, it has transformed into a sophisticated discipline focused on empowering developers and streamlining software delivery.

From the rise of SaaS and PaaS, which introduced both unprecedented developer productivity and the challenge of vendor lock-in, to the emergence of platform engineering and internal developer platforms, the evolution continues. Effective platform governance is crucial for success.

In today's software-driven world[1][2], Platform Engineering is essential for maintaining a competitive edge. It enables companies to build and maintain scalable, reliable, and secure software necessary to support rapid growth and innovation.


[1] Why software is eating the world

[2] Every business is going to be a software business 



Alan Baldo, thank you for sharing this article. It is great to see how some concepts evolves with the technology evolution and how fast those evolutions are.

To view or add a comment, sign in

More articles by Alan Baldo

Others also viewed

Explore content categories