Skip to content
Starone

Capability

Infrastructure designed for the workload, not just deployed

We design cloud platforms on AWS, Microsoft Azure and Google Cloud from the application's requirements outward. Networking, compute, data durability, recovery and cost are decided deliberately, written as code and operated through automation.

Overview

Deploying an application to the cloud is a small task. Designing the infrastructure it runs on is a different discipline: deciding how traffic enters, where state lives, what fails independently of what, how capacity follows demand, and what the platform costs per unit of work. Those decisions set the ceiling on availability, latency and security long before any application code is optimised.

Our principle is that infrastructure should be engineered around application requirements, security, resilience, performance and economics, in that order of discovery and with all five held in tension. A latency-sensitive transaction service, a batch analytics pipeline and a GPU inference workload need different network topologies, scaling signals and recovery strategies. Starting from a generic landing zone and fitting the workload into it later produces platforms that are expensive where it does not matter and fragile where it does.

Everything we build is expressed as infrastructure as code, typically Terraform, with environments created from the same modules and promoted through a pipeline. That makes the platform reviewable, reproducible and recoverable: a region, an account or a cluster can be rebuilt from the repository rather than from memory, and every change to production has an author, a diff and a rollback path.

What we engineer

Technical areas

01

Cloud architecture and landing zones

We design the account, subscription or project structure that everything else inherits: environment isolation, identity boundaries, network segmentation and guardrails. The structure is chosen so that a compromised workload or a misapplied change stays inside one boundary. Provider choice follows the workload and the organisation's existing estate, not preference.

  • AWS Organizations, Azure management groups and Google Cloud folders
  • Environment and workload account separation
  • Service control policies and organisation policy guardrails
  • Centralised identity with short-lived role assumption
  • Tagging and ownership standards for cost attribution
02

Networking and traffic management

Cloud networking determines both the attack surface and the latency floor. We design address plans, subnet tiers, private connectivity to managed services and the path a request takes from the edge to the workload. Load balancing is layered: global routing and TLS termination at the edge, layer 7 routing at the regional entry point, and service-to-service traffic inside the cluster.

  • VPC and VNet design with non-overlapping CIDR plans
  • Private endpoints, transit gateways and peering
  • Layer 4 and layer 7 load balancing with health-based routing
  • CDN, WAF and DDoS protection at the edge
  • DNS failover and latency-based or weighted routing
  • Egress control through NAT and explicit allow lists
03

Containers and orchestration

We package workloads with Docker and run them on the orchestration layer that matches their operational complexity. Kubernetes is used where its scheduling, extension and multi-tenancy model earns its operating cost; managed container services are used where they do not. Cluster design covers node pools, pod security, resource requests and limits, disruption budgets and the upgrade path.

  • Amazon EKS, Azure AKS and Google GKE
  • Amazon ECS on Fargate, Azure Container Apps and Cloud Run
  • Helm and Kustomize for workload packaging
  • Horizontal pod autoscaling and event-driven scaling with KEDA
  • Cluster autoscaling and node provisioning with Karpenter
  • Ingress controllers, Gateway API and service mesh where justified
04

Infrastructure as code and delivery automation

Infrastructure changes go through the same review, test and promotion process as application code. Terraform modules encode the organisation's standards once, and CI/CD pipelines plan, validate and apply them with remote state, locking and policy checks. Manual console changes are treated as drift and detected rather than tolerated.

  • Terraform and OpenTofu with versioned module registries
  • Remote state with locking and per-environment isolation
  • Plan review and policy checks in pull requests
  • Drift detection and scheduled reconciliation
  • GitOps delivery to clusters with Argo CD or Flux
  • Ephemeral preview environments built from the same modules
05

Resilience, backup and disaster recovery

