Site Reliability Engineering Services in India
Hire a dedicated SRE team in India to define service level objectives that mean something, run a real on-call rota across your night, cut the toil that is eating your engineers, and turn incidents into changes rather than into folklore. Built for CTOs and engineering leaders in the US, UK, Canada and Australia who need reliability work done properly and cannot staff it locally.
Why Does Uptime Keep Slipping While Everyone Is Busy?
The symptoms arrive in a predictable order. First the pager gets noisy and nobody wants to be on it. Then two of your better engineers start spending their week on tickets that all look like the last ticket. Then a customer emails your CEO about an outage before your monitoring notices it. By the time somebody says the word reliability out loud in a board meeting, the team has usually been absorbing the damage quietly for six months.
What makes this hard to fix from inside is that no individual decision was wrong. The alert that fires forty times a week was added after a real outage. The manual database failover runbook exists because automating it looked risky. The nightly job that somebody restarts by hand every Tuesday has been failing the same way for a year, and restarting it takes four minutes, so it never reaches the top of a backlog. None of it is negligence. It is accumulated operational debt, and it compounds in exactly the way financial debt does.
The cost lands in three places, and only one of them shows up in a dashboard. There is the direct revenue you lose during an outage. There is the engineering capacity you are spending on repetitive operations instead of on product, which is usually the larger number and is invisible because it never gets logged as downtime. And there is attrition, because good infrastructure engineers leave jobs where the pager owns their evenings. Replacing one of them costs more than a quarter of reliability work.
Site reliability engineering services in India exist for a specific version of this problem: you know what needs doing, the work is real engineering rather than an afternoon of tidying, and hiring three experienced SREs in San Francisco or London is either too slow or too expensive to be the answer this year. India has a deep pool of Linux, cloud and Kubernetes operations engineers, and the working day sits directly on top of the hours your own team is asleep. Used properly, that is a structural advantage rather than a compromise.
What an SRE Engagement Actually Covers
Reliability work is easy to sell vaguely and hard to buy vaguely, so here is the scope in the order we normally do it. Not every engagement includes everything. A team with clean observability and no SLOs needs a completely different first quarter to a team with beautiful SLO dashboards and an incident process that consists of shouting in a channel.
Service level objectives and an error budget policy
Pick the indicators that describe what your users experience, instrument them, watch real traffic for several weeks, then set targets you can defend. The deliverable is not a dashboard. It is a signed error budget policy that says what changes when the budget is spent, agreed with the people who own the roadmap.
Alerting rebuilt around symptoms
Most alert estates we inherit page on causes: CPU above eighty percent, disk above ninety, a pod restarting. Users do not experience CPU. We move paging alerts onto SLO burn rate, demote the rest to tickets or dashboards, and delete the ones that nobody has acted on in six months. Page volume usually falls sharply, and the remaining pages start meaning something again.
Observability that answers questions instead of storing data
Metrics, logs and traces wired so that a person woken at 02:00 can go from a page to a cause without guessing. That includes cardinality discipline, retention tiers, trace sampling that keeps the interesting traces, and a cost model so the observability bill does not quietly become your third largest line item.
On-call design and rota
The rota structure, the escalation path, the paging tool configuration, the handover format between regions, and the compensation model, which is a business decision you make and we implement. Also the unglamorous part: making sure the person who gets paged has the access, the runbook and the authority to fix the thing.
Incident command and severity model
Defined severities anchored to customer impact, named roles during an incident, a declaration threshold, a communications cadence and a status page that gets updated by someone whose only job during the incident is communication.
Postmortems and the follow-through
A template, a facilitation habit, and a tracked list of actions with owners and dates that sits in the same backlog as feature work. The measure of a postmortem process is the completion rate of its actions, not the eloquence of its documents.
Toil measurement and elimination
Two weeks of honest interrupt logging, a ranked list of what is eating the week, then the automation work itself. This is where most of the engineering hours in a mature engagement go.
Capacity planning and load testing
Headroom targets, a load profile that resembles your real traffic mix rather than a synthetic hammer, and a readiness process before known demand events. Plus the boring bottleneck hunt: connection pools, single write primaries, rate limits on a third party you do not control.
Resilience testing and game days
Structured failure exercises that test the humans and the runbooks as much as the system. Almost every first game day finds a stale runbook and an alert routed to somebody who left.
Documentation you can hand to anyone
Runbooks per alert, an architecture note that matches reality, and an on-call handbook. If a new joiner cannot take a page in their second month using only what is written down, the documentation has failed regardless of how much of it there is.
SLIs, SLOs and Error Budgets: Picking Numbers That Mean Something
This is the part that gets performed rather than practised. A lot of organisations have SLO dashboards and no SLO practice, because the numbers were chosen in a workshop by picking a comfortable count of nines rather than by measuring anything.
Start with the indicator, not the target
A service level indicator is a ratio: good events over valid events. That framing does more work than it looks like it does, because it forces two decisions people usually skip. What counts as good, and what counts as valid. A health check endpoint returning 200 is not a good event if the checkout it fronts is failing. A request from a scraper hammering your search endpoint is arguably not a valid event, and if you include it your availability number becomes a measure of bot behaviour.
The indicators worth having describe something a user would notice. Request availability measured as successful responses over valid responses, at the edge rather than at the service, because the load balancer and the CDN are part of the path. Latency expressed as the proportion of requests served faster than a threshold. Freshness for anything pipeline shaped: the share of dashboard loads where the underlying data is less than fifteen minutes old. Correctness for batch work, sampled against a known answer. Coverage for a job that is supposed to process everything.
What does not belong in an SLI: CPU utilisation, memory, pod restart counts, queue depth. Those are useful signals and terrible objectives. A service can sit at ninety percent CPU and serve every request inside its latency target, and it can sit at ten percent CPU while returning errors to everyone.
Thresholds beat percentiles for budgeting
Teams instinctively write latency SLOs as p95 below 400ms. It reads well and it is awkward to budget against, because a percentile is not an event count and you cannot straightforwardly say how much of it you have spent. The threshold form, the proportion of requests served in under 400ms, gives you a good-events ratio that plugs directly into burn rate maths. Keep the percentile charts for debugging. Use the threshold for the objective.
One more thing about percentiles that catches people out. If you serve a million requests a day, your p99 is ten thousand requests. Those are real users having a bad time, and they are frequently your heaviest accounts, because heavy accounts have more data and slower queries. The tail is not an edge case, it is a customer segment.
What the nines actually cost you in minutes
Do the arithmetic out loud with your product lead in the room, because the difference between the numbers is not intuitive. Against a thirty day month, 99.9 percent leaves you 43 minutes and 12 seconds of budget. 99.95 percent leaves 21 minutes and 36 seconds. 99.99 percent leaves 4 minutes and 19 seconds, which is less time than most teams take to acknowledge a page, let alone diagnose one. Over a full year, 99.9 percent is 8 hours 45 minutes.
Look at 99.99 percent again. Four minutes a month means that if a human being has to be involved in recovery, you have already failed. It implies automated failover, tested regularly, on every component in the path, and it implies the same standard from every dependency you call. If a payment provider you cannot control gives you less than that, your ceiling is set by them regardless of how good your engineering is. This is usually the moment somebody quietly changes the target, and that is the correct outcome.
The policy is the product
An error budget only changes behaviour if something happens when it runs out. The policy needs to be written before the first SLO goes live and agreed by the person who owns the roadmap, not just by engineering. A workable version reads something like: while budget remains, ship normally; once it is spent, risky changes pause and the next sprint prioritises the reliability work that would have prevented the burn; if the budget is exhausted two quarters running, the target itself goes back on the table because either the architecture cannot deliver it or the target was wrong.
Notice what the policy does politically. It replaces the argument between product and engineering about whether to slow down with a number that both sides agreed to in advance. That is most of the value. The dashboard is a side effect.
Burn rate alerting, so the page arrives at the right time
Alerting on the SLO directly gives you a page after the damage is done. Alerting on burn rate gives you a page while it is happening, and lets you distinguish a fast catastrophic burn from a slow leak. The multi window, multi burn rate approach published in the Google SRE Workbook is the reference implementation: a burn rate of 14.4 times normal sustained over an hour consumes two percent of a monthly budget and pages immediately; six times over six hours consumes five percent and pages; three times over a day and one times over three days raise tickets rather than waking anyone.
The short window paired with each long window is what stops the alert firing on a spike that already recovered. Get this configuration right once and a large share of your out of hours pages disappear, because the slow burns that used to wake somebody now arrive as a ticket in the morning.
SLO, SLA and the gap between them
Your SLA is the contractual promise with a financial consequence. Your SLO is the internal target you manage to, and it should be stricter, because you want to be having the internal conversation well before you owe anyone a credit. Setting them equal is a common and expensive mistake: it means the first sign of a problem is a breach notice. If you carry an SLA you have never measured, measuring it is the first job, and occasionally the finding is uncomfortable enough to need a commercial conversation rather than an engineering one.
Is SRE Just DevOps With a Pager?
Frequently, yes. A large share of roles advertised as SRE are operations roles with a fashionable title, and a share of consultancies selling SRE are selling managed operations. Being blunt about this matters, because you are about to spend money and the difference is not visible on a CV.
The distinction is not about tooling. Both camps use Terraform, Kubernetes, Prometheus and a paging tool. It is about two control loops that either exist or do not.
The first is the error budget, which gives reliability a currency and therefore a way to lose an argument fairly. Without it, reliability is a preference that engineering holds and product overrules, and the outcome is decided by seniority and volume rather than by evidence.
The second is a cap on toil. The convention from Google, and the one we work to, is that no more than half an engineer's time goes on operational work, with the rest on engineering that reduces future operational work. The cap is what stops the role degenerating. Once someone is spending eighty percent of their week reacting, they have no capacity left to remove the reasons they are reacting, and the job becomes permanent. That is the failure mode, and it is a management failure rather than an engineering one.
Some honest diagnostics you can run on your own organisation, or on any vendor pitching to you. Ask what the current SLO is and who signed the error budget policy. Ask what percentage of last quarter's pages were actionable. Ask how many postmortem action items from six months ago are closed. Ask what the on-call engineer is allowed to do without waking someone senior. Vague answers to those four questions tell you exactly what you are buying.
And the counterpoint we would rather you hear from us than discover later: plenty of teams do not need this. If you have fifteen engineers, one product and a monolith on managed infrastructure, hiring an SRE function is premature. What you need is SLO based alerting, a fair rota, and somebody accountable for alert quality. That is a few weeks of work, not a team. We say so when it applies, and it applies more often than the market admits. Our deeper background on the discipline itself is in our guide to site reliability engineering if you want the theory before the commercial conversation.
Observability: Metrics, Logs, Traces and the Cardinality Bill
Observability engagements go wrong in one of two directions. Either the team cannot answer basic questions during an incident, or the team can answer everything and the monthly bill has become a governance issue. Both are solvable, and both are usually caused by treating the three signal types as interchangeable.
Metrics, and the cardinality trap
Prometheus and its ecosystem, with Grafana on top, is still the default we build on for self hosted estates, and the managed options from Datadog, New Relic and Google Cloud Operations are reasonable where you would rather buy than run. Whichever you pick, the failure mode is the same: cardinality.
A time series is created for every unique combination of metric name and label values. Add a label for user identifier to a metric that already has five labels and you have multiplied your series count by your user count. Prometheus keeps every active series in memory, so a few million active series is where a single server starts needing sharding or a remote write backend such as Thanos, Mimir or VictoriaMetrics. On a usage priced vendor, that same mistake arrives as an invoice rather than an out of memory kill, which is arguably worse because nothing breaks until finance notices.
The rules we apply: never label with anything unbounded, which means no user identifiers, no request identifiers, no raw URL paths, no email addresses. Keep high cardinality dimensions in traces and logs where they belong. Decide histogram bucket boundaries deliberately at the start, because changing them later breaks the history you have been comparing against. And put a cardinality dashboard next to the cost dashboard so the growth is visible before it is expensive.
Logs, and why the bill is always a surprise
Logs are the signal people over produce, because adding one costs a single line of code and the cost lands somewhere else. Structured JSON logging with consistent field names is the baseline, since grepping unstructured strings at volume is how incidents get longer. After that it is economics: sample the high volume debug paths, keep errors unsampled, tier your retention so that seven days is hot and searchable while ninety days is cheap object storage, and review the top ten log producing services every quarter.
Loki is cheaper to run because it indexes labels rather than content, with the trade-off that arbitrary field searches over a wide time range are slow. Elasticsearch or OpenSearch gives you fast search over everything and charges you in storage and operational effort. Datadog and Splunk are excellent and priced by ingest, which makes a careless debug statement in a hot path expensive. There is no universally right answer, only a right answer for your query patterns and your tolerance for running stateful infrastructure.
Traces, and sampling you will not regret
OpenTelemetry is the instrumentation standard we build to now, for the practical reason that it decouples your code from your backend, so switching vendors becomes a collector configuration change rather than a re-instrumentation project. Jaeger, Tempo, Honeycomb and the commercial suites all consume it.
Sampling is where the design decision lives. Head based sampling decides at the start of a request, which is cheap and throws away the traces you most want, because a one percent sample of a rare failure is almost certainly zero. Tail based sampling waits for the trace to complete and keeps anything with an error or unusual latency, which is what you want during an incident and requires a collector holding spans in memory long enough to decide. On a mid sized system the tail based collector is real infrastructure with real memory requirements, and it earns its keep. Wire exemplars so a spike on a latency histogram links straight to an example trace, and you remove a whole category of incident guesswork.
The frameworks that stop dashboards multiplying
Two conventions keep dashboards useful. The four golden signals, latency, traffic, errors and saturation, for every user facing service. The USE method, utilisation, saturation and errors, for every resource. Tom Wilkie's RED variant, rate, errors and duration, is the same idea aimed at request driven services and maps neatly onto SLI definitions.
The practical rule is one dashboard per service that answers the question is it healthy, and separate diagnostic dashboards for when the answer is no. Teams that skip this end up with sixty dashboards, of which four get opened, and none of the four are the right one at 02:00.
How Does On-Call Work While Your Team Is Asleep?
This is where an India based team either helps you a great deal or costs you a great deal, and the difference is entirely in how the shifts are designed. So here is the arithmetic without the marketing on top.
The overlap you actually get
India runs on IST, which is UTC+5:30 all year with no daylight saving, so the gap to your office changes twice a year while ours stays still. A standard Indian working day of 09:30 to 18:30 IST maps to 23:00 the previous evening until 08:00 on US Eastern Standard Time, and midnight until 09:00 on Eastern Daylight Time. Read that again if you are on the US east coast: a default India day gives you essentially zero live overlap with your working hours.
The picture for the UK is much better. That same Indian day is 04:00 to 13:00 GMT, which gives you four hours of live overlap with a 09:00 start, or five hours during British Summer Time. Sydney sits the other way around: 09:30 to 18:30 IST is 15:00 to midnight AEDT, so your morning is our pre-dawn and the honest overlap is around two and a half hours, stretching to three and a half under AEST. US Pacific is the hardest case of all, with a default day giving nothing at all.
So we shift the day rather than pretend the problem away. A team working 13:00 to 22:00 IST gives US Eastern about two and a half hours of overlap in winter and three and a half in summer. Pushing to 14:30 to 23:30 IST gives four hours against a 09:00 Eastern start. For US Pacific, a 17:00 to 02:00 IST shift produces roughly three and a half hours of overlap with a Pacific morning. Those are real shifts worked by real people, agreed with them before they join, and they are the honest cost of your overlap window rather than something a vendor can conjure for free.
Why the gap is an advantage for on-call specifically
Here is the part that favours an India team, and it repays understanding properly because it is the strongest structural argument for this arrangement. An Indian working day of 09:00 to 21:00 IST covers 23:30 the previous night through 11:30 US Eastern. That is your entire overnight window, staffed by people who are awake, caffeinated and at a desk, followed by a two and a half hour live overlap with your morning for handover.
Compare that with what you do today, which is almost certainly waking a US based engineer at 03:00 for something that could have been handled by someone mid shift. The nights that cost your team the most are precisely the hours that are ordinary business hours in India. No one has to sacrifice a night for that coverage to exist. No arrangement where one region covers all twenty four hours can say that.
The arithmetic of genuine round the clock coverage
A week contains 168 hours. Having one person on duty at every moment therefore requires 168 person hours a week, which is 4.2 engineers at a forty hour week before you account for annual leave, sickness, training, or the fact that nobody should be primary on-call every single week. Add a secondary tier, which you want for anything that pages at night, and a sustainable rota lands somewhere between six and eight engineers.
When a vendor offers you twenty four by seven with two people, what they are describing is two people carrying a phone permanently. That works for about four months and then one of them resigns. We will not quote you that arrangement, and if the coverage you need requires night shifts in India, that is discussed and priced explicitly before anyone is hired, never folded silently into a day rate.
Handover as a written discipline
Follow the sun coverage is a document passing exercise more than a technical one. The failure mode is not that the incoming region lacks skill, it is that they lack context, and context evaporates in verbal handovers.
What we run: a written handover at the end of every shift covering open incidents with current hypotheses, anything degraded but not paging, changes released during the shift, and anything the next region should watch. During a live incident that crosses a handover, the incident commander role transfers explicitly and out loud in the incident channel, with the outgoing commander staying available for fifteen minutes rather than vanishing at the hour. Timelines are kept in the incident document as events happen, not reconstructed afterwards from memory and Slack scrollback.
The side effect is worth saying out loud. Teams that adopt written handover because of a timezone gap generally end up with better documentation than teams that never needed it, because the writing habit spreads to runbooks and postmortems. The constraint produces the discipline.
Incident Command: Severity, Roles and the First Ten Minutes
Most organisations have an incident process on paper and a different one in practice, where the most senior person present starts debugging, everyone else watches, and nobody tells the customers anything for ninety minutes. The fix is structural, borrowed from emergency services, and it works because it separates coordinating from fixing.
Roles, and the one rule that matters
The incident commander owns the incident and does not debug. That single rule is the whole trick, and it is the one most teams break. The moment your commander opens a terminal, coordination stops: nobody is tracking who is doing what, the timeline goes unwritten, and the status page goes stale. On a small incident the commander may be your most junior person on the rota, and that is fine, because the job is running the room rather than knowing the system best.
The operations lead makes the changes and is the only person touching production, which prevents two engineers applying conflicting fixes. The communications lead handles the status page, the customer facing update and the executive who wants to know what is happening. A scribe keeps the timeline. On a small incident one person may hold several of these, but naming them out loud in the channel is what stops them silently going unowned.
Severity levels anchored to customers
Severity must be defined by impact rather than by whoever is shouting. A workable ladder: SEV1 for a total outage of a critical path or an active data loss or security event, paging immediately and pulling in leadership. SEV2 for significant degradation or a major feature down for a subset of customers, paging during any hours. SEV3 for a degraded non critical path or a single account affected, handled in business hours. Write the definitions down with examples from your own product, because abstract definitions get argued about at exactly the wrong moment.
Add a declaration threshold, which is the rule most teams lack. Ours: if two engineers have been investigating for fifteen minutes without a confident cause, declare an incident. Under declaration is far more expensive than over declaration. The worst incidents in most companies are the ones that stayed as a Slack thread for an hour because nobody wanted to seem dramatic.
The first ten minutes, in order
Declare and open a channel and a document. Name the commander in writing. Assess scope, which is who is affected and how badly, before touching anything. Mitigate before diagnosing, because rolling back the release from twenty minutes ago beats understanding it while customers are down. Post a first customer facing update inside the first fifteen minutes even if it says only that you are investigating, then keep a fixed cadence of every thirty minutes for a SEV1 regardless of whether there is news. Silence is read as incompetence, and updates that say nothing new are still updates.
Rollback beats root cause during an incident
The instinct to understand the failure before undoing it is the single most expensive habit in incident response. If a deploy correlates with the start, revert it. If a feature flag correlates, flip it. If a region is degraded, fail over. You can investigate at leisure once the bleeding has stopped, and you will investigate better because nobody is watching the clock. This requires that rollback is safe and rehearsed, which is why we test it during game days rather than discovering its edge cases mid outage.
Blameless Postmortems That Change the System
Blameless is widely quoted and thinly practised. It does not mean nobody is responsible. It means the analysis asks what made this mistake possible and easy, rather than who made it, because the engineer who ran the wrong command at 03:00 was working inside a system that let them, did not warn them, and did not catch it afterwards. Those three properties are fixable. Their judgement at three in the morning is not.
The practical test of blamelessness is whether people volunteer information that makes them look bad. In a blaming culture the timeline has gaps exactly where the interesting parts are, and you never learn that the runbook was ambiguous or that the alert was muted last month because it was noisy. You cannot fix what nobody will tell you.
What a postmortem should contain
A timeline with real timestamps, starting at the first moment the system misbehaved rather than the moment somebody noticed. Impact stated in customer terms, not in pod restarts. Contributing factors in the plural, because a single root cause is normally a sign that analysis stopped early. Then the three numbers that matter most: how long until detection, how long until acknowledgement, how long until mitigation. Split out that way, the biggest number is almost always detection, and detection is usually the cheapest of the three to improve.
Then the questions to ask every time. Why did we not know sooner. What made diagnosis slow, which is often that a dashboard did not exist or a log lacked a field. What made the fix risky. What almost went worse, because near misses are free lessons. And what would happen if this recurred tomorrow, which is the question that produces the honest action list.
Actions, and the number that tells the truth
Every action gets a named owner and a date, and lives in the same tracker as feature work rather than in a document nobody reopens. Actions in a separate reliability backlog do not compete for capacity and therefore do not happen.
Then measure the completion rate. If under half of your postmortem actions from two quarters ago are closed, your postmortem process is theatre, however good the documents look, and the honest response is to write fewer actions and finish them. Three completed actions beat eleven aspirational ones. We track this openly in the monthly report because it is the single most reliable indicator of whether reliability work is actually landing.
Reading across incidents
Individual postmortems fix individual causes. Quarterly review across all of them finds the pattern: a third of incidents originating in one service, or in configuration changes, or in a dependency you cannot control. That pattern is where architectural work gets justified with evidence rather than with instinct, and it is the argument that actually persuades a board.
Toil: Measure It Before You Try to Kill It
Toil has a precise definition, and using it precisely helps, rather than treating the word as a synonym for work you dislike. Toil is manual, repetitive, automatable, tactical rather than strategic, produces no lasting value, and scales linearly with the size of the service. Reviewing a design document is not toil even though it is not coding. Restarting the same stuck consumer every Tuesday is textbook toil.
Nearly every team we work with underestimates how much of it they carry, because it arrives in four minute increments that never get logged. So the first step is counting, not automating.
Counting it honestly
Two weeks of interrupt logging. Every page, every ticket, every ad hoc request in a chat channel gets recorded with rough minutes and a tag for toil or not toil. It is tedious and it is the only thing that produces an argument nobody can dismiss. The output is a ranked list by total hours, and the top item is frequently something absurd that everyone had normalised: an access request process that costs the team six hours a week, or a certificate renewal that three people each half remember.
Rank by total time, not by irritation. The thing everyone complains about is often twenty minutes a month. The thing nobody mentions is often four hours a week.
The half of a week that has to stay free
The convention we hold to is that operational work stays at or below half of an engineer's time. When it goes above that consistently, the team stops being able to reduce future work and the load becomes permanent. Passing the threshold is a signal to act on: hire, cut scope, or stop taking on new services until the automation catches up. It is not a target to admire on a slide.
What we automate first, and what we deliberately do not
First to go, in rough order of return: certificate renewal, which is also a common cause of self inflicted outages and belongs entirely to cert-manager or an equivalent. Access provisioning, moved into groups in your identity provider with a request flow. Manual scaling before known demand, replaced by scheduled scaling with a floor. Deploy babysitting, replaced by automated verification and rollback on SLI regression. Restarting known bad services, which should be fixed rather than automated, but a self healing controller buys time while the fix is written. Routine reporting, which is a scheduled query rather than a human with a spreadsheet.
Some things stay manual on purpose. A database failover that runs once a year is not worth full automation, but the runbook must be rehearsed, because an unrehearsed manual procedure at 03:00 is how a thirty minute incident becomes a four hour one. Anything genuinely destructive keeps a human in the approval path. Automation that runs rarely and is never tested is more dangerous than the manual process it replaced, because everyone assumes it works.
Capacity Planning Before the Outage Nobody Predicted
Capacity incidents are the ones that feel most avoidable in hindsight and are hardest to see coming, because systems do not degrade gracefully. They sit fine, fine, fine, and then queue.
Two kinds of capacity work exist and they need different treatment. Organic growth is slow and forecastable from your own trend data, and it gets handled by a headroom target and a quarterly review. Event driven demand, meaning a campaign, a product launch, a seasonal peak or a competitor's outage sending you their traffic, is spiky and needs a readiness process with a named owner and a date.
Queueing behaviour, and why eighty percent is not eighty percent
Utilisation and latency do not have a linear relationship. As a resource approaches saturation, queueing means latency climbs sharply rather than proportionally, which is why a system at seventy percent looks healthy and the same system at ninety percent looks broken. Planning headroom of thirty to forty percent on the critical path is not waste, it is the buffer that keeps the relationship in its comfortable region.
Little's Law is the other piece of arithmetic to carry around: concurrency equals arrival rate multiplied by latency. Two hundred requests per second at 250ms means fifty in flight at once, which tells you the size your thread pool and connection pool need to be, and tells you what happens when latency doubles under load. Concurrency requirements rise exactly when the system is struggling, which is the feedback loop that turns a slowdown into an outage.
Where the real ceiling usually is
Autoscaling groups and horizontal pod autoscalers create a comfortable illusion that capacity is elastic. It is elastic until it reaches the thing that is not. In practice the ceiling is almost always one of the same handful of places: connection limits on a single write primary, where twenty application pods each holding a pool of twenty connections will exhaust Postgres long before CPU becomes interesting and PgBouncer belongs in front of it. A rate limit on a third party you do not control. A background job queue with one consumer. A cache stampede after an eviction, where every miss hits the database simultaneously. Or file descriptor and ephemeral port limits, which is the one that looks like a network fault for the first hour of the incident.
Finding these before they find you is a deliberate exercise, not something a dashboard reveals on its own.
Load testing that resembles reality
k6 fits well into CI and is comfortable for teams who write JavaScript. Gatling suits JVM shops and produces strong reports. Locust is convenient where the team is Python first and the scenarios need real logic. Any of them will do. The tool is not what makes load tests useless.
What makes them useless is testing one endpoint at a fixed rate against an empty database. Real traffic is a mix of endpoints in realistic proportions, with a working set that does not fit in cache, with the write path included so you find the lock contention, with authentication in the loop, and with a ramp rather than a step so you can see where the knee is instead of only whether the cliff exists. Test the failure behaviour too. Knowing that you break at four thousand requests per second is less useful than knowing whether you shed load politely or collapse.
Chaos Engineering and Game Days
Chaos engineering has a reputation problem, mostly because it gets introduced as randomly killing things in production, which is a fine way to lose the argument permanently. The useful version is a controlled experiment with a hypothesis, a blast radius and an abort condition, and it usually starts nowhere near production.
Start with a game day, not a tool
A game day is a scheduled exercise where the team responds to a simulated or injected failure while somebody observes and takes notes. No automation required for the first several. The findings from a first game day are remarkably consistent across companies: the runbook references a dashboard that no longer exists, the alert routes to a rota that includes somebody who left in March, the escalation path is known by two people and neither is on call, and the rollback procedure has never been executed by anyone currently employed.
None of those are technical failures and none of them would have been found by a resilience tool. They are found by making people do the thing.
Experiments in a sensible order
Kill a single pod and confirm that traffic drains and the replacement joins without errors. Add 200ms of latency to a dependency and see whether your timeouts and circuit breakers behave or whether the delay propagates upward into a cascade. Fail a read replica. Return errors from a third party integration and check that the degraded path degrades rather than breaks. Expire a certificate in staging, which finds the renewal gap safely. Revoke an API credential. Fill a disk, which surfaces the logging path that fails closed. Simulate a zone loss if your architecture claims to survive one, because that claim is only as good as its last test.
Tooling when you get there: Chaos Mesh and LitmusChaos for Kubernetes, AWS Fault Injection Service where you are on AWS and want managed experiments, Gremlin where you want a commercial platform with guardrails included. Toxiproxy remains the simplest way to inject network conditions in staging.
Two rules we hold to
Do not run chaos experiments in production until you can run them in staging without surprises, and until you have an SLO with budget to spend, because an experiment consumes error budget and that is exactly how it should be accounted for. Second, always announce the first several. Unannounced experiments are for mature practices where the response process is already trusted. Running one before that point teaches people to distrust the exercise rather than to improve the system.
Reliability Is a Trade-off, Not an Absolute
The most useful thing an experienced reliability engineer will tell you is where to stop. One hundred percent is the wrong target for every system, and pursuing it burns money that had a better use.
Each additional nine costs substantially more than the one before, because it demands redundancy at another layer, automated recovery where a human used to suffice, and testing regimes that grow with the surface. Meanwhile the improvement becomes progressively invisible to your users, whose home connection, corporate VPN and mobile network are all considerably less reliable than four nines. Above a certain point you are buying a number that no customer can perceive.
Two questions decide it. What does an hour of downtime cost, in lost revenue, in credits, in support load and in reputation. And what does the next nine cost, in engineering months and in ongoing complexity. When the second number exceeds the first, stop and spend the money on features. That conversation belongs with your CFO in the room, and it is one of the more useful hours you will spend.
The corollary is that a single company wide reliability target is almost always wrong. Checkout, authentication and anything that touches money deserve a strict objective. An internal admin report can tolerate a bad afternoon. A batch job that runs overnight has a completion deadline rather than an availability target at all. Setting one number across everything means either over engineering the reporting tier or under protecting the payment path, and in our experience it is usually both at once.
There is a cultural benefit to saying this out loud as well. Teams told that every outage is unacceptable stop reporting small ones. Teams given an error budget spend it deliberately, ship faster while it lasts, and slow down when it is gone. The second behaviour is what you are actually buying.
Four Situations This Work Is Usually Bought For
These are patterns rather than particular customers, and they cover most of the conversations that start with the phrase our uptime is fine but.
1. The pager that cried wolf
A growth stage SaaS company where the rota fires thirty to forty times a week and roughly two of those turn out to be real. Engineers have started acknowledging alerts on reflex without reading them, which is the point at which the alerting system has become worse than nothing, because it now hides the genuine signal.
The work here is subtraction before addition. Audit every alert rule against a single question: when this last fired, what did a human do. Anything with no action for six months gets deleted rather than tuned. Cause based alerts on CPU, memory and restarts become dashboards. New paging alerts are SLO burn rate only, on the two or three user facing indicators that matter. What remains is a short list where every page is worth waking someone for, and the team starts trusting the pager again. That trust is the actual deliverable.
2. The platform that falls over every campaign
A consumer platform where marketing runs a promotion, traffic multiplies for ninety minutes, and the site degrades badly enough that the campaign loses money. The usual first response is to add application instances, which does not help, because the ceiling was never the application.
The investigation goes to connection pools and a single write primary almost every time, with a cache stampede as the second suspect: the moment a hot key expires under peak load, every miss goes to the database at once. Fixes are unglamorous and effective. Put PgBouncer in front of the database and size the pools deliberately. Add jittered expiry and single flight loading to the cache. Move anything that does not need to be synchronous off the request path. Then run a load test with the real endpoint mix and a realistic working set, and build a pre campaign readiness checklist with an owner and a date so the next promotion is a scheduled event rather than a surprise.
3. The availability number nobody has ever measured
A company carrying an availability commitment in customer contracts, written by a sales team years ago, that no system anywhere measures. Nobody knows whether they are meeting it, and the first person to check is often about to have a bad week.
Measurement comes first, from the edge, over a proper history, with a defensible definition of what counts as a valid request. Sometimes the finding is comfortable and the team has been quietly meeting the number all along, in which case you have gained a reporting artefact and some peace of mind. Sometimes the architecture cannot deliver it, and then this stops being an engineering problem and becomes a commercial one: fund the redundancy, or renegotiate the commitment at renewal. Either way, knowing beats not knowing, and knowing before a customer tells you beats both.
4. The engineer who left with the system in their head
One person built and ran the infrastructure, was the escalation path for everything, and has resigned. Terraform exists but has drifted from reality. The runbooks are three years old. Two alerts route to their personal phone number.
The first fortnight is archaeology, done while they are still reachable if you are fortunate: trace the request path end to end, reconcile the infrastructure code against what is actually deployed, find every credential and cron job, and write the on-call handbook that never existed. Then rebuild the rota so that no single person is the escalation path for anything. This is the engagement where an offshore team has an unusual advantage, because a new team has no choice but to write everything down, and the documentation that results is the thing you were missing in the first place.
How the Engagement Runs, Week by Week
Reliability work has an awkward property: the most valuable early actions are diagnostic, and diagnostics do not look like progress. So the shape below front loads the things you can see.
Weeks 1 and 2: measure and inherit
Access provisioned under your identity provider, architecture walked end to end, current alerting inventoried, interrupt logging started, and the last two quarters of incidents read. Deliverable is a written assessment: where you are, what is noisiest, what is riskiest and what would be quickest to improve. Occasionally this is where an engagement ends, because the finding is smaller than the fear.
Weeks 3 and 4: SLIs live, alerts pruned
Two or three indicators instrumented and collecting, with dashboards you can open. In parallel, the alert audit lands and the dead rules are deleted. This is usually when the pager gets noticeably quieter and the engagement starts feeling worthwhile to the people living with it.
Weeks 5 to 8: objectives, budgets and burn rate
Enough baseline data now exists to set defensible targets. The error budget policy is drafted, taken to whoever owns the roadmap, and signed. Burn rate alerting replaces the old paging rules. Our engineers move from shadow on-call to secondary during this window.
Weeks 6 to 10: incident process and first game day
Severity definitions written against your product, roles agreed, postmortem template and facilitation introduced, and a first game day run against a low risk failure. Expect it to find stale runbooks. That is the point of running it.
Weeks 8 onward: toil reduction and capacity
The interrupt log has produced a ranked list, and now the engineering happens: automation, self healing where appropriate, and the load testing and headroom work. This is the phase that runs indefinitely and compounds, because every hour of toil removed is an hour available for removing the next one.
Ongoing: the monthly report
SLO attainment and budget consumed, page count split into actionable and not, incident count by severity, mean time to detect and to mitigate, postmortem action completion rate, and toil hours against the previous month. Six numbers, one page, sent whether the month went well or badly.
How We Run Offshore Delivery, and What Goes Wrong
You are handing production access to people you have never met, in a country whose working day may barely overlap with yours. It is reasonable to be sceptical. Here is how each of the standard worries is handled, including the ones without a comfortable answer.
Will the quality hold up?
The honest observation about the Indian market for this specific skill: the pool of strong Linux, AWS, Kubernetes and Terraform engineers is deep and genuinely competitive with anywhere. The pool of people who have personally owned an SLO, argued an error budget policy with a product manager and run an incident as commander is much thinner, because relatively few employers here have run the discipline properly. Anyone claiming otherwise has not hired for the role recently.
So screening has to separate operational fluency from reliability practice. Ours has four parts. A debugging exercise on a deliberately broken system with real metrics and logs available, which reveals method rather than memorised answers. A coding exercise in Go or Python, because automation is the job and an SRE who cannot write maintainable code becomes the toil. A simulated incident where they hold the commander role and are scored on coordination rather than on finding the bug. And a written postmortem of that incident, which is the strongest signal we have found for the thing clients actually worry about, since on-call handover across timezones is fundamentally a writing job. Poor written English shows up immediately in that exercise, and it is the reason we test writing rather than interviewing for accent.
Who do we actually talk to?
The engineers, directly, in your Slack and your standup. We do not put an account manager between you and the people doing the work, because relaying a technical question through a third party is how requirements get lost. There is a named delivery lead for the commercial relationship and for escalation, but they are not a communication checkpoint.
How do we manage people we never see?
The same way you manage anyone competent, plus written discipline. A daily standup inside the overlap window, written rather than spoken so the record survives the timezone. Your sprint cadence and your tracker, not ours. All work in your repositories with pull requests reviewed by your engineers, because code review is where quality is actually controlled. The monthly reliability report described above. And a rule we hold ourselves to: anything decided in a call gets written down within the hour, or it did not happen.
Who owns the code and the data?
You do, from the first commit. Intellectual property assignment, confidentiality and data processing terms are settled in the master agreement before work starts, and we would rather your counsel drafted them than accept a vendor template. Everything we build lives in your accounts and your repositories throughout, so ownership is a matter of fact rather than a matter of trust. Where personal data is in scope, the processing terms and any transfer mechanism your jurisdiction requires are a question for your data protection counsel, and we work to whatever they specify.
What about production access and security?
Named individual accounts in your identity provider, multi factor authentication mandatory, permissions scoped to the role and reviewed on a schedule. No shared logins, ever. Standing administrative rights removed in favour of a break glass path that raises privilege for a limited window and produces an audit record. Access to your environments through your bastion or your zero trust proxy, on managed devices with disk encryption and screen lock enforced. Offboarding runs the same day. Where your sector imposes specific control frameworks, we implement the controls you specify and your compliance advisers confirm what is sufficient for your obligations.
What are the costs nobody mentions?
Ramp up is real. An engineer joining a system they did not build is useful on tickets within a couple of weeks and trustworthy as primary on-call somewhere between week six and week ten, depending on how much is documented. Budget for that rather than expecting week one productivity. Your own team spends time on onboarding, review and answering questions, and that time is genuine cost. Written first working is slower per interaction and faster overall, but the slower part is felt immediately and the faster part accrues later. And any shifted or night working carries its own cost, which is agreed openly at the start rather than discovered in a renewal conversation.
What if it does not work out?
Knowledge transfer is designed in from the beginning rather than bolted on at the end, which is mostly a matter of where things live. Dashboards in your Grafana. Alert rules and infrastructure code in your repositories. Runbooks in your wiki. Incident history in your tracker. If the engagement ends, nothing of consequence leaves with us, because none of it was ever hosted somewhere we control. Handover and notice terms are agreed in the master agreement before the first sprint, while everyone is still cheerful and reasonable.
Engagement Models
Dedicated SRE pod
Two to four engineers working only on your systems, in your tools, on your sprint cadence, joining your rota. Suits an ongoing reliability function where the work will keep evolving. Shift pattern and overlap window agreed before anyone is hired, and the team stays constant so hard won context does not have to be rebuilt every quarter.
Reliability programme
A defined piece of work with a start and an end: SLO definition and instrumentation, an observability rebuild, an alert estate audit, or standing up an incident process from nothing. Suits a team that has the capacity to run reliability day to day but not to design it. Scope is fixed after the assessment fortnight, not before.
On-call augmentation
Your team keeps their own working hours; ours covers the window that currently wakes people up. Requires runbooks and an escalation path to exist first, so it is usually preceded by a short programme to build them. The point is that your engineers stop losing nights to incidents that fall inside somebody else's business day.
Where This Sits Alongside Our Other Work
Reliability work rarely arrives alone. If the underlying problem is that the platform itself needs building or rebuilding rather than stabilising, that is cloud engineering work and it should happen first, because putting an SLO on an architecture you are about to replace wastes both efforts. Where you need people rather than a programme, our DevOps engineers in India cover the pipeline and platform side, and AWS specialists handle account structure, networking and the managed services underneath.
If the systems keeping you awake are machine learning services, the reliability questions change shape: models degrade silently while every infrastructure metric stays green, which is why MLOps handles drift, retraining and model quality gates as separate machinery. And for the conceptual grounding behind everything on this page, our long form SRE guide covers the discipline, the metrics and the team structures in more depth than a service page should.
Frequently Asked Questions About SRE Services in India
What is the real difference between SRE and DevOps in practice?
DevOps is a set of working practices about how software gets built and shipped. SRE is a specific implementation of those practices with two hard controls attached: a measured service level objective with an error budget that governs release decisions, and a cap on how much operational toil an engineer is allowed to absorb. If there is no SLO and no toil budget, what you have is operations with a pager, whatever the job titles say.
How do you choose an SLO number without guessing?
You measure first and set the target second. We instrument the service level indicator, watch four to six weeks of real traffic, and look at what the system already delivers. The starting SLO sits just below current performance, tight enough to fail when something genuinely degrades and loose enough that you are not paging at three in the morning for noise. It gets revised after the first quarter, once you have seen it burn.
Can a team in India really run our on-call rota?
For the overnight window in the US and the pre-dawn window in the UK, yes, and that is the one place the timezone gap works in your favour. An Indian working day of 09:00 to 21:00 IST covers roughly 23:30 to 11:30 US Eastern, which is your entire night plus a live handover in your morning. Full round-the-clock coverage from one region means someone works nights, and that is agreed and priced up front, never assumed.
What happens when the error budget runs out?
Whatever your error budget policy says happens, which is why the policy is written and signed by product before the first SLO goes live. The common version is a freeze on risky releases until the budget recovers, with reliability work taking priority in the next sprint. A budget with no consequence attached is a chart nobody reads. The policy is the part that turns the number into a decision.
Do we need SRE, or do we just need better alerts?
Often the second one. If your pager fires thirty times a week and two of those were real, the problem is alert quality, not reliability. Below roughly twenty five engineers, most teams get more from SLO based alerting, a sane rota and one owner for alert hygiene than from a separate reliability function. We will tell you when that is the case, because selling you a team you do not need ends badly for both of us.
How long before an offshore engineer can take a production page alone?
Our working rule of thumb is shadow on-call from around week three and primary on-call somewhere between week six and week ten, depending on how much of your system is documented. The gate is not time served, it is a checklist: they have run a game day, handled a real incident as secondary, written a postmortem, and can walk the request path end to end without opening a diagram.
What access does an SRE team need to our production systems?
Named individual accounts with multi factor authentication, scoped to what the role needs, plus a break glass path that raises privilege for a limited window and writes an audit record. No shared credentials and no standing administrative rights. Everything runs inside your identity provider and your controls. If your sector requires specific attestations, we work to the controls you name and your compliance counsel confirms what is sufficient.
What do we own at the end, and what happens if we stop?
You own all of it, and it lives in your accounts from day one: dashboards in your Grafana, alert rules in your repository, infrastructure code in your version control, runbooks in your wiki. Nothing important sits in a tool only we can reach. Handover and notice terms are set in the master agreement before work starts, so the exit path is agreed while everyone is still happy.