For the last few months we've been quietly using Claude Code — Anthropic's AI coding agent — to help migrate a 26-year-old client system from Servoy Smart Client to Servoy's modern Titanium NG web client. Tens of thousands of delegates a year run on this database. Tens of thousands of lines of JavaScript and 80+ tables. The kind of project that, ten years ago, would have meant a 12-month engagement and constant context-switching for the lead developer.
It's still a serious engagement. But here's what's changed.
What Claude Code actually does
Claude Code is an AI agent that lives in your terminal and has direct access to your codebase. It can read files, run commands, edit code, run your tests, and remember things across sessions. It's not autocomplete. It's closer to a pair-programming partner who never gets tired and has read every line of your project.
I still drive. Claude executes. Every change I review before it lands. But the speed at which we can audit, refactor and verify is in a different league.
Three things it's been good at
1. Catching framework-specific anti-patterns
Servoy has a thicket of rules — what you can do in the NG client versus the Smart Client, how foundsets behave, when JSDoc annotations actually matter to the analyzer. Claude has seen enough Servoy code to flag things the IDE's analyzer misses. Things like "this dialog needs a separate named foundset or it will leak to other forms on the same datasource." We hit that exact bug; Claude saved us from hitting it twice.
2. Refactoring with confidence on large surfaces
When you change one form in a Servoy solution, you might be touching ten dependent relations and three modules. Doing this by hand, with grep and a notepad, is what made big-bang migrations feel impossible. Claude maps the impact across files, proposes the change set, runs the tests, and only then do I commit. What used to be a half-day exercise is sometimes twenty minutes.
3. SQL against an unfamiliar schema
The client's PostgreSQL has 80+ tables, audit columns on every one, 26 years of accumulated business logic and a non-trivial number of "we'll fix this later" patterns. When I need a diagnostic query — "show me every booking whose invoice doesn't reconcile to its conference line items" — I describe it, Claude writes the SQL, and we iterate. It's quicker than digging through the schema myself, and the queries are sharper than what I'd write off the cuff.
The caveats — being honest
Claude doesn't know our client's business. It doesn't know that CPD conferences for surveyors have different VAT rules from dental ones, or that this client's invoice numbering is human-rememberable on purpose. The domain knowledge has to come from us — and from listening to the client, which we still do the old-fashioned way.
You also can't run an AI agent and walk away. Every change Claude proposes I read before it lands. Every test result I verify. When something goes wrong, the post-mortem is the same as if I'd written the bug myself. The tool amplifies an experienced developer; it doesn't replace one.
What this means for our clients
It means a developer with 29 years of domain knowledge can move faster than that experience used to allow. Big refactors are less risky because their impact is mapped. Documentation, tests and diagnostics we used to defer because they were "expensive" we now do as part of normal work. Time to first usable prototype shrinks.
If you've got an aging FileMaker or Servoy system you've been afraid to touch because the migration looks terrifying — drop us a line. We'd love to talk about it.