High availability and disaster recovery are separate problems with separate designs. Availability is handled by redundancy across zones, health checks and automatic failover; recovery is handled by backups, replication and a rehearsed procedure for rebuilding elsewhere. We set recovery time and recovery point objectives per system with the business, then design the cheapest architecture that meets them.

  • Multi-availability-zone deployment as the default
  • Pilot light, warm standby and active-active multi-region patterns
  • Cross-region database replication and point-in-time recovery
  • Immutable, versioned backups in a separate account
  • Scheduled restore tests and failover exercises
  • Runbooks generated and maintained alongside the code
06

Observability, secrets and cost engineering

A platform is operable only if its state is visible and its credentials are controlled. We instrument infrastructure and workloads with metrics, logs and traces through OpenTelemetry, and define alerts against service level objectives rather than raw resource thresholds. Secrets are issued from a managed store with rotation, and cost is tracked per service and per environment so that architecture decisions can be made with their price visible.

  • Prometheus, Grafana and OpenTelemetry collectors
  • Centralised structured logging with retention tiers
  • AWS Secrets Manager, Azure Key Vault, Google Secret Manager and HashiCorp Vault
  • Workload identity in place of long-lived access keys
  • Rightsizing, commitment planning and spot capacity for tolerant workloads
  • Unit cost dashboards and budget alerts

Infrastructure That Disappears

The measure of good infrastructure is how little attention it demands from the people building the product. When a team can merge a change and have it built, deployed, scaled, monitored and, if necessary, rolled back without opening a console or paging a specialist, the infrastructure has done its job. It has not become simple; the complexity has been moved into automation that is tested and versioned.

Reaching that state requires treating the platform as a product with engineers as its users. Deployment is a pipeline, not a procedure. Scaling follows a signal that reflects real load, such as request concurrency or queue depth, instead of a person watching a dashboard. Monitoring raises an alert only when a user-facing objective is at risk. Recovery from a failed node, a failed zone or a bad release is an automated control loop first and a runbook second.

The cost of not doing this is paid in engineering time. Teams that hand-configure environments spend their capacity reconciling differences between staging and production, and every incident begins with rediscovering how the system is assembled. Automation that handles deployment, scaling, monitoring and recovery returns that time to the product.

  • Deployment: every change reaches production through one pipeline with the same checks
  • Scaling: capacity follows workload signals within defined minimum and maximum bounds
  • Monitoring: alerts are tied to service level objectives and carry a runbook link
  • Recovery: failed instances, pods and zones are replaced without human action

Architecture

Cloud platform architecture
  1. Edge

    • DNS
    • CDN
    • WAF
    • DDoS protection
  2. Network

    Workloads and data sit in private subnets

    • VPC
    • Public and private subnets
    • Load balancers
    • NAT and peering
  3. Compute

    • Kubernetes
    • Containers
    • Serverless functions
    • Autoscaling
  4. Data

    • Managed databases
    • Cache
    • Object storage
    • Message queues
  5. Platform Services

    • Secrets management
    • IAM
    • Infrastructure as code
    • Container registry
  6. Observability & DR

    Restores are rehearsed, not assumed

    • Metrics and logs
    • Tracing
    • Backups
    • Multi-zone failover
A cloud foundation from the edge down to recovery. Each layer is defined as code, so an environment can be reviewed, reproduced and rebuilt rather than maintained by hand.

Availability is a budget, not a setting

Each additional nine of availability costs more than the last, in infrastructure spend and in architectural complexity. A single-region, multi-zone deployment with automated failover tolerates the loss of a data centre and suits most business systems. Multi-region active-passive adds protection against a regional outage at the price of replication lag and a failover decision. Active-active across regions removes the failover step but forces every stateful component to deal with concurrent writes, conflict resolution and consistency across distance.

The correct design starts from two numbers agreed with the business: how long the system may be unavailable, and how much recent data may be lost. A system with a four-hour recovery time objective does not need active-active, and building it wastes money that could harden the single region. A payment or trading system with a recovery point objective near zero needs synchronous replication within a region and a carefully reasoned position on what happens to in-flight transactions during a regional failover.

An untested recovery plan is an assumption. We design restore tests and failover exercises into the operating schedule, because backups that have never been restored and standby regions that have never taken traffic fail in ways that only appear under real conditions.

