Kokil Thapa - Professional Web Developer in Nepal
Freelancer Web Developer in Nepal with 15+ Years of Experience

Kokil Thapa is an experienced full-stack web developer focused on building fast, secure, and scalable web applications. He helps businesses and individuals create SEO-friendly, user-focused digital platforms designed for long-term growth.

Platform Engineering: Build an Internal Developer Platform

By Kokil Thapa | Last reviewed: September 2026

Platform Engineering: Build an Internal Developer Platform when your team spends more time wiring servers than shipping features. Copy-paste deploy scripts, one-off staging URLs, and “ask DevOps” tickets do not scale past a handful of repositories. An internal developer platform (IDP) turns those repeated chores into self-service workflows with guardrails. This guide walks through what to build first, which tools fit a PHP and Laravel stack, and how to roll out an IDP without a dedicated platform team of twenty.

What is platform engineering and how is it different from DevOps?

Platform engineering is the practice of building and maintaining an internal product for developers. That product is the IDP: templates, pipelines, secrets, environments, and documentation packaged as self-service capabilities. DevOps focuses on culture, collaboration, and delivery speed. Platform engineering productises the outcome of that culture so every squad gets the same reliable path to production.

Think of DevOps as the goal and the IDP as the paved road. Without the road, each team hacks its own trail. With it, they choose from approved routes that already include security, logging, and rollback. On sister legal-tech sites I maintain with Deployer 7 and GitLab CI, the “platform” is modest: shared deploy recipes, environment conventions, and a checklist new repos inherit on day one. That is still platform engineering—just right-sized.

Internal Developer Platform LayersApplication TeamsLaravel, WordPress, APIsIDP Control PlanePortal, templates, policy, metricsInfrastructure PlaneServers, DB, Redis, DNS, TLSGolden paths connect all three layers
Platform engineering stacks application teams on a self-service IDP that sits above shared infrastructure.

The CNCF platform engineering maturity model describes progression from ad hoc scripts to measured platform products. You do not need stage five on day one. Stage two—documented golden paths with automated provisioning—already removes most Friday-night deploy panic.

Platform team vs embedded DevOps

A platform team builds capabilities other teams consume. Embedded DevOps engineers sit inside product squads. Small agencies often blend both: one senior engineer owns the deploy pipeline while developers stay in feature work. The rule stays the same: if two teams repeat a task twice, platformise it.

How do you build an internal developer platform step by step?

Start with developer interviews, not tooling. Ask where delivery slows down: environment drift, missing staging data, flaky tests, or opaque production logs. Rank pain by frequency and blast radius. Your first golden path should fix the highest-frequency bottleneck for the majority of repos.

  1. Inventory services and environments. List every app, its runtime (PHP 8.3+, Node 26 LTS for assets), database, queue worker, and cron entry. Note who deploys today and how long it takes.
  2. Pick one reference application. Choose a representative Laravel 13 or Laravel 12 app—not your messiest legacy codebase. Hard problems come later.
  3. Encode the golden path. Standardise repo layout, branch strategy, CI stages, and deploy hooks. Commit working examples.
  4. Automate environment creation. Script staging from a template: database, .env secrets, DNS subdomain, TLS cert.
  5. Publish through a portal. Even a markdown catalog plus links beats tribal knowledge. Graduate to Backstage when catalog size grows.
  6. Measure and iterate. Track lead time, deploy frequency, change failure rate, and mean time to restore. Cut steps that do not move those numbers.

For PHP shops, the golden path often mirrors what already works in production. Here is a minimal GitLab CI skeleton for a Laravel app using Composer 2.10, committed Vite 8.x assets, and Deployer 7:

# .gitlab-ci.yml — golden path baseline
stages: [lint, test, build, deploy]

lint:
  image: php:8.3-cli
  script:
    - composer install --no-interaction
    - vendor/bin/pint --test

test:
  image: php:8.3-cli
  services: [mysql:8.4]
  script:
    - cp .env.testing .env
    - php artisan migrate --force
    - vendor/bin/phpunit

