Code Rescue & Support · Houston, TX

The code nobody wants to touch still has to change.

The developer left, the vendor folded, or the contractor stopped returning calls. What's left is a system the business runs on, with no documentation, no tests, and no safe way to change it. That system can still be brought back under control — but reading it comes before quoting it. The first deliverable is a written map of what you actually have.

Sound familiar?

Six symptoms of an orphaned system

Every one of these is recoverable. The order you tackle them in is the part that matters.

The person who wrote it is gone

No handover, no documentation, and a system the business runs on. Everyone has quietly agreed not to touch it in case it stops working.

Nobody can build it from source

The code is there, but nothing anyone does produces a running copy. The only working version is the one already deployed, and nobody knows how it got there.

It only runs on one machine

One box, one disk, and a backup nobody has ever restored from. The recovery plan is a phone call to somebody who left the company.

Every change is a gamble

A one-line fix might break something unrelated, and there are no tests to say which. So the backlog grows and nothing ships.

The runtime is past end-of-life

An unsupported language version, a framework whose last release predates your newest hire, and security patches that stopped arriving years ago.

The vendor stopped answering

The shop folded, the contractor went quiet, or the price of a small change became absurd. You own the system on paper and cannot change it in practice.

Capabilities

What a rescue actually consists of

Four stages, in order — each one is only safe because the one before it happened.

Assessment & Documentation

The first deliverable is a written map of your system, not a line of code.

  • A read-through of the source, the database, and whatever the cron jobs do
  • Architecture, data-flow, and integration diagrams that match what runs today
  • The undocumented business rules written down in language your team reads
  • A risk register: what breaks first, what is unfixable, what is simply ugly
  • A runbook for the backups, batch jobs, and manual steps one person remembers

Tests & Safety Net

Characterization tests that pin down behaviour nobody can explain any more.

  • A reproducible build: one command, a clean machine, the steps written down
  • Characterization tests recording what the system does today, bugs included
  • Approval tests over the reports and files that must not change by accident
  • A staging copy with realistic data, so nothing gets tried in production first
  • Source control and a deploy that isn't someone copying files onto a server

Security & Dependency Hardening

End-of-life runtimes, known-CVE packages, expired certificates, secrets in the repo.

  • An inventory of every dependency with its known CVEs and end-of-life date
  • Runtime and framework upgrades taken in steps the test suite can verify
  • Credentials pulled out of source control and rotated, not merely deleted
  • Certificates, backups, and restores checked by actually restoring one
  • Patching ordered by real exposure rather than by severity score alone

Ongoing Support & Maintenance

A named person who answers, an agreed response time, and a second pair of eyes.

  • A retainer with a written response time for the failures that stop work
  • Small fixes and enhancements without a new statement of work each time
  • Patching, backups, certificate renewals, and monitoring that pages a human
  • Two people who know your system, so the bus factor stops being one
  • An exit that hands back documentation and access, whenever you want it

Sometimes the code isn't the problem

If the platform underneath it is genuinely dead — unsupported, unlicensable, or welded to hardware you can't replace — then the honest recommendation is a phased migration, and the documentation and tests we build become the specification it runs on. If the complaint is really about the process the software encodes rather than the software itself, point Lean Six Sigma at it before anyone changes a line.

Either way, the first deliverable is unchanged: a written map — what the system does, what it touches, what will break first, and what it would cost to fix each part. That document is yours whether the next step is us, your own team, or nobody at all for another two years. An assessment that ends right there is a legitimate result, not a failed sale.

Where it pairs well

  • A phased migration once the map shows the platform itself is the constraint
  • Integration work so the rescued system can finally talk to everything else you run
  • Performance work — plenty of "it's too slow" turns out to be fixable without a rewrite
  • New features built as custom software beside the old core, once tests make that safe
  • The case studies — inherited systems, described the way the work actually went

Your source code, under NDA

Handing over a codebase is a real thing to ask. Scoped access, an NDA when you want one, and terms written down before we read a line.

Documentation before code

We won't quote a fix for a system we haven't read. The assessment comes first, and it's short, fixed-price, and yours to keep.

Nothing here is a lock-in

Support runs as a retainer you can end, with documentation and access handed back on the way out. Further development works on the same terms.

If it should move instead

When the verdict is replace rather than repair, that becomes a migration with a parallel run — not a weekend and a prayer.

Toolkit

What we work in

Python C# / .NET PHP JavaScript & TypeScript VB6 & VBA Classic ASP Microsoft Access SQL Server PostgreSQL MySQL SQLite Git history archaeology Characterization testing Approval testing pytest Playwright Docker Linux & systemd Nginx & IIS CI pipelines Dependency & CVE scanning Secrets management TLS certificates & renewal Backup & restore drills Static analysis Structured logging & alerting Runbooks & architecture diagrams
Questions we get

Straight answers

We have no documentation, no original developer, and possibly no source. Will you still take it?

Yes — that is the job. We start from what is actually running: the server, the database, the scheduled jobs, and the people who use it every day. Missing source makes it a harder start, not an impossible one; a running system tells you most of what it does. The first deliverable is a written map of what you have, and you keep that whether or not you hire us for anything after it.

Shouldn't we just rewrite it?

Sometimes, and we will say so plainly. But rewriting a system nobody understands is how companies end up running two broken systems instead of one — the rewrite always misses the rules nobody wrote down. Documenting and testing first is cheaper, and it produces the specification the rewrite needed anyway. If replacement really is the answer, it becomes a phased migration with a parallel run, not a big-bang weekend.

How do you test code nobody can explain?

Characterization tests. Rather than asserting what the code should do, we record what it does today — outputs, files, reports, resulting database state — and lock that in. Existing bugs get pinned along with everything else, deliberately, because the point is to detect change rather than to judge correctness. Once that net exists, an upgrade stops being a gamble and becomes a diff you can check.

You would have our source code and production data. How is that handled?

Under an NDA whenever you want one, with access scoped to the people doing the work and revoked at the end. We work inside your repositories and your accounts wherever that is possible, take the least data that does the job, and test against masked or reduced copies when production data isn't necessary. Our confidentiality page states the whole arrangement in plain terms.

Can we skip the assessment and just put you on call?

Not on day one, and the reason is worth stating plainly. Promising a response time on a system we have never read is a promise we cannot keep honestly — at 3am we would be reading the code for the first time, on your outage. A short assessment gets us to the point where a response commitment means something. After that, a retainer is the normal arrangement.

What does this cost, and where does it stop?

The assessment is fixed-price and short, because it is the only part anyone can scope before reading the code. What it produces is a prioritized list with estimates: what is urgent, what is merely ugly, and what you can safely leave alone for years. You can stop there and hand that document to your own team — it is written to be used that way.

There's a system you'd rather not think about.

Point us at it. What comes back is a written assessment: what it does, what state it's genuinely in, and what making it safe to change would involve.

Start the conversation