Don't Rebuild. Refactor.
How a live CRM and ERP was modernised one module at a time without stopping the business, breaking workflows, or forcing teams to relearn the system.

LIVE WORKFLOW · CRM/ERP ECOSYSTEM · V2.0
0103
In plain English
Modernising a live internal CRM and ERP one module at a time without stopping the business, forcing a full rebuild, or making teams relearn their daily workflows.
Business value
- Reduced manual cross-checking across daily operations
- Made workflows clearer and easier for internal teams to follow
- Improved manager-level visibility without adding reporting complexity
- Lowered release risk by shipping improvements in smaller phases
- Created a safer path for future CRM/ERP improvements
System snapshot
A visual snapshot representing the complexity of a live CRM/ERP system before structured refactoring. It shows the contrast between tangled legacy workflows and a cleaner, more organised operational architecture.

- Role
- Modernisation of a live CRM and ERP ecosystem
- Design · Build · Ship
- Timeframe
- 2025 – Present
- Domain
- Internal Tools / Operations / B2B SaaS
- Category
- Internal Tools
- A live CRM and ERP was modernised in phases while daily operations continued.
- The work focused first on high-friction areas like workflows, reporting, statuses, and permissions.
- The UI was redesigned for clarity, not novelty.
- Backend logic was tightened where it mattered and left stable where it already worked.
- The result was less manual checking, safer releases, and a clearer path for future improvements.
- A live CRM and ERP was modernised in phases while daily operations continued.
- The work focused first on high-friction areas like workflows, reporting, statuses, and permissions.
- The UI was redesigned for clarity, not novelty.
- Backend logic was tightened where it mattered and left stable where it already worked.
- The result was less manual checking, safer releases, and a clearer path for future improvements.
The Slow Drift
Every Monday morning, three things happen quietly inside a growing company.
A sales lead lives in two tabs and a WhatsApp thread because no one is sure which screen owns it. A manager opens the same report three times to triple-check a number. A developer ships a small fix and holds their breath, because somewhere downstream is a workflow no one fully remembers how to test.
Nothing about this looks like a crisis. The system still works. People still hit their targets. Customers still get served. But friction is compounding slowly, expensively, invisibly.
This is how internal CRM and ERP systems actually fail. Not in dramatic outages, but in a thousand small workarounds that quietly become the company's real operating model. The spreadsheet someone maintains "just to be sure." The chat group that exists because the system cannot show who owns a deal. The report that is only trusted after someone manually verifies it.
By the time someone says the word "rebuild" out loud, it has usually been delayed twice. Once because there was no budget. Once because there was no good moment. There is never a good moment. The system is too important to pause and too painful to leave alone.
That was the situation when this project started.
The platform was a CRM and ERP that had grown for years across multiple internal teams. Lead handling, sales pipelines, listings, compliance checks, reporting, user permissions, and task workflows all lived inside one ecosystem that had been patched, extended, and reshaped through years of urgent business needs.
It worked. People used it every day. But it had drifted.
Some screens had not been redesigned since the system launched. Statuses meant slightly different things in different modules. A few critical workflows required jumping between three or four screens to complete what should have been a single action. Reports were technically accurate but read like database dumps. Managers had to interpret them before acting.
The business was growing. The system had become the bottleneck.
The instinct, when you walk into something like this, is to clean-slate it. Throw it away. Rebuild it the way it should have been built. Most engineers feel that pull. Most owners eventually agree to fund it.
That instinct is almost always wrong.
Why Rebuilds Fail
A full rewrite sounds like the obvious answer. A clean codebase. Modern stack. Better data model. Faster development going forward. On paper, it is the responsible engineering decision.
In practice, it almost never works the way the deck promises.
Rebuilds fail for reasons that do not show up in planning meetings.
They take far longer than estimated. The honest multiplier on a CRM and ERP rewrite is usually 2 to 3 times the original timeline. A six month rewrite rarely ships in under a year. By the time it does, the business has already changed underneath it.
Years of accumulated business logic get quietly lost in translation. The legacy system is not ugly because someone wrote it badly. It is ugly because it absorbed every edge case the business has ever encountered. That weird approval rule for one specific client tier? It is in there because of something that happened in 2021. The validation that fires on a certain status combination? Someone added that after a costly mistake. A rebuild assumes you can rediscover all of these. You cannot. Some of them only resurface as production bugs after launch.
The business has to run two systems in parallel during the transition. Teams have to be trained twice. Data has to be migrated, verified, and reconciled. Reports have to be recreated. Permissions have to be remapped. The same people who were already overworked now have to operate two platforms while the new one stabilises. The very thing the rebuild was supposed to relieve doubles in the meantime.
Operations cannot freeze. A live business cannot pause for the months a clean rewrite actually needs. So the new system gets shipped before it is truly ready, and the team spends the next year fixing it under the same pressure that broke the original.
By the time the new platform launches, requirements have shifted again. The market changed. A new compliance rule landed. Two new teams need new workflows. The modern platform now has its own backlog of urgent fixes, and the cycle starts over.
This is not a hypothetical. It is the most common pattern in enterprise software. Every developer who has been in the industry long enough has seen it at least once. Most have seen it more than once.
So the real question, when you walk into a tired CRM and ERP, is not should we rebuild this?
The real question is: which parts of this system are creating the most friction right now, for which users, and how do we fix them without breaking what already works?
That is a slower question. It is also a better one.
It assumes the existing system has value. Years of business logic, user habits, and operational fit are an asset, not a liability. It assumes that risk should be earned in small increments, not bet on a single launch. It assumes that the people using the platform every day are customers, and you do not make customers wait six months for a relaunch.
It also assumes something most rebuild proposals do not: that the smartest engineering work is often the work that does not get noticed.
The rest of this case study is about doing exactly that.
Ownership
Everything I designed, built, and was accountable for.
Strategy
- Product strategy & modernisation roadmap
- Phased delivery planning & rollout
Product & UX
- UX/UI redesign of high-friction modules
- Workflow & status model design
Engineering
- Frontend refactoring & component design
- Backend refactoring & API improvements
- Permissions / RBAC design
Operations
- Reporting & dashboard improvements
- Stakeholder communication & documentation
Key decisions
The calls I made, what I rejected, and why: these are the tradeoffs that shaped the system.
Modernise in layers, not all at once
Full rewrite from scratch
A full rebuild would have taken 2-3x the original estimate, lost years of accumulated business logic, and forced parallel-running two systems for months. Phased modernisation traded "fast" for "safe" and ultimately delivered faster, because nothing had to be unwound after launch.
A legacy CRM is rarely just old code. It is years of business decisions, edge cases, and operational habits compressed into software.
Modernising in Layers
The approach was to modernise the system from the inside, in layers, without ever taking it offline.
The principle was simple. Every change had to make the system clearer, more useful, or easier to maintain without disrupting the people already using it. New code earned the right to exist by removing more friction than it introduced.
That principle drove every decision. It also ruled out a lot of work that would have been technically interesting but operationally risky.
The modernisation covered six layers, shipped in phases.
LAYER 1: Interface and usability
Older screens were redesigned for clarity, not novelty. The goal was never to make the UI look modern. It was to make daily work less tiring.
Tables that previously required horizontal scrolling and mental translation were rebuilt around the questions users actually asked them. Filters became predictable. Same patterns across modules, same defaults, same behaviour. Status badges were standardised so a colour meant the same thing wherever you saw it. Empty states stopped being blank screens and started telling users what to do next.
The redesigns were never shipped as visual reskins. Each screen was reviewed against the workflow that ran through it, redesigned around the user's real path, and rolled out behind feature flags so users could be moved over in groups, not all at once.
LAYER 2: Workflow structure
Several core workflows had grown the way internal workflows always grow: by accretion. New requirements were added on top of old ones, and the original shape stopped being visible.
Each high friction workflow was mapped end to end. Every required action, every status transition, and every handoff between teams was written down. Then the workflow was straightened: explicit ownership at every step, clear required actions, predictable transitions, and a single source of truth for status.
The result was not more features. It was fewer questions. Workflows that used to require Slack threads to coordinate now coordinated themselves.
LAYER 3: Data visibility
Records, statuses, and reports were surfaced where teams actually needed them, not where the data model happened to live.
Cross module visibility was the biggest single improvement. Instead of users navigating between screens to piece together a single picture, key information was brought to where the work was happening. People stopped pinging each other to ask what the status of something was because the system finally answered that question itself.
Reports were rebuilt around the questions managers actually ask: where is throughput slowing, where are deals stuck, who owns what, and what changed this week. Numbers became something to act on, not something to verify.
LAYER 4: Backend logic and APIs
Backend changes were the highest risk category, so they were treated with the most caution.
Business rules were reviewed for accuracy and consistency. Where modules had implemented similar logic in slightly different ways, those were aligned. Where API behaviour was inconsistent, such as different response shapes, different error formats, and different pagination conventions, those were normalised gradually, with versioning so existing integrations did not break.
Stable code that was not actively causing problems was left alone. This is not the glamorous part of engineering, but it is the part that protects the business. Boring, well scoped backend decisions consistently outperformed ambitious ones.
LAYER 5: Reporting and operational insight
Reporting was rebuilt around decisions, not data.
The old reports answered the question, what does the database contain? The new reports answered, what should I do today? That shift sounds small. It changes how an entire management layer relates to the system.
Dashboards were designed for specific roles, with specific decisions in mind. A manager looking at a pipeline report knows in five seconds where attention is needed. An operations lead looking at a workflow report knows immediately where work is stuck.
The data did not change. What changed was the framing, and that was almost entirely a product decision, not a technical one.
LAYER 6: Permissions and access control
Roles were aligned with how teams actually work, not how the organisation chart was drawn three years ago.
Permissions were cleaned up so that the right people see the right modules, sensitive actions are properly scoped, and audit trails make sense after the fact. This work is not visible to most users, but it is exactly the kind of layer that, when neglected, eventually causes a serious incident.
Across all six layers, nothing was switched on overnight. Each phase was small enough to be reviewed, tested, rolled out gradually, and rolled back cleanly if needed. Users were never asked to relearn the entire system. The platform kept running every single day.
That last sentence sounds modest. In a live CRM and ERP, it is the whole point.
0104
Ship → Validate → Roll out → Next phase
Frontend
Backend
Database
Infrastructure
Delivery
Integrations
The safest modernisation strategy was not to replace the system. It was to make the existing system clearer, safer, and easier to evolve.
0102
What Actually Changed
- Cleaner daily workflows
- Real-time manager visibility
- Safer engineering on every release
The system kept earning trust while it was being modernised.
For the people using the platform every day, the most important change was invisible: the system stopped fighting them. Common workflows became faster. Statuses became readable at a glance. The number of messages asking whether something was done dropped meaningfully across teams. The platform stopped being something people opened with a sigh.
For managers, reports moved from something to verify to something to act on. Visibility shifted from asking the team to seeing it on the dashboard. Decisions that used to require a meeting and a manual check could now be made in real time.
For developers, modules became safer to change. The system stopped feeling like a minefield. Onboarding new engineers got faster, because the codebase no longer required tribal knowledge to navigate. Engineering risk on each release dropped, not because the platform got smaller, but because it got more predictable.
For the business, the most important outcome was the one that did not happen.
Nothing was thrown away. Operations did not pause. There was no migration weekend, no parallel system phase, and no relaunch that broke things in unexpected ways. The platform that the business depended on every day kept working, kept serving customers, and kept getting better quietly with every release.
The platform shifted from being a maintenance burden to being a strategic asset.
That is the difference a careful modernisation can make. Not a relaunch. Not a redesign press release. Just an internal system that quietly becomes the kind of tool people stop noticing because it stopped getting in their way.
That is the highest compliment an internal tool can earn.
What changed without stopping operations.
0106
Effectively eliminated
Significantly reduced
Sharply reduced
Stabilised
Easier accountability
Faster action
A live CRM and ERP that keeps modernising without ever stopping the business. Internal teams move faster, managers act on real data instead of verifying it, and engineers can extend the system safely. The platform shifted from a maintenance burden into a strategic asset.
What I'd Tell Anyone Inheriting a Legacy CRM/ERP
If you are inheriting a CRM and ERP that has grown into something nobody fully understands anymore, here is what I would want you to know.
The legacy system is not a failure. It is evidence that something worked long enough to become important. That is a foundation, not a problem.
The most valuable engineering work is not always new code. Sometimes it is careful refactoring of code that already works, the kind of work that does not trend on social media but quietly transforms how a company operates.
Stability is a UX feature. Users trust systems that do not surprise them. The fastest way to lose user trust is to ship a confident redesign that breaks a workflow they had built their day around.
Clarity beats cleverness. A workflow that explains itself is worth more than an automated one that does not. A dashboard that shows the right number is worth more than a dashboard that shows ten clever ones.
Treat internal users like customers. The instinct to underinvest in internal tools is the same instinct that quietly costs companies more than any competitor ever will. Internal users are real users. They deserve real product thinking.
The rebuild is almost never the answer. The careful, layered, unglamorous modernisation almost always is. It is slower in the press release. It is faster in the real world.
If you ever find yourself in a meeting where someone is selling you a six month rewrite, ask them one question:
What happens to the business in month seven?
If they do not have a clean answer, you do not have a project. You have a risk.
The best engineering work I have done on internal systems has been work that did not get noticed. Workflows that used to require coordination now coordinate themselves. Reports that used to be questioned are now trusted. Modules that used to be feared are now extended without drama.
That is what modernisation actually looks like, when it works.
Quiet. Layered. Earned.
Not rebuilt. Refactored.
8+
3
5+
10+
Thinking about rebuilding your internal system? Read this first.
If your CRM, ERP, or internal tool is showing the same symptoms workarounds, stale reports, fragile modules, frustrated users — a rebuild probably isn't the answer. A staged modernisation usually is. Get in touch and let's talk through what that could look like for your system.
Talk about your platform