deploy_staging:
  stage: deploy
  script:
    - dep deploy staging -vvv
  environment:
    name: staging
    url: https://staging.example.com

deploy_production:
  stage: deploy
  when: manual
  script:
    - dep deploy production -vvv
  environment:
    name: production
    url: https://example.com

Pair that with a shared deploy.php every new repo imports. On production Laravel applications I have shipped, symlinked releases with shared storage/ and .env cut downtime to seconds. That pattern belongs in the platform, not in each developer’s memory.

Golden Path Deploy FlowGit PushCI PipelineStagingProductionPlatform GuardrailsLint, tests, security scan, manual prod gateSecrets from vault, opcache reload, rollbackHealth check before traffic swap
A golden path ties every git push to the same CI stages, staging gate, and guarded production promotion.

Environment templates that actually get used

Developers ignore platforms that require fifteen form fields. Offer three presets: minimal (web + MySQL 8.4), standard (web + queue + Redis 8.10), and enterprise (HA database, read replica, scheduled backups). Map each preset to Terraform modules, Ansible roles, or—for a single Ubuntu 24 server—a bash script checked into a platform repo.

#!/usr/bin/env bash
# platform/scripts/create-staging.sh
APP="$1"
DOMAIN="${APP}.staging.example.com"
sudo mysql -e "CREATE DATABASE IF NOT EXISTS ${APP}_staging;"
sudo certbot certonly --nginx -d "${DOMAIN}" --non-interactive --agree-tos -m ops@example.com
dep deploy:unlock staging
dep deploy staging

Store generated URLs and credentials in your portal catalog. When onboarding a booking app like Adventure Third Pole Trek, the staging link should appear before the developer asks for it.

What tools should you use for an internal developer platform in 2026?

Tool choice follows constraints, not hype. A five-person Nepal agency running Laravel on a shared EC2 box needs GitLab CI, Deployer, and a markdown service catalog—not Kubernetes on day one. A product company shipping twenty microservices may need EKS, Argo CD, and Crossplane. Match the platform to your actual topology.

CapabilitySmall team (1–8 devs)Mid-size (8–40 devs)What it solves
Developer portalMarkdown catalog in repoBackstageDiscover services, APIs, runbooks
CI/CDGitLab CI or GitHub ActionsGitLab + shared runnersRepeatable build and deploy
DeployDeployer 7, EnvoyArgo CD, FluxZero-downtime releases
Infra as codeShell + AnsibleTerraform, OpenTofuReproducible environments
SecretsGitLab masked varsHashiCorp Vault, SOPSNo secrets in chat logs
ObservabilityLaravel Log + Uptime KumaGrafana, Prometheus, LokiMTTR and SLO tracking

For enterprise application development, add policy checks in CI: dependency audit, container scan, and PHPStan level six before merge. Those gates belong in the platform layer so individual teams cannot skip them under deadline pressure.

Service catalog and software templates

A catalog entry is more than a repo link. Document owner, on-call rotation, SLAs, upstream dependencies, and the exact command to deploy. Software templates—Cookiecutter, Yeoman, or Laravel’s own starter kits—scaffold folder structure, CI file, Dockerfile, and health endpoint. New services should reach staging in under an hour.

Validate pipeline YAML with a JSON or YAML formatter in local pre-commit hooks. Small quality gates prevent broken configs from blocking everyone else’s pipeline.

IDP Build Strategy MatrixBuild CustomFull controlHigh upkeepBuy SaaSFast startVendor lock-inAssemble OSSBest fit PHP shopsModerate effortRecommended for Laravel agenciesGitLab CI + Deployer + catalog docsAdd Backstage when services exceed ~12
Most PHP and Laravel teams assemble open-source platform pieces rather than building or buying a monolithic IDP.

How do you roll out platform engineering without blocking feature work?

Treat the IDP like any internal product. Publish a roadmap. Run office hours. Never mandate a migration during a client deadline week. Pilot with one willing team, collect feedback, fix rough edges, then expand.

Platform work should reduce queue depth for Linux system administration tickets. If staging requests still land in Slack after three months, the self-service UX failed—not the developers.

