Software professionals are notoriously good at inventing cool names for common sense things. “Platform engineering” is a recent example, combining established principles with the innovation of cloud-native frameworks. At its core, platform engineering is about unifying software development by adopting a consistent, managed toolset, thereby setting the stage for enhanced team productivity. More mature industries have known this for decades already.
Understanding the Essence of Platform Engineering
Platform engineering is not merely a buzzword; it is a strategic methodology that fosters uniformity across software delivery pipelines and aligns closely with the practices of high-functioning engineering organizations. It marks the evolution from isolated efforts to a harmonized ecosystem, enhancing the developer experience and operational efficiency.
For instance, consider a tool like Postman. Initially developed as a side project to simplify API workflow in development and testing, Postman is an excellent tool for individual testers. However, when integrated into a Continuous Integration/Continuous Delivery (CI/CD) workflow, its capabilities are magnified, serving a broader purpose within a cloud platform. It allows for quick and straightforward testing of APIs, providing immediate feedback to the user.
Yet, as the team expands, the limitations of Postman become apparent. While it's excellent for manual testing and exploration, it falls short in collaborative environments where automated, repeatable, and scalable tests are required. As a software operation expands, elements like communication, sharing, and reuse become crucial, often overshadowing the performance of an individual.
The Shift from Solo Excellence to Collective Competence
An individual developer, or 'software artisan,' may initially outshine a collective with their custom toolkit. However, the demands of a scaling software enterprise soon prioritize the art of teamwork—communication, collaboration, and the strategic sharing of tools and processes.
Platform engineering emerges as a sophisticated response to these scaling dilemmas. It involves curating and managing a suite of applications and tools that serve as a communal foundation, enabling developers to innovate by integrating and building upon pre-existing modules.
A platform engineering team's role is to create an Internal Developer Platform (IDP) that transcends the limitations of traditional application development by incorporating frameworks like Kubernetes, fostering a self-service environment that empowers developers.
The artisan principle applies to testing, too: a competent, automation-capable exploratory tester is probably the most effective QA one can find. However, the challenge lies in scalability. Test automation often exists in silos, with individuals crafting solutions using tools like Selenium in their unique ways. The departure or promotion of these individuals often leads to a complete overhaul of existing systems by their successors, who may have a different approach to using the tools.
Shared Testing Platforms: Fostering Collaboration
A shared testing platform, on the other hand, would enable a productive collaboration among professional testers, business users, and developers. Such a platform, like Copado's Robot Testing, would not only facilitate the sharing and reuse of tests, data, and results but also promote transparency in quality assessment. With infrastructure-as-code (another cool name for a common-sense-thing), test environments can be efficiently deployed in the cloud, providing on-demand access and transparency to all stakeholders.
In the microservices era, the functionality of individual components, orchestrated by platforms like Docker and Kubernetes, must be scrutinized for cognitive load and user impact. Here, the Site Reliability Engineering (SRE) principles come into play, ensuring that systems are reliable and the operations teams are equipped with robust alerting tools like Puppet and monitoring solutions to maintain observability.
The Challenges of Platforming
Despite its apparent benefits, platforming is not without its challenges. It requires meticulous management and continuous evolution. Many proficient product companies struggle with developing a common platform for their products, making it unrealistic to expect IT departments to possess these capabilities inherently. This is why broad, high-level application platforms, such as Salesforce, and developer platforms, such as Git or Azure DevOps, are gaining ground. The same is happening with testing platforms but a bit slower.
Since applications are constructed by assembling components from a shared platform, the quality and robustness of this platform become paramount. Any issue with the platform can potentially affect all applications built upon it. Therefore, the platform and applications must evolve concurrently, with the platform always maintaining a lead to ensure stability.
Testing of the platform must be separated from the testing of the applications. The former tends to be more technical, focusing on unit testing, APIs, scalability, and performance, while the latter is more business-process-based, end-to-end testing by nature.
Shared Testing Platforms: The Vanguard of Collaboration
A shared testing platform is a testament to the collaborative spirit of platform engineering. Tools like Terraform enable infrastructure provisioning to be embedded within the CD pipelines, streamlining the process from development to deployment. Moreover, platforms like AWS amplify the capabilities of cloud computing, offering a wealth of services that dovetail with DevOps initiatives.
Upholding Quality Across the Platform Lifecycle
As organizations adopt cloud-native approaches, the robustness of their platform is paramount. Any issue within the platform could have widespread implications, which is why a clear delineation between platform testing and application testing is crucial. This separation allows for a targeted approach to scalability and performance, with the former focusing on the technical aspects like APIs and the latter on end-user functionality.
The Promise of Platform Engineering
While Platform Engineering promises enhanced developer productivity, realizing this potential is easier said than done. The platform must be managed meticulously, tested for stability, and should not become a bottleneck. This ambitious goal requires a concerted effort across DevOps teams, from the DevOps engineer to the product team. A successful implementation hinges on seamless orchestration, the efficiency of pipelines, and a commitment to continuous integration and continuous deployment. Effective testing practices and a toolkit oriented toward automation are prerequisites for successful Platform Engineering.