You know what kills most legacy modernization projects?
It’s not the old technology. It’s not the lack of budget. It’s not even the “spaghetti code” everyone loves to complain about.
It’s the 300-column database table.
And if you’ve ever opened a production database and seen it - that sprawling employee_data table with nullable columns stretching into oblivion - you know exactly what I’m talking about.
The Day I Realized The Real Problem
For years, I watched companies struggle with the same pattern. A new requirement comes in. The team has a choice: redesign the system properly, or just add another nullable column to the existing table.
Guess which one wins when there’s deadline pressure?
Column_184. Column_185. Column_186.
Nobody redesigns. Nobody refactors. Everyone just adds and prays.
And slowly - so slowly you don’t even notice - your system transforms from a database into an archaeological site. Layers upon layers of forgotten decisions, abandoned features, and business rules that nobody remembers implementing.
It’s not one bloated system. It’s actually dozens of different business processes that have been smooshed together into a single table because no one ever stopped to ask what they were actually trying to do.
The Hidden Truth Inside Your “Employee Data”
Let me paint you a picture.
An employee_data table. 300 columns. Simple name - “employee data”. Just employee names, IDs, basic info is what people tell me is in there.
So I ask: “Walk me through what this table actually does.”
And that’s when it unravels.
Turns out that innocent “employee_data” table isn’t master data at all. Hidden inside are:
- Payroll and compensation processes
- Employee lifecycle management
- Organizational hierarchies
- Department budget allocation
- Performance review workflows
- And six other things nobody remembers
It’s not messy architecture. It’s process soup - a dozen critical business workflows boiled down into a single table that nobody fully understands anymore.
Someone named it “employee_data” and everyone just assumed it was simple. But buried beneath those 300 columns are completely separate business domains, all chained together, all invisible.
The Question Everyone Asks (But Nobody Answers)
Everyone can diagnose this problem. Every consultant can point at your schema and say, “Wow, that’s a mess.”
Thanks, Captain Obvious.
But here’s the real question: How do you get OUT of it?
That’s where most migrations fail. That’s where “digital transformation” initiatives go to die.
Because you can’t just rewrite it. You can’t do a big-bang cutover. The business is running on this system. It’s making money - money you need to pay all the employees stored in that table.
Touch the wrong column and the company stops working.
So companies stay stuck. Paralyzed between “we know this is terrible” and “we can’t risk changing it.”
The First Step: Uncover What’s Been Hidden in the Mud
You don’t try to fix everything at once. You pick ONE workflow and you make it visible.
Not in code. Not in documentation that nobody reads. You model it out visually using Event Modeling - and you uncover what’s been hidden in the mud.
We sit down. We look at that 300-column table. And I ask: “What workflows is this table actually handling?”
The list comes out:
- Master Data
- Payment processes
- Employee management
- Hierarchies
- Department management
Okay. Pick one. Which one hurts the most?
Payroll! Everybody shouts.
That was easy. Let’s model out exactly how payroll actually works in your system.
And here’s where it gets interesting: We can do it manually, sitting with Experts and Engineers or we can use AI to accelerate this. Feed it the database schema. Feed it the code. Ask it to generate a first draft of what the process might look like.
I call this “Event Muddeling.”
Because it’s not perfect. The AI gets things wrong. But it gives us a starting point - something to react to instead of staring at a blank board wondering where to begin.
One of the best things I can get is “This is completely wrong, let me show you how Payroll works..” - Nice! now we are talking.
When the Real Business Takes Shape
And then something magical happens.
The team starts correcting the AI’s draft. “No, that’s not how it works. Actually, we do this first, then this happens, then finance approves…”
And slowly - maybe for the first time in years - the actual business process becomes visible.
Not what the code does. Not what the documentation says. The real workflow that’s been running the company.
I’ve watched senior developers who’ve maintained these systems for 10+ years see their own process clearly for the first time. I’ve watched business stakeholders realize, “Oh my god, THAT’S why approvals take so long.”
The process takes shape on the board. Everyone can see it. Everyone understands it.
And that’s when the conversation shifts from “ugh, legacy migration” to “oh… maybe we can actually improve this.” to “I think, we can do this!”
Unchaining the Data
Once we understand the process - once we’ve mapped it out in Event Modeling - we can talk about extraction.
How do we get this payroll process OUT of the mud? How do we give it its own service, its own clean schema?
We need to “unchain” the data.
Because that’s really what’s happened. The data isn’t just messy. It’s imprisoned inside that 300-column table, locked up with a dozen other processes, and nobody can use it properly anymore.
Here’s one way to do it:
Step 1: Change Data Capture (CDC)
We start by setting up CDC - typically using Kafka Connect sitting on that old table. We fetch the initial dataset, then we get a continuous stream of every change.
Now the new system is listening. Learning. Syncing in real-time.
Step 2: Map Changes to Business Events
Here’s where the Event Model becomes crucial.
That CDC stream is sending us raw database updates: “status changed to ‘Active’, last_updated changed to ‘2025-10-15’.”
But we don’t care about columns. We care about business meaning.
So we look at our Event Model - the one we created in the workshop - and we translate:
“Oh, when those three columns change together, that’s actually an EmployeeTransferred event. We know exactly what that is because we already modeled it.”
We already did the work in step 1. Event Modeling tells us exactly what business events should exist, what they mean, what data they carry, and in what order they happen.
Step 3: Go Live in the Dark
Now here’s the clever part: we don’t cut over immediately.
The new system is already “live” - receiving all the data, processing it, and projecting it into employee_data_2. But nobody’s using it yet.
employee_data_2 has the same structure as employee_data.. it became a projection of our new process.
We’re running dark. Watching. Comparing.
Does employee_data match employee_data_2?
(Spoiler: it never does on the first try.)
When Bugs Become Features
We find discrepancies. Column values that don’t match. Calculations that differ.
And we have to ask: which system is right?
Sometimes - and this is my favorite part - we discover the old system has been wrong for years.
Maybe overtime was calculated incorrectly. Maybe a status transition happened in the wrong order. Maybe a null got coerced into a zero somewhere back in 2016.
And instead of fixing it, the business just adapted. They built workarounds. They trained people to manually correct it. They built OTHER features that depended on that bug existing.
Bugs became features.
Now we’re in a room, staring at the discrepancy, and someone says: “The new system is calculating this wrong.”
And I look at the Event Model. I look at the business rules. I look at the labor laws.
And I say: “No. The new system is calculating it correctly. The old system has been wrong for years.”
Silence.
“But Finance built their entire reporting system around the old calculation.”
The Pragmatic Choice
Here’s what I’ve learned: you have to be pragmatic.
The alternative - “let’s fix the bug AND change every downstream system at the same time” - that’s how migrations die.
So we make a choice: reimplement the bug. Document it explicitly in the Event Model. Move on.
Yes, it’s wrong. Yes, we know. Yes, we’re doing it anyway because Finance depends on it.
But here’s the difference: now it’s visible.
It’s not hidden in column 247. It’s right there in the model: a slice. A documented, understood, deliberate choice.
The “Bug” now just became another slice in the model..
We could fix it later. We just haven’t prioritized it yet. Or we just keep it..
Before: “We can’t change this because we don’t know what will break.”
After: “We could change this. We know exactly what it does. We’re choosing not to right now.”
Inverting the Source of Truth
And then we do something that blows people’s minds:
We don’t kill the old table. We invert the relationship.
The old 300-column employee_data that was the source of truth? It becomes a projection - a read model - of the new event-sourced system.
The events are now the source of truth. We’re just writing back into the old table to keep legacy systems happy.
This is where senior developers’ brains break a little.
“Wait. You’re telling me this table that’s been running payroll for 15 years is about to become a secondary artifact?”
Yes.
“With a little bit of engineering” (and yes, dealing with foreign keys, triggers, stored procedures, and all the constraints), we flip the switch.
The new system is live. The source of truth has changed. And most of the time, nobody even notices because employee_data still exists - it’s just being fed from events now instead of being the origin.
What Makes Companies Tick Again
This isn’t just about fixing a database schema.
This is about organizational clarity.
When companies grow, they lose something fundamental: the ability to understand themselves. To see how they actually work. To make informed decisions instead of just hoping nothing breaks.
What I’ve discovered through this process - through dozens of these migrations - is that Event Modeling gives companies back something they lost:
The ability to see and understand their own processes.
Leadership can make decisions based on visible workflows instead of tribal knowledge. Teams can collaborate across business and engineering because everyone’s looking at the same model. New hires can understand in days what used to take months of archaeological code-diving.
The visualization doesn’t just help them migrate a system. It changes how the organization thinks.
And when that happens - when processes become visible, when understanding replaces mystery, when bugs become documented choices instead of invisible traps - companies start ticking again.
Not just surviving. Actually moving forward with confidence.
The Path Forward
If you’re staring at your own 300-column nightmare right now, here’s what I want you to understand:
You don’t have to fix everything at once.
Pick one workflow. Make it visible. Map it out. Use AI to accelerate the discovery. Let your team correct it until the real process takes shape.
Then unchain it. Use CDC to bridge the old and new. Map database changes to business events. Run dark until the data matches.
And when you find bugs that became features? Document them. Make them visible. Make them a choice instead of a mystery.
Because that’s the real transformation: from “we don’t know what this does” to “we know exactly what this does, and here’s why.”
That’s how you escape legacy hell.
Not with a rewrite. Not with a big-bang cutover.
With visibility. With clarity. With understanding.
Need help with this? I’ve done this dozens of times. Let’s have a 30-minute call and map out your first workflow.
Martin Dilger is the founder of Nebulit and a recognized expert in Event Modeling and event-sourced architectures. He helps mid-sized software teams escape legacy system paralysis by un-mudding their processes with industry-proven practices.
P.S. Wondering if Event Modeling can work for your specific legacy nightmare? Send me your gnarliest table schema (just the column names, no data). I’ll record a short video showing you which workflows are probably hiding in there. First 5 people only.
Ready to Learn More?
My book “Understanding Eventsourcing” gives you the blueprint. But reading alone will take your team too long.
I can teach your team how to build these blueprints faster and skip the whole trial-and-error phase. Let’s have a chat about how this applies to your project.
Still 2 Team-Spots left for the Event Modeling Workshop this month.
Want to learn how to apply Event Modeling and Event Sourcing in practice?
Follow the Online Course “Implementing Eventsourcing” - comes with a Lifetime Event Modeling Toolkit License.