Version and runtime standards

Pin supported runtimes in platform docs: PHP 8.3 minimum for Laravel 13, PHP 8.2 for Laravel 12, MySQL 8.4 or 9.7, Redis 8.10 for cache and queues. Document upgrade windows so product teams know when PHP 8.5 becomes the default on shared hosts. Consistent runtimes eliminate “works on my PHP” incidents during support and maintenance cycles.

  • Opt-in first: New repos use the golden path; legacy repos migrate on touch.
  • Thin wrapper: Expose platform deploy staging instead of raw Deployer flags.
  • Docs beside code: Keep runbooks in the same repo as the automation script.
  • Champion network: One developer per squad feeds platform backlog priorities.

Connect CI to build pipeline automation best practices you already follow. Reuse artifact promotion patterns from reproducible builds so staging and production run identical compiled assets.

What metrics prove your internal developer platform is working?

Executives ask for ROI. Developers ask for fewer blockers. Both can be measured with DORA metrics plus platform-specific signals.

Lead time for changes should drop once self-service staging exists. Deployment frequency should rise without a matching spike in incidents. Change failure rate tracks bad deploys; golden paths with automated rollback keep this flat. Mean time to restore improves when logs, dashboards, and rollback are one click from the portal.

Add platform KPIs: time to first staging deploy for a new service, percentage of repos on the golden path, and developer satisfaction surveys every quarter. If satisfaction is flat while metrics improve, your portal UX probably needs work.

Platform Metrics Feedback LoopDORA MetricsPlatform BacklogGolden Path UpdatesDeveloperFeedbackMeasure monthly, ship platform fixes weekly
Platform engineering succeeds when DORA metrics and developer feedback continuously refine golden paths.

What mistakes break internal developer platforms?

The fastest way to kill adoption is building for a hypothetical microservices future while every repo is still a monolithic Laravel app. Another common failure: the platform team becomes a gatekeeper. Self-service means developers can act without approval for safe operations. Production still gets a manual gate—that is a guardrail, not a ticket queue.

Over-customising Backstage before you have ten catalog entries wastes weeks. Under-investing in secrets management leaks API keys into CI logs. Skipping rollback testing guarantees a bad Friday. I have seen deploy pipelines succeed while cron still pointed at an old release path; include post-deploy smoke tests that hit scheduler and queue workers, not only HTTP 200 on the homepage.

Security and compliance without friction

Embed security in the path: dependabot or composer audit in CI, least-privilege deploy keys, separate staging and production secrets, and audit logs for production promotions. For payment-integrated apps, align checks with PCI DSS essentials for developers. Platforms that bolt security on after launch always lose to those that bake it into templates.

Document incident steps in the portal: how to roll back, rotate keys, and notify stakeholders. When Notary Kathmandu and related sister sites share a pipeline, one runbook covers all—a concrete win from centralised platform docs.

Key Takeaways

  • Platform Engineering: Build an Internal Developer Platform by productising golden paths—not by renaming your DevOps team.
  • Start with one reference Laravel or PHP app, shared CI and deploy recipes, and a written service catalog before buying heavy portal software.
  • Offer self-service environment presets; three tiers beat fifteen custom form fields every time.
  • Track DORA metrics plus time-to-first-staging to prove the IDP earns its maintenance cost.
  • Keep production promotion manual or policy-gated; automate everything up to that line.
  • Iterate from developer feedback—platforms that gatekeep without listening get bypassed within a sprint.

People Also Ask

Do you need Kubernetes to build an internal developer platform?

No. Many productive IDPs run on bare metal or VMs with GitLab CI, Deployer, and Ansible. Kubernetes helps when you operate dozens of independently scaled services. A Laravel agency with shared EC2 hosts should platformise scripts and pipelines first, then evaluate containers when replication pain justifies the ops cost.

How large should a platform team be?

A common ratio is one platform engineer per eight to fifteen product developers, but small shops start with zero dedicated headcount. A senior full-stack engineer spending twenty percent of time on templates and CI often suffices until you pass roughly twelve active repositories or multiple runtime stacks.

