The Slack Message That Changed How I Think About Technical Debt

"The drag-and-drop is getting really slow with large datasets. We need to talk about this."

The message came from one of our engineers on a Tuesday afternoon, and I knew exactly what he was referring to. Six months earlier, when we were pushing to get Twill's block editor ready for a major client demo, we'd implemented a drag-and-drop interface that worked beautifully—for the modest datasets we were testing with.

"How slow are we talking?" I replied.

"It's fine with 10-15 items, but some of our clients have 200+ blocks. The interface basically locks up."

I stared at that message, remembering the conversations we'd had during development. "We'll optimize this later," I'd said. "The client demo is next week."

The Demo-Driven Decision

Context matters here. I was wearing two hats—Group Production Director managing client projects and Product Manager for Twill. We had Nike coming in for a demo of their editorial workflow, and the drag-and-drop functionality was a key selling point. The "proper" solution would have involved virtualization, pagination, or a complete rethink of how we handled large datasets.

We had four days.

"Can we just add a loading spinner and maybe batch the DOM updates?" I suggested during our sprint planning. "It's not perfect, but it'll get us through the demo."

The engineer nodded. "Yeah, I can make that work. But Tom, if they start using this heavily..."

"I know," I cut him off. "We'll circle back after we close this deal."

The demo went great. Nike loved the interface. We won the project. The drag-and-drop worked flawlessly with their demo content—maybe 20 blocks total.

The Slow Creep

Here's the thing about technical debt in an open-source product: it doesn't just affect you. It affects everyone who adopts your tool.

Within two months of that Nike demo, we started getting GitHub issues. Not angry bug reports, but polite questions: "Is there a way to optimize the block editor for larger content sets?" "Performance seems to degrade with more than 50 blocks—any suggestions?"

Each issue took time to respond to. Not just to say "we're working on it," but to provide workarounds, suggest alternative approaches, or help users optimize their content structure. Meanwhile, the real fix kept getting pushed down the backlog.

Then the International Energy Agency project landed. They needed to manage hundreds of content blocks across multiple publications. Our hacky drag-and-drop solution wasn't just slow—it was unusable.

The Real Cost

"We need to rebuild the drag-and-drop from scratch," the engineer told me during our retrospective. "And it's going to take three weeks."

"Three weeks? You said it would take a few days six months ago."

"That was before we built the new media library integration, the nested block system, and the collaborative editing features. Everything hooks into the current drag-and-drop implementation. Changing it means touching all of that."

The technical debt had compounded. What started as a quick fix had become foundational to other features. Fixing it properly now meant unraveling half a dozen other systems that had been built on top of the assumption that the drag-and-drop worked the way it currently worked.

But the worst part wasn't the development time. It was the opportunity cost. During those three weeks, we couldn't ship the A/B testing features that clients were asking for. We couldn't work on the advanced permissions system that would help us win enterprise deals. We were stuck paying down debt instead of building value.

The Community Impact

This is where managing an open-source product gets complicated. Our technical debt wasn't just our problem—it was everyone's problem.

I started seeing forks of Twill on GitHub where developers had attempted their own fixes to the performance issues. Some worked, some made things worse, but all of them meant fragmentation in our community. Instead of contributing features back to the main project, people were working around our limitations.

The support load increased too. Every new user who tried to use Twill with a large dataset would eventually hit the performance wall, and they'd come to our Discord or GitHub issues for help. That was time our team could have spent on new features, redirected instead to managing the consequences of a shortcut we'd taken months earlier.

What I Actually Learned

The lesson wasn't "never take shortcuts"—sometimes you have to ship something imperfect to keep the lights on. The real lesson was about how to think about the true cost of those shortcuts, especially in an open-source context.

Community debt compounds faster than internal debt. When you're managing a product that other people rely on, your technical debt becomes their technical debt. Every workaround they have to implement, every performance issue they encounter, every GitHub issue they file—that's all compound interest on your original shortcut.

"We'll fix it later" usually means "the community will work around it." In a closed product, technical debt stays contained. In an open-source project, people start building solutions on top of your limitations. By the time you fix the underlying issue, you've also got to consider how it affects all the workarounds people have implemented.

The cost isn't just engineering time. That three-week fix cost us three weeks of new feature development, dozens of hours of community support, and probably a few potential contributors who got frustrated with the performance issues and moved on to other tools.

How I Approach It Now

These days, when we're considering a shortcut in Twill, I ask different questions:

  • How many users will hit the limits of this approach?

  • What happens when they do hit those limits?

  • How will this affect our community support load?

  • If someone contributes a fix, how hard will it be to integrate?

I also block time in every release cycle specifically for debt paydown. Not "if we have time" work, but scheduled, prioritized maintenance. Because in an open-source project, technical debt isn't just your problem—it's everyone's problem.

The drag-and-drop eventually got rebuilt. It's now one of Twill's strongest features, handling thousands of blocks without breaking a sweat. But getting there cost us way more than those original few days of proper implementation would have.

The real kicker? Nike, the client that drove the original timeline pressure, ended up using a completely different content structure that barely used the drag-and-drop functionality at all.

Sometimes the demo that seems critical in the moment turns out to be just another Tuesday. But the technical debt you create trying to nail that demo? That sticks around for months.


Previous
Previous

When Your Block Editor Demo Looked Perfect But Broke With Real Content

Next
Next

That Time I Shipped a Feature Nobody Actually Wanted