// Legacy system optimisation

Is your own system slowing you down?
We'll speed it up.

A slow .NET system is not the natural order of things. We profile, find the real bottleneck and fix it — without the risk and cost of a full rewrite.

Describe what's slow Large Czech bank: contract generation from 2 hours to 3 minutes. CPU from 95% to 15%.
// What's holding you back

Three myths about slow systems

Most legacy performance can be rescued. The question is where and how — not whether.

System crawls as data grows

An algorithm that handled a thousand records stalls at a million. Linear search in a collection, O(n²) loops, missing indexes — a profiler surfaces exactly these in minutes.

"It's legacy, it can't be sped up"

It can. Most performance problems sit in a handful of places: wrong data structure, missing cache, one SQL query pulling an entire table. All fixable.

Rewrite is the only way

A full rewrite takes years, costs more and usually carries the original problems into the new codebase. We look for what can be fixed first — and only recommend a rewrite when it genuinely makes sense.

// How we work

Six steps to real performance

Data first, code second. Every decision is grounded in measured numbers, not guesswork.

01

Find the real bottleneck

Profiling (dotnet-trace, PerfView, SQL Profiler) shows exactly where time is disappearing. Without data we fix nothing — otherwise we just move the problem.

02

Right data structures

HashSet instead of List for O(1) lookup, Dictionary for repeated key-based lookups. One structural change can mean 10× faster traversal over millions of records.

03

Caching (Redis, in-memory)

What doesn't change every request doesn't need to be computed every request. Redis or in-memory cache in the right place eliminates unnecessary database and CPU load.

04

SQL optimisation and indexing

N+1 queries, missing indexes, SELECT * over millions of rows — SQL Profiler exposes them and we fix them. Atlas Copco: from 15,000 to 3,000 lines of SQL.

05

Batch processing and event-driven refactor

Processing records one by one in a loop gets replaced with batch operations or an asynchronous event-driven approach. Result: a fraction of the original CPU and wall time.

06

Fix the root cause, not the symptom

A hotfix on top of a bad algorithm is not a fix. We refactor where the problem actually lives — with tests that verify nothing is broken.

// Proof

Real numbers from production

Large Czech bank: contract generation iterated over millions of records using linear collection searches. We replaced Lists with HashSet/Dictionary and added batch processing. Result: from 2+ hours to 3 minutes (40×), CPU from 95% to 15%. Atlas Copco: SAP pipeline reduced from 15,000 to 3,000 lines of SQL, migrated to an event-driven approach — ~80% less code, same business logic.

40× faster contract generation
95%→15% CPU reduction (Czech bank)
80% less code (Atlas Copco)
Read case studies
// FAQ

Common questions about optimisation

// Contact

You know what's slow.
We know why — and how to fix it.

Tell us what specifically is struggling — which system, which operation, what numbers you're seeing. We'll respond within 24 hours with an assessment of what we can do.

Describe what's slow