What is the difference between an IDP and a developer portal?

The developer portal is the UI and catalog layer. The IDP includes the portal plus underlying APIs, templates, pipelines, and policies that actually provision and deploy. Backstage alone is not an IDP until it triggers real workflows behind the buttons.

How long does it take to build a minimal internal developer platform?

A useful v1—shared CI template, deploy script, staging automation, and markdown catalog—often lands in two to four weeks for teams already running manual but working deploys. Full portal integration, policy engines, and multi-cloud abstraction take months and should follow proven demand, not upfront speculation.

Ship faster with a platform your team will actually use

Platform Engineering: Build an Internal Developer Platform around real developer pain, not vendor slide decks. Document one golden path, automate staging, measure lead time, and expand from there. Whether you run five Laravel client sites or a growing product suite, the IDP is the internal product that pays rent every sprint.

Need help designing CI/CD, deploy automation, or a right-sized IDP for your stack? See custom software development services, browse the portfolio for production examples, or contact us to talk through your current pipeline and where a golden path would save the most time.

Frequently Asked Questions

Platform engineering is building and maintaining an internal product for developers—templates, pipelines, secrets, environments, and docs packaged as self-service capabilities other teams consume without opening infra tickets.

DevOps focuses on culture, collaboration, and delivery speed. Platform engineering productises that outcome into an internal developer platform with paved golden paths. Think of DevOps as the goal and the IDP as the road every squad uses to reach production with security, logging, and rollback already built in. Without the road, each team hacks its own trail. On sister legal-tech sites I maintain with Deployer 7 and GitLab CI, shared deploy recipes and environment conventions are still platform engineering—just right-sized for the team.

An IDP turns repeated delivery chores into self-service workflows with guardrails. It includes standard repo templates, CI/CD pipelines, secrets handling, environment provisioning, observability hooks, and documentation exposed through a developer portal and APIs. Product teams deploy safely without copy-paste scripts, one-off staging URLs, or ask-DevOps tickets. For PHP shops, a minimal IDP might be a shared GitLab CI skeleton, Deployer 7 deploy recipes, staging automation scripts, and a markdown service catalog—enough to remove most Friday-night deploy panic without a twenty-person platform org.

No. Many productive IDPs run on bare metal or VMs with GitLab CI, Deployer, and Ansible. Kubernetes helps when you operate dozens of independently scaled services—not when five Laravel apps share one EC2 host.

Start with developer interviews, not tooling—rank pain by frequency and blast radius. Inventory every app, runtime, database, queue worker, and cron entry. Pick one reference Laravel 13 or Laravel 12 app, not your messiest legacy codebase. Encode the golden path: standard repo layout, branch strategy, CI stages, and deploy hooks with working examples committed to a platform repo. Automate staging from a template covering database, secrets, DNS subdomain, and TLS. Publish capabilities through a portal—even markdown plus links beats tribal knowledge. Measure lead time, deploy frequency, change failure rate, and mean time to restore, then cut steps that do not move those numbers.

Tool choice follows constraints, not hype. A five-person agency on shared EC2 needs GitLab CI, Deployer 7, and a markdown catalog—not Kubernetes on day one. Small teams typically use GitLab CI or GitHub Actions for CI/CD, Deployer 7 or Envoy for zero-downtime releases, GitLab masked variables for secrets, and Laravel Log plus Uptime Kuma for observability. Mid-size teams graduate to Backstage for the developer portal, Argo CD or Flux for deploys, Terraform or OpenTofu for infra, and Grafana, Prometheus, and Loki for SLO tracking. Add PHPStan level six, dependency audit, and container scans in CI so teams cannot skip policy checks under deadline pressure.

The developer portal is the UI and catalog layer. The IDP includes the portal plus underlying APIs, templates, pipelines, and policies that actually provision and deploy workloads.

A common ratio is one platform engineer per eight to fifteen product developers, but small shops often start with zero dedicated headcount. A senior full-stack engineer spending roughly twenty percent of time on templates and CI frequently suffices until you pass about twelve active repositories or multiple runtime stacks. Many agencies blend platform and embedded DevOps roles: one senior engineer owns the deploy pipeline while developers stay in feature work. The rule stays the same regardless of headcount—if two teams repeat a task twice, platformise it rather than letting each squad maintain its own variant.

