AmwerahSolutions
Run · Services

Maintenance and support

Taking over someone else’s system starts with archaeology, not development. Before anything can be safely changed, somebody has to find out what the code actually does — which is rarely identical to what everyone believes it does.

Inheriting a system

The typical handover is a repository, a production server, and a person who has already left. There is no documentation, or there is documentation describing a version from three years ago. Some of the code is dead but nobody knows which. There is a scheduled job whose purpose is unclear and which everybody is afraid to turn off.

So the first two to three weeks are reading, mapping and instrumenting: tracing the request paths that actually get traffic, identifying which code is live and which is vestigial, checking dependency health and licence exposure, and finding out what would happen if the database were lost right now. You get that as a written assessment with the risks ranked, before we propose changing anything.

Quite often the assessment says the system is in better shape than feared and needs three specific things fixed. Sometimes it says the opposite. Either way you are making the next decision with information rather than with anxiety.

The unglamorous work that matters

Dependencies rot. A library that is four years unmaintained is a security exposure and a hiring problem at the same time, and the cost of updating it rises the longer it is left. Keeping dependencies current is boring, continuous, and much cheaper than the emergency version of the same work.

The same applies to platform deadlines: an OS release that deprecates an API, a payment gateway retiring a protocol, a runtime reaching end of life. These have dates attached and can be planned for, and they are the most common cause of an urgent request that did not have to be urgent.

How support actually works

A named engineer who knows your system, rather than a ticket queue and whoever happens to be free. Response times defined by severity and agreed up front, with an escalation path that has a phone number on it.

We keep maintenance and new feature work on separate budgets, because when they share one, maintenance always loses. The consequence is a system that slowly becomes harder to change, and then a rewrite in three years that costs more than the maintenance would have.

Capabilities

What this actually covers

  • Codebase assessment

    A written map of what the system does, what is load-bearing, what is dead, and what the real risks are — ranked.

  • Takeover and stabilisation

    Getting an inherited system into a state where it can be deployed, monitored and changed safely.

  • Dependency and platform upkeep

    Security patches, library updates, runtime upgrades and OS deprecation deadlines handled before they are urgent.

  • Incident response

    Defined severities, agreed response times, a named engineer, and a written post-incident review that produces a fix rather than a blame.

  • Legacy modernisation

    Strangler-pattern migration — replacing a system in place, piece by piece, while it keeps running. Never a big-bang rewrite.

  • Documentation recovery

    Writing down what was never written down, starting with the parts a new engineer needs on day one.

How it runs

The sequence

Same shape on every engagement, so you always know what week you are in and what happens next.

  1. Archaeology

    Two to three weeks reading the code, tracing live request paths, checking dependencies and finding out what is actually load-bearing. Nothing changes during this period.

  2. Stabilise

    Monitoring, backups, a repeatable deploy and a tested rollback — before any feature work. You cannot safely change a system you cannot observe or restore.

  3. Pay down the urgent debt

    Security exposures and end-of-life deadlines first, ranked by risk. These have dates attached, which makes them plannable rather than dramatic.

  4. Steady state

    A named engineer, agreed response times, monthly reporting, and separate budgets for maintenance and new features so the first does not lose to the second.

What you get

Handed over, in your accounts

Not a demo and a login. These are the artefacts you keep, and they are what makes leaving us possible.

  • A written system assessment with risks ranked by likelihood and cost
  • A dependency and licence inventory, with the urgent items separated from the rest
  • Monitoring and alerting on a system that probably had none
  • A tested restore of the production database
  • A runbook covering deploys, rollbacks and the three things that break most often
  • A monthly report of what changed, what was patched, and what is coming due

Typically built with

  • Node.js
  • PHP
  • Laravel
  • Python
  • .NET
  • PostgreSQL
  • MySQL
  • Docker
  • Sentry

The selection principle is deliberately dull: largest hiring pool, longest support window. See why we choose these.

Questions

Maintenance & Support, answered

The things people ask on the first call, written down so you do not have to.

All twenty questions
Can you take over a project from another agency?

Yes, and it is a normal way for us to start. The first two to three weeks are assessment rather than development — reading the code, mapping what actually runs, checking dependency and licence health, and testing whether the backups restore. You get a written assessment with risks ranked before we propose any work. We would rather tell you the system is fine and needs three fixes than sell you a rebuild you do not need.

What does a maintenance retainer include?

Security patching, dependency and runtime updates, platform deprecation deadlines, monitoring and incident response with agreed response times by severity, and a monthly written report of what changed and what is coming due. New features are quoted separately and deliberately so — when maintenance and features share one budget, maintenance always loses, and the bill for that arrives as an expensive rewrite two or three years later.

Our system is old. Should we rewrite it?

Usually not all at once. Big-bang rewrites have a poor record: they take longer than planned, the old system still needs maintaining throughout, and the new one has to reach parity with a system whose behaviour was never fully documented before it can replace it. The pattern that works is strangler migration — put a routing layer in front, replace one area at a time, and let the old system shrink. It is less satisfying and much more likely to actually finish.

How fast do you respond when something breaks?

By agreed severity, written into the engagement rather than implied. A production outage gets a response within an hour during working hours and has an out-of-hours escalation path with a phone number on it. A cosmetic issue gets picked up in the next cycle. What we will not do is promise a one-hour response to everything, because a promise like that is either untrue or extremely expensive, and both are worse than an honest tier.

Thinking about maintenance & support?

Start with a call rather than a brief. Thirty minutes, no deck, and an honest answer about whether we are the right people for it.