(07)Service

07 / 07

Good software should have room to grow.

Improve what you have. Prepare it for what comes next. We look after existing software and modernize it step by step — fixing what's fragile and updating what's outdated, while the system keeps running.

(01)The problem

When change becomes risky

Software that has served a business for years collects shortcuts, outdated dependencies and knowledge that left with former developers. Every change takes longer than it should, small fixes break unrelated things, and the safest-feeling option is to touch nothing — until something forces the issue.

Simple changes take weeks, and nobody wants to estimate them.
01
Releases are stressful and sometimes rolled back.
02
The system runs on versions that no longer receive security updates.
03
Pages and reports have slowed as the data has grown.
04
Only one person understands how a critical part works.
05

(02)The service

Maintain, modernize or rebuild

We start with an assessment: reading the code, the architecture, the infrastructure and the history of incidents, and talking to the people who use and support the system. The result is a plain account of what's healthy, what's risky and what's slowing you down.

Maintenance keeps a system secure and working — updates, fixes and small improvements. Modernization changes its structure — refactoring, replacing outdated parts, moving infrastructure — so it can keep evolving. Most systems need some of both.

We prefer incremental change: replacing one part at a time while the system keeps running, with the old part available as a fallback. A full rebuild is justified when the existing platform can't support what the business needs and changing it piece by piece would cost more. We'll show the reasoning either way.

Maintenance or modernization?

Maintenance or modernization?
MaintenanceModernization
GoalKeep it secure, working and currentMake it easier and safer to change
Typical workUpdates, fixes, monitoring, small featuresRefactoring, replacing components, migrating data or infrastructure
RhythmOngoing, in a regular cyclePlanned in stages
Risk kept low byTests and careful releasesRunning old and new side by side, one step at a time

(03)Use cases

Signs it's time

01

Support deadlines

Frameworks, runtimes or databases are reaching the end of their support.

02

Slowing delivery

Features take longer each quarter because the codebase resists change.

03

Growth it wasn't built for

More users, more data or more integrations than the original design expected.

04

Inherited software

You've taken over a system whose original developers have gone.

(04)Specializations

What it covers

Each area below sets out the problem it addresses, representative capabilities, an example and the outcome we aim for.

01

Software Maintenance

Keeping existing software secure, working and current.

Problem
Without regular care, small problems pile up into outages and security gaps.
Capabilities
  • Bug fixes and support
  • Routine updates and patches
  • Monitoring and incident response
  • Small improvements and changes
Example
A monthly cycle applies updates, reviews the error reports, fixes the most frequent issues and sends a summary of what changed.
Intended outcome
Fewer surprises, and a system that stays dependable.
02

Legacy Software Modernization

Moving older systems onto current technology, one step at a time.

Problem
Core systems run on technology that's hard to hire for, hard to change and close to losing support.
Capabilities
  • Assessment and a modernization roadmap
  • Replacing components incrementally
  • Data migration with verification
  • Running old and new in parallel
Example
An older order system is placed behind a new interface. Quotes move to new code first, then orders, then invoicing — while everything not yet moved keeps running unchanged.
Intended outcome
A modern system, reached without a risky switchover day.
03

Performance Optimization

Finding and fixing what makes software slow.

Problem
Pages, reports or background jobs have slowed down as data and users have grown.
Capabilities
  • Profiling and bottleneck analysis
  • Database query and index tuning
  • Caching and background processing
  • Load testing before and after
Example
A report that slowed as the data grew is profiled. A missing index and a repeated query are fixed, and the improvement is confirmed against the same data before release.
Intended outcome
Faster software, with the cause understood rather than guessed.
04

Technical Debt Reduction

Paying down the shortcuts that make change slow and risky.

Problem
Shortcuts taken to ship quickly now slow down every new feature.
Capabilities
  • Mapping debt by risk and cost
  • Refactoring in small, tested steps
  • Removing dead code and duplication
  • Better structure where code changes most
Example
The parts of the code that change most often — and break most often — are refactored first, each one covered by tests before it's touched.
Intended outcome
New features get easier to build, starting where it matters most.
05

Feature Development

Adding new capabilities to existing software, safely.

Problem
The business needs new features, but the codebase makes every addition risky.
Capabilities
  • Features built within the existing architecture
  • Tests added around the areas being changed
  • Feature flags for gradual rollout
  • Documentation of what changed
Example
A new approval step is added to an existing workflow behind a feature flag, tried with one team first, then switched on for everyone.
Intended outcome
New capabilities without destabilizing what already works.
06

Security & Dependency Maintenance

Keeping libraries, frameworks and runtimes current, and known vulnerabilities fixed.

Problem
Outdated dependencies carry known vulnerabilities, and every year behind makes the next upgrade harder.
Capabilities
  • Dependency and vulnerability audits
  • Framework and runtime upgrades
  • Secrets and configuration review
  • Automated update checks
