Halis Technology chris@halistechnology.com

Software you can't switch off, replaced and repaired.

Halis Technology is the consulting practice of Chris Grimes, a principal engineer in St. Louis. It rebuilds legacy systems, modernizes codebases, and fixes slow or unstable software for large companies.

Email chris@halistechnology.com

Old system, Oracle PL/SQL
FUNCTION CALC_LT_FEE (
  P_BAL  IN NUMBER,
  P_DAYS IN NUMBER
) RETURN NUMBER IS
  V_FEE NUMBER := 0;
BEGIN
  -- CHG 03/2004: MIN FEE 25.00
  IF P_DAYS > 30 THEN
    V_FEE := P_BAL * 0.015;
    IF V_FEE < 25 THEN
      V_FEE := 25;
    END IF;
  END IF;
  RETURN ROUND(V_FEE, 2);
END CALC_LT_FEE;
New system, TypeScript
export function lateFee(
  balanceCents: number,
  daysLate: number,
): number {
  if (daysLate <= 30) return 0;
  const fee = (balanceCents * 15) / 1000;
  return Math.max(Math.round(fee), 2500);
}
The test it has to pass first
test.each(recordedCases)(
  "same answer as the old system",
  (c) => {
    expect(
      lateFee(c.balanceCents, c.daysLate),
    ).toBe(c.oldFeeCents);
  },
);

The old system is the specification. A rebuilt piece replaces the original only when it gives the same answers on recorded cases. The code is an illustration.

What you can hire Halis for

Legacy system replacement

Rebuild an aging system next to the one it replaces, move the data, and switch the business over without downtime. Turning old code into new code is the work LLM tools do best, because every rebuilt piece can be tested against what the original does.

Past work: a contract management system migrated with every record intact, and a new application replacing a legacy system used by research teams worldwide.

Codebase modernization

Keep the system and fix the code. Add the tests it never had, automate the release pipeline, and refactor in small steps that are each checked so behavior doesn't change.

Past work: an enterprise codebase taken from no unit tests to more than 95% coverage, with the testing patterns adopted by the wider team.

Performance and stability fixes

Find the bottleneck or the failure and remove it: batch jobs that run for hours, queries that time out, AWS and Kubernetes deployments that won't stay up.

Past work: transaction processing cut from hours to minutes, and a document management system on Kubernetes stabilized in two weeks after it had blocked earlier teams for two years.

How engagements work

Assessment
A short, fixed-price review of one system. It ends in a written plan: what to replace, what to keep, and in what order.
Project
A fixed scope and price under a statement of work, delivered in stages you can check as they land.
Retainer
A set number of hours each month for a system that is already in production.

Who is behind it

Chris has spent 20 years building software inside large enterprises, most recently a Fortune 500 reinsurer, a Federal Reserve Bank, and a global life sciences company.

He led the build of an application that opened a new business line and booked $150 million in contracts in its first quarter, and directed four engineering teams responsible for financial systems that handle billions of dollars a year.

Day to day he works in TypeScript and Node.js, React, AWS, Kubernetes, and Postgres.

Chris Grimes on LinkedIn