The internal team working paradigms of the software industry are constantly changing. From Agile to Waterfall and everything in between, project management paradigms are always evolving to fit the demands of development teams, industry trends, and investment capital.
Platform engineering is a prime example of such change being driven by the needs of development teams, rather than outside pressures. Luckily, you don’t need an online engineering masters to understand platform engineering - but you might need one to get involved!
Software development can be incredibly complex. Building advanced software systems at scale often requires different parts of application architecture to interoperate with a vast array of microservices, hardware platforms, operating systems, development frameworks, programming languages - the list goes on.
The inherently byzantine nature of developing software for use at scale demands either individuals of infinite memory and intelligence (which we’re working on, not quite there yet though), or a system for tracking and managing all of the requisite interdependencies and requirements of different parts of these often-Kafkaesque systems.
That’s where platform engineering comes in.
Customers aren’t the only ones with needs. Software developers have them too! Platform engineering is a structural management concept aimed at ensuring that the needs of all stakeholders are met.
The concept of platform engineers emerged from the DevOps paradigm. DevOps is a loose conceptual term used to describe the interface between the two halves of any software company: software development, the side of the company that creates and deploys news software, and IT operations, the side that builds and maintains the infrastructure that the software runs on.
While DevOps generally refers to an organisational or managerial approach to integrating these two halves of the business, and sometimes to specialised departments and roles that manage this process, platform engineering is the technical implementation of this integration that focuses on the needs of developers.
Somewhat in opposition to the traditional implementation of DevOps, platform engineering provides developers the tools to implement their own solutions, rather than relying on a more granular division of labour in the development process, which tends to overburden senior developers who have a better understanding of infrastructure and the way internal services work together.
Product and service teams, as the developers tasked with the majority of greenfield development, maintenance, and integration of software applications, are typically the primary beneficiaries of platform engineering.
Platform teams are tasked with building or acquiring resources for these teams, and ensuring that they are functional and accessible, thereby reducing the cognitive load on developers. These resources often include, but are not limited to, development environment support, dependency management, telemetry, internal collaboration tools, networking and infrastructure support, and more.
The heart of any platform is the IDP, or internal developer platform. This is an internal portal or dashboard that acts as a central hub for all developer needs related to their projects.
Developers can use the IDP to access tools, maintain dependencies, communicate with other developers working on related projects, and interact with the platform development team.
Some IDPs contain Request and Approval workflows to help streamline and document the process of requesting and provisioning additional developer support.
CLI tools are minimalist applications that run on the command line - that’s the black box, text-only system used by IT and software professionals to interact directly with the computer’s internal systems without the help of a graphical user interface.
CLI tools are often developed internally or obtained from online code repositories like GitHub or Stack Overflow. CLI tools are also typically geared towards helping developers create, analyse, and test their applications. They might also be used for helping developers collect, organise, or analyse data that their applications work with. Platform engineers will often build or acquire these tools for development teams as required.
Ironically, software engineering is one of the industries that is being automated the fastest! For better or worse, AI tools still aren’t good enough to replace talented coders, but they can nonetheless be quite useful. Some AI tools, like GitHub Copilot, Devin, and Codium, integrate directly with the text editors or development environments. These AIs can analyse existing code, help write new code or even just auto-complete lines of code. These tools take in the code that their developer is working on, and use it as context to predict what code they might be typing - or need to write next.
While they can be quite useful, the limitations in context capacity and ability to reason in the abstract of most AI tools normally prevent them from writing whole applications or even individual services; they can nonetheless increase the productivity of software developers substantially. It often falls to platform engineers to determine which of these tools might fulfil the needs of the developers they are responsible for and to ensure they are implemented properly.
All services, functions, and programs within a project, as well as many of the tools used to build and manage the project, will all have various dependencies that will need to be managed for them to work properly. Dependencies are other pieces of software that an application or tool requires to work properly. The IDP is usually used as a hub for maintaining these dependencies, and the Platform team is responsible for ensuring all dependencies are up to date and functioning as intended.