God class splitting
Oversized classes are decomposed into coherent smaller ones, with every call site across the codebase updated automatically and consistently.
Your C++ still ships the product. What slows every release is the shape it's grown into: god classes nobody dares touch, dead code nobody dares delete, an API migration everyone keeps postponing.
Modernize Software fixes C++ at codebase scale with DMS, our symbolic AI and enhanced compiler technology. Changes that would take a team years by hand run as automated, verified transformations across the whole system in months.
Trusted By
Tableau brought us a classic large-system problem: god classes and API usage spread across an enormous C++ estate. We automated the refactoring with DMS.
Earlier, our published work with Boeing re-engineered a large avionics C++ system, transforming 1990s-era components to a modern component framework while preserving functionality. Peer-reviewed and documented, because avionics buyers check.
Oversized classes are decomposed into coherent smaller ones, with every call site across the codebase updated automatically and consistently.
Moving 5,000 modules from an old internal API to a new one is a rule set, and every usage converts the same way. Ideal for framework swaps and internal platform upgrades.
Compiler-grade analysis finds unreachable code and duplicated blocks, then removes or abstracts them safely. Smaller codebase, faster builds, fewer places for bugs to hide.
C++98 and C++03 idioms convert to modern C++: raw pointers to smart pointers, hand-rolled loops to standard algorithms, macros to typed constructs, applied uniformly.
The preprocessor, templates, overloading and multiple dialects make C++ one of the hardest languages to transform correctly. Search-and-replace breaks it. Gen AI suggestions drift on it. DMS parses C++ with full preprocessor awareness and resolves names and types before any change is made, so a transformation that compiles once compiles everywhere it's applied.
| C++ hazard | How DMS handles it |
|---|---|
| Preprocessor conditionals | Code is analysed with its #if structure intact, so transformations stay correct across build configurations. |
| Templates and overloads | Full name and type resolution decides what each call really binds to before any rewrite touches it. |
| Mixed dialects | Front ends cover legacy C++ dialects through modern standards, in one project, in one pass. |
| Sheer scale | DMS is built for systems in the millions of lines. Whole-codebase consistency is the default, since every rule applies everywhere. |
Some clients want a defined campaign delivered. Others want a custom transformation tool their own engineers run repeatedly. Both models are on the table at assessment.
| Before the campaign | After the campaign |
|---|---|
| A 40,000 line class 3 people understand | Coherent classes with owners, reviewable in a normal pull request |
| API migration parked for 2 years | Every call site moved, consistently, in one verified pass |
| Clones patched in 5 places, missed in the 6th | Duplicates abstracted once, so the next fix lands everywhere |
| Build times padded by dead code | A smaller codebase that compiles, tests and onboards faster |
Every campaign is scoped with before and after measures on your own code: class sizes, clone rates, dead code volume, API usage counts. You see the numbers move.
General questions
Keeping your system in C++ and fixing the code itself: structure, APIs, duplication, dead weight and outdated dialect idioms. Migration to another language is a different service, and we offer that too when it's the right call.
Because it's deterministic. Each transformation is a rule applied through compiler-grade analysis, verified on samples, then applied uniformly. A hand refactor makes thousands of independent human decisions. This makes one decision and enforces it everywhere.
Yes, and that's checked continuously. Transformed code builds against your toolchain and runs your test suites during the project, with side-by-side comparison on behaviour where it matters.
Yes. That was the core of the Tableau engagement: oversized classes decomposed and more than 5,000 modules' call sites updated in under 3 months.
Legacy dialects through modern standards, including vendor-specific extensions. Mixed-dialect codebases are normal for us.
No. Rules are developed against a copy of the code and the final pass runs on a fresh snapshot, so ongoing development continues throughout.
Yes. API migration is one of the highest-value uses of this machinery: every usage pattern becomes a rule, and the entire codebase moves consistently.
Those tools apply local, predefined fixes one at a time. This applies custom, project-specific transformations across the whole system at once, including changes those tools can't express.
Transformation is done by DMS, deterministically. Gen AI sits alongside providing refactoring suggestions and for documentation, code review support and test generation.
A free assessment. We analyse your codebase, quantify the targets (class sizes, clone rates, API usage counts) and propose a campaign with concrete before and after measures.
Book a free assessment and see the numbers on your own codebase.