The system works. Nobody is sure why.

Your app has been running for years. Customers depend on it. It handles cases nobody remembers designing for, and it handles them correctly, most of the time. It got that way because smart people made careful decisions over a long stretch.

Then those people moved on. A developer left for another job. A contractor finished. The person who knew why the nightly import runs twice is now in a different department. What’s left is code, a few out-of-date wiki pages, and a growing reluctance to touch anything.

You feel it in small ways. Simple changes take weeks because everyone is afraid of side effects. New hires take months to become useful. One person is the only one who can deploy, and they’re getting tired of being on call.

None of this means the app is bad. Often it’s very good. It just isn’t written down, and there are no tests to tell you when a change breaks something.

What I do

I treat the running system as the source of truth and work backwards from it. The code, the database and the logs show what the app actually does, which is often different from what anyone believes it does.

I don’t rewrite the app while doing this. Understanding comes first. Any changes worth making go into a written list, ranked by risk, for you to decide on.

The running appcode, database, logsWhoever is still aroundhistory, hunchesRead and tracewhat it actually doesCharacterization testspin current behaviourWritten specoverview, data flows,runbooks, decision notesAny developercan pick it up interviews
Figure 1. Recovering the spec. The running system is read, pinned down with tests, and written up so the knowledge stops depending on memory.

When your developer is leaving

If you’re a founder and your only developer has handed in notice, or a contract is ending, the clock matters. While they’re still around, I work with them: short recorded walkthroughs, their answers to the questions that the code can’t answer, a check of where every password and account lives. Their knowledge is the most valuable thing in the building for those few weeks, and I treat it that way.

After they leave, the documentation, tests and runbooks mean the next person, whether that’s a hire, a freelancer or me, starts from a written map instead of from scratch.

Why me

I spent seven years as a senior engineer on a multi-tenant B2B SaaS that grew from about $4M to $13M in annual revenue, and ran its roughly 1TB Postgres database. A lot of that job was understanding code written long before me, by people who weren’t there to ask. I also build and run a live product on my own, so I write documentation knowing I’ll be the one reading it at two in the morning. I write about some of that work on my writing page, including audit logs and zero-downtime migrations.

Take a business like this one

The business in this section is a composite of the kind of company I talk to, not a named client. The numbers are the shape of the problem, not a case study.

Picture a specialty insurance broker whose quoting and policy system was built in-house nine years ago. It’s a web app on an older framework version with a Postgres database. The two developers who built it have left. A contractor keeps it running, but only one person can deploy, and nobody can explain why certain quotes get a manual-review flag. There are almost no tests. The business wants to add a new product line and nobody dares to start.

What I’d do for a business shaped like this:

  1. First week: map it. Read the code and the schema, list every scheduled job and outside service, and produce a first system overview and a list of the riskiest unknowns.
  2. Talk to whoever is left. The contractor, the underwriters who use it daily, anyone who remembers the original build. Each answer goes into the decision notes.
  3. Trace the manual-review flag and the other mystery behaviours to their source in the code, and write down what triggers them.
  4. Characterization tests around quoting and policy issue, the flows where a silent change would cost money.
  5. Runbooks for deploys and restores, tested by having someone other than the contractor follow them.
  6. The handoff pack. Overview, data-flow diagrams, runbooks, decision notes, AI-assistant instructions and a ranked list of recommended changes. The new product line can start from there.

The underwriters keep doing what only they can do: knowing which quotes are right and why.

What it costs

It starts with a small fixed-price assessment: a first system overview and a written list of the biggest risks and unknowns. You get something useful even if you stop there. The fuller documentation and test work is scoped from what the assessment finds. No retainer, and nothing you have to keep paying for to read your own docs.

What I need from you

Read access to the code, the database and the hosting. An hour or two with anyone who uses or remembers the system, and if a developer is leaving, as much of their time as you can get before they go. Then a person on your side who can tell me when the written spec doesn’t match how the business really works.