Cost as an architectural property

Cloud cost is largely decided at design time. The choice between always-on instances and scale-to-zero services, between cross-zone chatter and zone-aware routing, between hot storage and lifecycle-tiered storage, and between managed services and self-operated ones fixes most of the bill before the first invoice arrives. Optimisation after the fact recovers a fraction of what a deliberate design avoids.

We model cost alongside performance during architecture, using the workload's expected shape: steady or bursty, latency-sensitive or batch, stateful or stateless. Data transfer, NAT gateway traffic, log ingestion and idle non-production environments are the usual sources of surprise, and each has a known design response. Once the platform is running, cost is attributed to services and teams through tagging so that the people who can change the spend can also see it.

How we engineer it

Our approach

We work from requirements to a running platform in stages, with each stage producing something reviewable: a document, a module or an environment.

  1. 01

    Establish workload requirements

    We capture traffic shape, latency budgets, data classification, recovery objectives, regulatory constraints and expected growth for each system. These become the acceptance criteria the infrastructure is measured against.

  2. 02

    Design the target architecture

    We produce the account structure, network topology, compute model, data placement and failure-domain map, with the alternatives considered and the reasons for rejecting them. Cost is estimated at this stage for the expected and peak load.

  3. 03

    Build the foundation as code

    Landing zone, networking, identity and shared services are written as Terraform modules and applied through a pipeline. Guardrails and policy checks are in place before the first workload arrives.

  4. 04

    Onboard workloads through a paved path

    Services are containerised, given a standard deployment template, connected to secrets, logging and metrics, and deployed through CI/CD. The first service proves the path; later services reuse it.

  5. 05

    Prove resilience and capacity

    We run load tests against scaling policies, terminate instances and zones to verify failover, and restore backups into a clean environment. Findings are fixed in code, not in a wiki page.

  6. 06

    Operate, measure and tune

    Service level objectives, cost per unit and capacity headroom are reviewed on a regular cadence. Upgrades to clusters, base images and provider versions are scheduled work, not emergencies.

Trade-offs

Decisions that shape the design

The questions we work through with your team before committing to an architecture.

Do we need Kubernetes, or is a managed container service enough?
Choose a managed container service such as ECS on Fargate, Cloud Run or Azure Container Apps when you run a modest number of stateless services, have no dedicated platform engineers and need little beyond deploy, scale and route. Choose Kubernetes when you need custom scheduling, operators for stateful systems, multi-tenant isolation, portability across providers or an ecosystem of controllers. Kubernetes repays its operating cost only when several teams share the platform and someone owns it.
Single region with fast recovery, or active-active multi-region?
Single region across three availability zones, with tested backups and a rebuildable standby, meets the availability target of most systems at a fraction of the cost. Go multi-region active-passive when a regional outage would breach your recovery time objective. Choose active-active only when users are globally distributed and latency-sensitive, or downtime is intolerable, and when the data layer can handle multi-writer consistency.
One cloud provider, or multi-cloud?
Standardise on one provider unless a concrete requirement forces otherwise: data residency in a jurisdiction one provider does not serve, a specific managed service, or a contractual obligation. Multi-cloud multiplies the skills, tooling and security surface you must maintain and usually reduces you to the common subset of features. Portability is better achieved through containers, Terraform and open protocols than through running everywhere at once.
Managed database and messaging services, or self-operated on Kubernetes?
Prefer managed services for PostgreSQL, Redis and Kafka when the provider's version, extension and configuration limits fit your needs; patching, failover and backups are then someone else's on-call burden. Self-operate when you need extensions, tuning or topologies the managed offering does not allow, or when the cost at scale clearly exceeds the engineering cost of running it. Budget for that engineering cost honestly.
Serverless functions, containers or virtual machines?
Use functions for event-driven, short-lived, spiky work where scale-to-zero matters and cold starts are acceptable. Use containers for long-running services with steady traffic, predictable latency needs or non-trivial runtime dependencies. Use virtual machines when the workload needs kernel-level control, specialised hardware such as GPUs with particular drivers, or licensed software bound to hosts.
Should scaling be driven by CPU, request rate or queue depth?
Scale on the signal closest to user-perceived load. CPU works for compute-bound services but lags for I/O-bound ones, where request concurrency or latency is a better trigger. Asynchronous workers should scale on queue depth or consumer lag. Whatever the signal, set minimum capacity to survive a zone loss and a maximum that protects downstream databases from being overrun.

