001 Software care

We fix the
software
your business
runs on.

The system that takes your orders, books your appointments or holds your customer records. If it still works but nobody maintains it anymore, that’s the thing we fix.

Tell us what breaks — free reply Write to us

The short version

What we do
Repair, secure and modernize software that already has users Audits, security work, migrations, and monthly care afterwards
Who calls us
Owners of business software nobody maintains anymore The system still runs. The person who understood it is gone
Also in scope
The front end, the hosting, and the move off either React and the rest of it included, when that is what the system needs
Not our work
A new product from scratch, marketing sites, design
Start here
Write and tell us what breaks A written reply within one business day, from an engineer

002 Is this you

You don’t need to know what’s wrong. Just pick the sentence that sounds familiar.

003 What's actually going on

Software goes bad even when nobody touches it.

Still in use, no longer receiving security fixes

Magento 1
past end of life for 6 yrs 2 mths since June 2020
PHP 7.4
unpatched for 3 yrs 9 mths since November 2022
Joomla 3
past end of life for 3 yrs 1 mth since August 2023
Node 16
unpatched for 3 yrs since September 2023
MySQL 5.7
past end of life for 2 yrs 10 mths since October 2023
PHP 8.0
unpatched for 2 yrs 9 mths since November 2023
CentOS 7
past end of life for 2 yrs 2 mths since June 2024
Python 3.8
unpatched for 1 yr 11 mths since October 2024
Drupal 7
past end of life for 1 yr 8 mths since January 2025
PHP 8.1
unpatched for 8 mths since December 2025

Your system didn’t change. Everything underneath it did.

Software is built on other software — the language it’s written in, the pieces other people wrote, the server it sits on. All of those get security fixes for a few years, and then the people who made them stop. Your system keeps working. It just stops being protected.

Most owners find out in one of three ways. Your insurance company asks a question on the renewal form. A customer’s IT department sends you a security questionnaire before signing. Or somebody gets in, and you find out last.

None of that means your business is badly run. It means the one person who used to watch this is gone, and nobody replaced them.

004 What we do

We look, we tell you in plain English, then we fix it — in that order.

Nothing gets rebuilt from scratch. Your system knows how your business works. We keep that and replace what’s rotten underneath it.

What each stage costs you in time

Audit
Five business days Written report you own
Safe to touch
Two to three weeks Backups, alarms, a test copy
Migration
Quoted from the audit One number, it does not grow
Downtime
None so far Switch-overs at night, with a way back
Your web addresses
Unchanged Nothing you built up in search is lost
  1. We look first

    Five days. We read the code, the server and the history. You get a written report: what’s there, what’s dangerous, what it would cost to fix, ranked by what it’s costing you now. Plain language, no jargon.

  2. We make it safe to touch

    Backups that actually restore. Alarms that tell us before they tell you. A copy of your system where changes can be tested without customers seeing them. Most businesses in this position have none of these three.

  3. We move it somewhere modern

    Off the old server, onto proper cloud hosting with a shield in front of it. Your web addresses stay exactly the same, so nothing you’ve built up in Google is lost. Done at night, with a way to undo it.

  4. We bring it up to date

    Step by step, each one live and checked before the next. Not one big scary switch-over. If something’s wrong we’re one small step back, not a month back.

  5. We keep watching it

    Monthly. Patches, updates, the old bugs everyone gave up on, and one page each month telling you what got blocked and what got fixed. If it goes down at 3am, the alarm comes to us.

If your system has to reach pharmacies or prescribing networks, there is a separate page on Surescripts, ScripSure and pharmacy ordering.

005 What happens if you write to us

Here’s the whole thing, so nothing surprises you.

The method in full

006 The obvious question

“What if you disappear too?”

You got burned once. Here’s how this is built so it can’t happen the same way twice.

  1. Everything lives in accounts you own

    Your cloud account, your code repository, your domain, your card on file. We get invited in. We’re never the owner. If we vanish tomorrow you lock the door and keep everything.

  2. Every change is written down

    Not in our heads. Every edit is recorded with a note explaining why, in a place you control, that any other developer can read.

  3. You get a handover document

    How your system works, where everything lives, how to deploy it. Written so a new developer can pick it up in a day. Updated as we go, not promised at the end.

  4. Monthly, cancel any month

    No annual lock-in, no notice period, no cancellation fee. If we stop earning it, you stop paying. That’s the only guarantee that means anything.

007 Work we've done

What the work actually looks like, in detail.

  1. Aster · Internal business system

    The server that could not be updated

    The single machine the whole company worked on had gone three years without a security update, because updates for it had stopped being made. It had never been restarted in almost three years, its main disk was 96% full, and its login had recorded more than forty-five thousand failed attempts. The software moved to hosting that can be kept current, exactly as it was, and the old machine was checked, emptied and switched off for good.

    Read the full story

    Found
    Three years without a security update, and no way to get one
    Now
    The same software, running where updates are still published
    3 yrsSince the last security fix
    45,878Failed login attempts
    0Lines rewritten
  2. Aster · Internal business system

    640 GB with no second copy

    Every customer file the company held — uploads, documents, signed agreements going back years — lived on one machine and nowhere else. An old routine that was supposed to copy them elsewhere had been failing into a destination that no longer existed. The first thing the migration did was make a second copy, which was also the first real backup this data had ever had; today it sits under a daily backup with restore points kept for three months, and a restore has been performed rather than assumed.

    Read the full story

    Found
    The only copy of every customer file was on one machine
    Now
    Copied, verified, and backed up daily with tested restores
    640 GBWith no second copy
    3Kinds of file at risk
    36Restore points today
  3. Aster · Internal business system

    Screens that took half a minute

    The lists staff live in — their own work, their own clients, this month's payments — were reading entire tables from top to bottom on every single load, because the software had no quick way to find the rows belonging to one person. One of those lists also re-counted a table of 829,000 rows once for every row it displayed. Nobody had reported it, because it had always been that way and slow is not the same as broken.

    Read the full story

    Found
    Six of the busiest lists read every row in the table, every time
    Now
    Direct lookups instead of full scans, and one count instead of thirty
    829kRows re-counted per screen
    6Lists doing full scans
    0Features changed
  4. Aster · Internal business system

    A public form that handed its records back

    A form collecting names, dates of birth and contact numbers had a second behaviour nobody had asked for: the address that accepted a submission would also list the submissions back, 3,788 of them, to anyone who knew how to ask. It was closed in the software itself rather than by unticking a permission, so that no future settings change can re-open it, and the now-meaningless permission was deliberately left in place as a second lock.

    Read the full story

    Found
    The form's own address would list every record it had ever taken
    Now
    Reading removed in code, so no setting can turn it back on
    3,788Records reachable
    1Way in, closed in code
    0Settings left to trust
  5. Aster · Internal business system

    Somebody was copying the whole directory

    The public directory that the business exists to publish could be extracted in its entirety in about sixteen requests, because a single page request could be persuaded to return more than a thousand records at once. Automated traffic was doing exactly that, on a schedule. A guard now limits how much one request can pull, the edge blocks the pattern rather than counting it, and every real page on the site was replayed before and after to prove nothing a visitor does was affected.

    Read the full story

    Found
    The whole directory extractable in about sixteen requests
    Now
    Bulk copying priced out, ordinary browsing untouched
    16Requests to take everything
    1,167 → 24Records per request
    0Pages broken
  6. Aster · Internal business system

    Updates that stopped signing everyone out

    Releasing a change logged every user out and lost whatever they had half-finished, so releases were pushed to evenings and then postponed, which made each one bigger and riskier than the last. Sign-in state now lives outside the software, two copies always serve, and a release swaps them one at a time with an automatic undo if the new one misbehaves. Releases happen in the middle of the working day and nobody in the office can tell.

    Read the full story

    Found
    Every release signed all staff out and lost work in progress
    Now
    Releases mid-morning, nobody signed out, automatic rollback
    0People signed out by a release
    2Copies serving at all times
    1Automatic undo, no human
  7. Harbor · Online store

    Which payment system the money runs through

    Four payment providers were installed on a store that had taken more than 160,000 orders, and the plan was to rebuild the ones people remembered. One query over three years of orders showed that a single provider carried 94% of revenue and 98% of active subscriptions, while the one everybody named carried about two per cent. The same query surfaced the expensive part nobody had costed: the stored card details behind every recurring customer live with that provider and have to move with it.

    Read the full story

    Found
    The rebuild order was being decided from memory, not from the ledger
    Now
    One query, an afternoon, and a plan built on the actual numbers
    94%Of revenue on one provider
    4Providers installed
    1Afternoon to find out
  8. Redwood · Customer-facing platform

    One customer could see another's records

    One database served many separate customer organizations, under a rule that has to hold in every single place: organization A never sees organization B. Fifteen places in the software returned records without checking which organization was asking, clustered exactly where you would expect — in detail views and in listings written before the platform had more than one customer. Nothing crashed and nobody reported it, which is what makes this class of gap almost impossible to catch by reading changes as they go by.

    Read the full story

    Found
    Fifteen places returned records without checking who was asking
    Now
    One rule, asked at every point a record is handed out
    15Places without the check
    1Rule, applied everywhere
    0Reports from users
  9. Redwood · Customer-facing platform

    Anyone could say an order had shipped

    Six outside systems sent automatic updates into the platform, and two of them were believed without question — the code that verified senders ended in a fallback that answered "valid" for anything it did not recognise. Nobody could have read records this way; they could have written false ones, which is quieter and more expensive to unpick. Verification went in over three stages so the platform never went down, and twenty-eight tests now cover forged and replayed messages.

    Read the full story

    Found
    The sender check ended in a fallback that answered "valid"
    Now
    Every sender verified on arrival; an unknown sender is refused
    6Systems sending updates
    2Believed without proof
    28Tests added
  10. Redwood · Customer-facing platform

    The feature broken for years

    Two live paths in the software referred to parts of the system that no longer existed, left behind by a rename during an old restructure. One of them checked whether a component was available, found it was not, and returned an error — on every single request, for years. There were no bug reports, because people had quietly stopped trying. The references were corrected, the genuinely unwanted path was deleted rather than repaired, and the build now refuses a name that does not resolve.

    Read the full story

    Found
    Live code referring to parts of the system that no longer existed
    Now
    References corrected, dead paths deleted, the build now catches it
    503Returned, every time
    0Bug reports
    2Kinds of broken
  11. Redwood · Customer-facing platform

    Personal details in the error logs

    When a request failed, the software recorded the whole request so somebody could understand it later — which meant names, dates of birth and everything else the form carried, written into a file with weaker access control than the database it came from. A second, quieter version of the same problem was writing straight to disk, invisible to the logging settings entirely. One filter now sits on the single path every error already takes, and sixty-four tests keep it honest.

    Read the full story

    Found
    Failing requests wrote whole request contents into the log
    Now
    One filter on the path every error takes, with tests
    1Place it is decided
    0Rules to remember
    64Tests on the filter
  12. Redwood · Customer-facing platform

    Live passwords in the source code

    The production database password, a payment provider key, mail credentials and several partner keys were sitting in files inside the code — and therefore in its history, in every copy anyone had ever made, and in every backup of those copies. Moving them into a managed store took about a day. The half that takes longer is rotation: until each value is reissued, the old ones are still live wherever they were copied, and that is the part this write-up refuses to round up.

    Read the full story

    Found
    Live credentials in tracked files, plus a backup copy of one
    Now
    Values injected at run time from a managed store, never in the code
    1Day to move them
    0Credentials left in the code
    EveryCopy still holds the old ones

01 / 12 The server that could not be updated

Every write-up is anonymized and every one of them says what we would do differently. All of the work.

008 What it costs

You shouldn’t have to book a call to find out the price.

Write to us Describe what breaks in your own words. A person reads it and replies within one business day with what we think is happening and whether we are the right people for it.
Full audit Five business days. Written report you own and can take to anyone.
$2,400
Making it safe to touch Backups, alarms, a test copy. Two to three weeks.
Starts at $6,000
Moving and modernizing One fixed number, quoted from the audit. It does not grow later.
Quoted
Monthly care Watching, patching, updating, old bugs, monthly report, 24/7 if it goes down.
$900–$2,500
per month

The audit fee comes off the migration price if you go ahead. If you don’t, you still keep the report. Why isn’t the migration price listed? Because anyone who quotes a migration before reading your code is guessing — and guessers come back later asking for more.

Prices in full

009 Honest limits

Things we don’t do, so you don’t waste a week finding out.

Scope, in one screen

Systems
Existing, with real users
Most often
PHP, and what runs underneath it
Also
Node, Python, the front end, the hosting, the move
New connections
Yes, into a system that already runs
Back ends we skip
.NET, Java, Ruby
Not
New products from scratch, marketing sites, design
We decline
Work not worth doing In writing, with the reason

We don’t build new products from scratch. We repair and modernize systems that already exist and already have users. Connecting one of those to an outside service is not a new product — building that connection where there wasn’t one is part of the job, and often the reason someone writes.

We don’t do marketing websites, design or SEO. If your site is just brochure pages, you don’t need us and we’ll say so.

We don’t take on .NET, Java or Ruby back ends. Everything else that a business system is actually made of, we do: PHP most often, Node and Python services beside it, the front end on top of it, the hosting under it, and the move to something newer.

We won’t take the job if it isn’t worth doing. Sometimes the honest answer is that replacing a system costs less than repairing it. You’ll get that in writing, and you’ll have paid for the audit that told you so — which is cheaper than finding out halfway through a migration.

010 Questions people ask

Questions people ask

I already have a developer. Is this a problem?

No, and you should keep them. Most of our work sits next to an in-house developer who is good at building features but has never had to move a system, harden it, or answer a compliance questionnaire. Different job. We do that part and hand it back.

How do I even know something’s wrong?

Ask whoever maintains your software two questions in writing: when the server’s operating system stops receiving security updates, and when somebody last restored a file from your backups. Both answers are dates. If neither has one, that is the finding.

Can you do this without taking my system offline?

Yes. That’s the entire reason we work in stages instead of rebuilding. Across the work written up on this site, no switch-over took a system offline. They happen out of hours, with a tested way to undo them.

Do I have to change hosting companies?

Usually yes, and that’s often where most of the risk is. But the new account is opened in your name with your card — you own it, we’re just invited in. You can remove us at any time and everything keeps running.

Will I lose my Google rankings?

No. Keeping every existing web address exactly as it is comes before everything else. This is the single most common way a rebuild quietly destroys a business, and it’s why we don’t rebuild.

Who actually reads my code?

Greg or Elguja — the two people whose photographs are on the about page. We own the practice and take on few systems on purpose, so you are never handed to somebody you have not met, and there is nobody behind us to escalate to.

Why are there no client names or logos here?

Because most of this is security work on systems that are still running. A logo next to a write-up about what was wrong tells a stranger exactly where to go looking. Every case on this site is anonymised for that reason, and yours would be too.

What do you need before a full audit?

A signed NDA, and read-only access to the code and to the server it runs on. That is the whole list. The NDA is signed before anything is opened — yours, or one we put in place — and nothing is changed while we look.

What if you look and tell me it’s fine?

Then it’s fine, and you’ve spent $2,400 to stop worrying about it. That happens. We’d rather say it than invent work.

I’m not technical at all. Is that a problem?

It’s normal. Most of our clients own the business and hired someone else to handle this. Everything you get from us is written for you, not for a developer — and if something isn’t clear, say so and it gets rewritten.

Will you sell my email or put me in a funnel?

No. Your enquiry goes to one inbox and a person reads it and replies. There is no mailing list and no automated follow-up sequence — nothing is sent to you unless someone writes it. If you don’t reply, you never hear from us again.

011 Start here

  1. Tell us what actually breaks.

    No specification needed. Plain English is exactly right — most of the useful enquiries are three paragraphs written by somebody who is not technical.

    So we can look at the system before we reply.

    What breaks, how often, and what it costs you — plus anything you have already tried. A sentence or two is enough to start.

    This is where the reply goes.

    A person reads this. Not an AI assistant, not a chatbot, not an automated sequence. One written reply from an engineer who would do the work, within one business day. If we’re not the right fit, we’ll say so and point you somewhere better. Your address goes to one inbox and nowhere else.

012 Reading

Written for the person who signs the check.