A useful v1—shared CI template, deploy script, staging automation, and markdown catalog—often lands in two to four weeks for teams already running manual but working deploys. Full portal integration, policy engines, and multi-cloud abstraction take months and should follow proven demand, not upfront speculation. You do not need CNCF maturity model stage five on day one. Stage two with documented golden paths and automated provisioning already removes most delivery bottlenecks. Ship the path that fixes your highest-frequency pain first, then expand the catalog and portal as repo count grows.

A golden path is the standard route from git push to production that every approved repo follows. It ties together repo layout, branch strategy, CI stages—lint, test, build, deploy—and guarded production promotion through the same staging gate. For Laravel apps, that often means Composer 2.10 install, Pint linting, PHPUnit against MySQL 8.4, committed Vite 8.x assets, and Deployer 7 symlinked releases with shared storage and .env. New services inherit a shared deploy.php import instead of reinventing deploy hooks. Golden paths include security, logging, and rollback by default so product teams choose approved routes rather than hacking individual trails.

Developers ignore platforms requiring fifteen form fields. Offer three presets mapped to Terraform modules, Ansible roles, or a bash script on a single Ubuntu 24 server. Minimal covers web plus MySQL 8.4. Standard adds a queue worker and Redis 8.10. Enterprise adds HA database, read replica, and scheduled backups. A create-staging script can provision the database, issue a TLS cert via Certbot, unlock any stale Deployer lock, and deploy staging in one command. Store generated URLs and credentials in the portal catalog so a new booking app gets its staging link before anyone asks in Slack.

Treat the IDP like any internal product with a published roadmap and office hours. Never mandate migration during a client deadline week. Pilot with one willing team, collect feedback, fix rough edges, then expand. Use opt-in first: new repos take the golden path while legacy repos migrate on touch. Expose thin wrappers like platform deploy staging instead of raw Deployer flags. Keep runbooks beside automation scripts in the same repo. Build a champion network—one developer per squad feeding platform backlog priorities. Platform work should reduce Linux administration ticket queue depth. If staging requests still land in Slack after three months, the self-service UX failed, not the developers.

Track DORA metrics: lead time for changes, deployment frequency, change failure rate, and mean time to restore. Lead time should drop once self-service staging exists. Deployment frequency should rise without a matching incident spike. Change failure rate stays flat when golden paths include automated rollback. Add platform KPIs: time to first staging deploy for a new service, percentage of repos on the golden path, and quarterly developer satisfaction surveys. If satisfaction is flat while DORA numbers improve, portal UX probably needs work. Executives get ROI proof; developers get fewer blockers—both signals should refine golden paths continuously.

Building for a hypothetical microservices future while every repo is still a monolithic Laravel app kills adoption fast. Another failure mode: the platform team becomes a gatekeeper—self-service means safe operations need no approval ticket, while production promotion stays a deliberate guardrail. Over-customising Backstage before ten catalog entries wastes weeks. Under-investing in secrets management leaks API keys into CI logs. Skipping rollback testing guarantees a bad Friday. Deploy pipelines can succeed while cron still points at an old release path—include post-deploy smoke tests hitting scheduler and queue workers, not only HTTP 200 on the homepage.

Embed security in the golden path rather than bolting it on after launch. Run dependabot or composer audit in CI, enforce least-privilege deploy keys, keep staging and production secrets separate, and maintain audit logs for production promotions. For payment-integrated apps, align checks with PCI DSS essentials for developers. Document incident steps in the portal: how to roll back, rotate keys, and notify stakeholders. When sister legal-tech sites share one pipeline, a single centralised runbook covers rollback and key rotation for all—a concrete win from platform-level security docs that individual repos would never maintain consistently.

Share this article

0 Comments

Leave a comment

Your email is not published. Comments appear once they have been read. Sign in to have your details filled in.

Quick Contact Options
Choose how you want to connect me: