Platform engineering sounds expensive. Enterprise infrastructure, dedicated teams, custom internal tooling. But most of the small teams we work with don’t need any of that. They need a reliable way to get code into production without someone SSH-ing into a box and running git pull.
We worked with a 4-person dev team last year who were doing exactly that, deploying by SSH-ing into a server and running git pull. No tests in the pipeline, no staging environment, nothing automated. Three weeks later they had GitHub Actions running tests on every PR and deploying to staging automatically. Cost them nothing.
That’s what I mean by platform engineering on a budget. Not building a platform, just putting sensible foundations in place so your team can ship with confidence.
Start with CI/CD
I always start here. GitHub Actions is free for public repos and gives you 2,000 minutes per month on private ones. More than enough for most teams.
Get your CI/CD working with the basics:
- Run your linter on every PR
- Run tests on every commit
- Build artifacts only on merge to main
- Deploy to staging automatically, production on manual approval
Your workflow lives in a .github/workflows/deploy.yml file, version-controlled and reviewable. If you’re already on GitHub, you don’t need to spend anything on tooling.
For teams needing more capacity, GitLab CI is free up to 50GB of build logs per month.
Infrastructure as Code
The thing I recommend straight after CI/CD is getting your infrastructure into code. Stop making manual changes to cloud resources. Use Terraform or OpenTofu (the open-source fork). Both are free.
Write your VPC, security groups, databases, load balancers as code. When someone asks “how is this set up?”, the answer is in version control, not in someone’s head.
Start small, maybe just your database and compute. Infrastructure changes become code reviews, not guesswork. Need a staging environment? One command. State files live in S3 for pennies a month.
Observability Without the Bill
Grafana Cloud has a generous free tier: 50GB logs per month, unlimited metrics retention for 15 days, and proper dashboards. That covers most small applications.
If you’re already paying for AWS, CloudWatch is included. Not trendy, but it works. Set up alarms for the things that matter: high error rates, database connections, API latency.
Make sure your application logs in JSON. You can search by user ID, trace requests across services, and spot problems before customers do. Keep logs for 30 days. Most issues surface fast.
Make Developer Life Easier
A Makefile costs nothing. We set these up for almost every team we work with. Add targets for common operations: make test, make lint, make deploy-staging. New team members can read the Makefile and understand how the codebase works.
Write a good README. Tell developers how to set up locally, how to run tests, how to check logs in production. Every minute saved on “how do I even start?” is a minute spent on actual features.
When to Upgrade
Stay minimal until you hit real constraints:
- Team grows beyond 5-8 developers
- Multiple services and you’re drowning in deployment orchestration
- Compliance requirements force you to audit everything
- Build times exceed 20 minutes and you need parallelisation
Those are signals to invest. Add Kubernetes. Hire a platform engineer. But not before you need to.
Just Start
A clean CI/CD pipeline catches bugs before customers see them. Infrastructure as code prevents the “I don’t know why production broke” conversations. Observability lets you sleep at night.
GitHub Actions, Terraform, Grafana Cloud, and a decent README get you 80% of the way there. Start with one piece: get CI/CD sorted, then add infrastructure as code, then observability. Each step takes about a week.
Each step takes about a week for a small team. The hardest part is starting.