Example
A framework two major versions behind is upgraded one version at a time, with the tests run at each step and breaking changes fixed as they appear.
Intended outcome
A system that keeps receiving security fixes and can be upgraded routinely.
07

Database Modernization

Improving how data is stored, structured and accessed.

Problem
Databases have become inconsistent or slow, or are tied to platforms that are going out of support.
Capabilities
  • Schema cleanup
  • Migration to supported versions or platforms
  • Query and index optimization
  • Backup, recovery and integrity checks
Example
Data moves to a supported database version through a verified migration: row counts and checksums are compared, and the old database stays available until the new one is confirmed.
Intended outcome
Data that's consistent, quick to query and safely backed up.
08

Cloud & Infrastructure Improvements

Making hosting, deployment and environments reliable and manageable.

Problem
Servers were configured by hand, deployments are manual, and nobody is sure how to rebuild the environment.
Capabilities
  • Infrastructure defined as code
  • Automated build and deployment pipelines
  • Environment and secrets management
  • Logging, monitoring and alerting
Example
A hand-configured server is described in code so it can be recreated on demand, and deployments run from a pipeline instead of someone's laptop.
Intended outcome
Releases become routine, and the infrastructure can be rebuilt when needed.
09

Testing & Reliability Improvements

Adding the tests and safeguards that make change safe.

Problem
Without tests, every change is a gamble and releases depend on manual checking.
Capabilities
  • Tests around critical business flows
  • Continuous integration
  • Error tracking and alerting
  • Release and rollback procedures
Example
Before any refactoring, automated tests are written for sign-in, checkout and invoicing, so the team knows immediately if a change breaks them.
Intended outcome
The confidence to change the system, backed by tests.
10

Software Evolution & Modernization Strategy

A clear plan for where the system should go, and how to get there.

Problem
Without a plan, modernization stalls between urgent fixes — or turns into an expensive rewrite.
Capabilities
  • System assessment and a risk map
  • Options: maintain, modernize or replace
  • A staged roadmap with milestones
  • The cost and risk of each option
Example
An assessment sets out three paths for an ageing platform — keep and maintain, modernize in stages, or rebuild — with the risks and effort of each, and recommends one.
Intended outcome
A decision made on evidence, with a plan the team can follow.

(05)In practice

Modernizing one piece at a time

The incremental approach, often called the “strangler fig” pattern, for systems that have to keep running.

  1. 01

    Assess

    We review the code, infrastructure and incident history, and map what's risky.

  2. 02

    Protect

    Tests and monitoring are added around the part about to change.

  3. 03

    Isolate

    A new interface sits in front of the old component, so nothing that calls it notices what happens behind.

  4. 04

    Replace

    The component is rebuilt and traffic moves to it gradually, with the old version kept as a fallback.

  5. 05

    Compare

    Results from old and new are compared until they match.

  6. 06

    Retire

    The old component is switched off, and the next one begins.

Illustrative. Some systems are better rebuilt; the assessment decides.

(06)Implementation

How we keep the risk low

01

Assess before changing

We learn how the system behaves today — including the undocumented parts — before changing it.

02

Small, reversible steps

Each change is small enough to test properly and to roll back if needed.

03

Tests as a safety net

Where tests are missing, we write them for the critical paths before refactoring.

04

Running in parallel

During migrations, old and new run side by side and their results are compared.

05

Knowing when to rebuild

A rebuild is right when the platform can't support what's needed and incremental change would cost more. We'll make that case with evidence, or not at all.

(07)Quality & reliability

Keeping it healthy

01

Monitoring in place

Errors, performance and availability are tracked, with alerts going to the right person.

02

Routine updates

Dependencies and runtimes are updated regularly, so each upgrade stays small.

03

Knowledge written down

Architecture, decisions and runbooks are documented, so no critical knowledge rests with one person.

04

Progress you can see

We track how often releases go out, how often things break and how long changes take, to show whether the system is improving.

(09)FAQ

Questions about Maintenance & Modernization

Usually modernize in stages: the system keeps running and the risk stays small. A rewrite makes sense when the platform can't support what you need and incremental change would cost more. We assess and recommend.

Yes. We start with an assessment and add tests around the parts we'll change, so we understand the system before touching it.

With the flows that matter most to the business — sign-in, payments, the core process. Tests there make every later change safer.

By changing one part at a time, running old and new side by side, and keeping the old version available until the new one has proven itself.

Security and dependency updates, monitoring, bug fixes and small improvements, in an agreed cycle with a summary of what changed.

Usually. We profile it first to find the real cause — often a query, a missing index or repeated work — and confirm the improvement against the same data.

(10)Contact

Start with anhonest assessment.

Tell us about the system, what it runs on and what worries you about it. We'll help you decide what to maintain, what to modernize and what to leave alone.