Modern software continues to grow more and more complex. Unlike monolithic software of yesterday, today’s software is more flexible, agile, performant, and capable of meeting larger and larger demands without requiring significant hardware scaling on the part of the company.
These modern application stacks are made possible thanks to virtual machines, containers, and the cloud. But along with those technologies come significant complexities. Given the significant challenges modern technology is able to overcome, those complexities are often considered an acceptable addition to the modern workflow. After all, when your business needs to be able to automatically scale deployments based on usage, you certainly aren’t going to achieve such a feat with an old-school, monolithic application.
This is especially true for companies looking to undergo major digital transformation, where there could be a ton of work to be taken care of.
For all of this, your company might need a more modern approach to software development. Such an approach is platform engineering.
What Is Platform Engineering?
Platform engineering is an approach of designing and developing workflows that enable self-service capabilities for programmers and engineers. With platform engineering in place, your teams will have access to an internal developer platform (IDP) that includes everything required to manage the software development lifecycle.
What’s most important about platform engineering is that not every team or company has the same development/deployment process. Because of that, every tool in the toolchain could vary, depending on your needs. With that in mind, your teams and team leaders will have to work together to build the exact toolchain and services required to make the workflow run smoothly, effectively, and efficiently.
One of the issues with modern-day development is that software engineers are now charged with handling multiple tasks using different tools. There’s Docker, Kubernetes, Helm, Terraform, Ansible, Puppet, container manifests, CI/CD tools, and a host of frameworks and libraries. Imagine having to keep all of those moving parts together such that every developer/designer has access to what they need when they need it.
With developers having to take on more tasks, they must be able to claim ownership of every step of the process. They need access to cluster environments, development tools, and automation services without having to go through different team leaders to get approval. Unlike the way things were handled previously, where you might have teams dedicated to specific tasks in the life cycle, developers and engineers are now tasked to handle everything.
If those developers and engineers don’t have access to everything they need, the job will not get done in a timely fashion. Those developers should be able to create and deploy their software end-to-end. However, when you start to consider everything, you realize such an approach can be rather problematic. Unless your business has a considerable budget to burn through, achieving a state of true DevOps can be an impossible task.
To avoid those challenges and vastly improve the process, self-service IDPs are one of the best ways to achieve true DevOps and to make this happen, you need to employ platform engineering to create the ideal IDP for your company/project. This IDP will include everything needed by your development teams and put together in a way that best matches the team’s prescribed workflow.
When you employ platform engineering, you greatly improve developer productivity (while also improving their overall experience) by working with reusable tools, automated operations, and self-service capabilities. Every component within the IDP should be highly configurable and flexible. With a solid IDP in place, your developers will have access to standardized, reliable tools that will not only simplify the process but make it easier to repeat. The ultimate goal is a frictionless environment that makes it possible for your teams to have everything they need when they need it.
Typical Tools Used in Platform Engineering
Every IDP will be different, depending on the needs of your development teams, business, and workflow. Here is a short list of tools you should consider adding to your IDP:
GitHub
GitHub is a web-based host for custom software development and version control. No development team is complete without such a tool. And with GitHub, your developers can either work from the command line or from a supported GUI. Either way, your teams will be all working from a single source of truth.
Harness
If you’re looking to add AI/ML into the mix, Harness is the tool you need. This piece of the IDP puzzle should easily integrate with and manage your tech stack with powerful orchestration features.
Kubernetes
If you’re looking to containerize your deployments, you’ll need an orchestration tool. With Kubernetes you gain automation of things like container configurations and scaling, container isolation for improved security, and automatic deployment across multiple nodes.
Terraform
Terraform is a crucial piece of the IDP stack as it is often considered the de facto Infrastructure as Code that makes it easier to provision and manage infrastructure. With Terraform, your teams will be able to manage your infrastructure across multiple platforms and even automate security based on centralized policies.
Ansible
Ansible is one of the most widely-used configuration management platforms on the market. With Ansible, you create playbooks for states that are distributed to machines to ensure everything is always in a predictable state. You can install software to an entire network of remote machines from a single system. Ansible can be used to manage bare metal, cloud-hosted instances, and virtual machines.
Portainer
If your teams are charged with managing multiple Kubernetes or Docker clusters on different nodes, you’re going to want the power of a user-friendly, web-based GUI in your IDP. The best tool for that job is Portainer, which makes it possible to manage every aspect of containerized deployment and management.
Docker/Docker Swarm
One thing that you’ll very quickly learn is that Docker and Docker Swarm make working with containers considerably easier than it is with Kubernetes. Although you might not get the advanced management tools, with the addition of Portainer, much of that issue is mitigated.
Drone
Drone is a tool for building and testing the automation side of your workflow. Drone integrates with GitHub, makes it easy to create custom plugins, and can work with just about anything that runs inside a Docker container. If you’re going to need automation, you’ll need Drone to test it.
It’ll Take Time
One of the first realities you must accept is that building your IDP will take time. Right out of the gate, you must figure out the pieces that can be cobbled together to best meet the needs of your workflow. If you’re uncertain where to begin, I would start with the deployment tool. Decide if you want to work with Kubernetes or Docker (or you will need both). Once you’ve decided on that, you can start working through the process and decide what software you’ll need for every step of the process. Although some of these tools can be had for free, you’ll also need to consider what kind of budget you have for your IDP and work from there. If you can’t afford every tool necessary, are there open-source equivalents that can be substituted to cut down the costs?
As well, you should consider your current workflow and what steps/phases tend to bottleneck the process. If you can pin down the problems, you can solve them when putting together your IDP.
With the right amount of upfront work, platform engineering can help your company create an IDP that will help make the development/deployment process more efficient, cost-effective, and reliable.