Production readiness

What makes it production-ready

How it is secured

Workloads run in private subnets with no direct internet exposure, reach managed services through private endpoints and authenticate with workload identity instead of static keys. Data is encrypted in transit and at rest with customer-managed keys where the classification requires it, and organisation-level policies prevent public storage, unencrypted volumes and unapproved regions.

How it scales

Stateless services scale horizontally on workload signals, with cluster or instance capacity provisioned automatically behind them. Stateful components are scaled deliberately through read replicas, partitioning and connection pooling, and load tests establish where each tier saturates before production traffic finds out.

How it is monitored

Metrics, logs and traces are collected through OpenTelemetry and correlated by trace identifier across the edge, the service and the data layer. Alerts fire on service level objective burn rate, and dashboards expose saturation, error rate, latency and cost per service.

How it is deployed

Infrastructure changes are planned in a pull request, checked against policy, applied by a pipeline and recorded in version control. Application releases use rolling, blue/green or canary strategies with automated rollback on health or error-rate regression.

How it integrates

The platform connects to existing estates through VPN or dedicated interconnects, federates identity with the corporate directory and exposes services through API gateways with consistent authentication. Hybrid and migration scenarios are handled with staged cutovers and data replication, so that systems move without a single high-risk switch.

Technologies

Chosen to fit the workload and your existing estate.

  • AWS
  • Microsoft Azure
  • Google Cloud
  • Kubernetes
  • Docker
  • Terraform
  • Helm
  • Argo CD
  • GitHub Actions
  • Prometheus
  • Grafana
  • OpenTelemetry
  • HashiCorp Vault
  • Cloudflare

From zero to production

The engineering lifecycle

  1. 01

    Idea

  2. 02

    Discovery

  3. 03

    System architecture

  4. 04

    UX / product design

  5. 05

    Application engineering

  6. 06

    AI / data layer

  7. 07

    Cloud infrastructure

  8. 08

    Security

  9. 09

    QA & performance

  10. 10

    Deployment

  11. 11

    Observability

  12. 12

    Continuous evolution

FAQ

Common questions

Which cloud provider do you recommend?

The one that fits the workload and the organisation. AWS, Microsoft Azure and Google Cloud all provide the primitives a production platform needs; the differences that matter are specific managed services, regional presence, existing enterprise agreements and the skills already in the team. We design for the provider chosen and keep the application layer portable through containers and open interfaces.

Can you take over and improve an existing cloud environment?

Yes. We begin with an assessment of the current architecture, security posture, cost profile and operational practices, then bring the estate under infrastructure as code incrementally by importing existing resources. Improvements are sequenced by risk so that the platform keeps running while it is being rebuilt underneath.

How do you approach cloud cost?

As a design constraint from the first architecture discussion. We estimate cost for expected and peak load, choose compute and storage models to match the workload's shape, and attribute spend to services through tagging. After launch, rightsizing, commitment purchases and lifecycle policies are applied using measured utilisation.

What does a disaster recovery design include?

Agreed recovery time and recovery point objectives per system, a backup and replication architecture that meets them, infrastructure code that can rebuild the platform in another region, and a tested runbook. It also includes a schedule for restore tests and failover exercises, because recovery capability degrades when it is not exercised.

Do you manage infrastructure after it is built?

We can operate the platform, hand it over to an internal team, or work alongside that team during a transition. In every case the deliverable includes the code, the documentation and the runbooks needed for someone else to run it.

Have a system that needs to work in production?

Tell us what you are building. An engineer will read it and reply within two working days.