All field notes
Strategy

The rewrite you were quoted isn't the only option

CM Christopher McGrath · 5 min read
Cover image for “The rewrite you were quoted isn't the only option”

Somewhere in your business there's an application that used to be fine.

It still works, mostly. It's just slow now. Pages take a beat too long, the search times out when the catalog gets big, and there's a list of small bugs everyone has learned to work around instead of report. Nobody's touched it in years because nobody wanted to be the person who broke it.

So you ask around, and the answer you get is that it's old and you should rebuild it.

That answer is very often wrong, and it's worth understanding why you keep hearing it.

Rebuilding is the easy thing to quote

Put yourself on the other side of the conversation. A developer looks at an application somebody else wrote several years ago. To tell you what's actually wrong with it, they'd have to read it, understand the decisions in it, and figure out which parts are load bearing and which are leftovers. That's real work and it's hard to price.

A rebuild sidesteps all of that. Starting fresh means never having to understand what you already have. It's a clean scope, a comfortable number, and it makes the developer's life easier.

And sometimes it's the right call. There are applications where the foundation is genuinely gone and I'll say so. But it should be the conclusion at the end of looking, not the first thing out of somebody's mouth.

What was actually wrong with the last one

I had a Laravel e-commerce application come to me that hadn't been updated in several years. Slow, sluggish, bugs everywhere. By every outward sign it was the kind of system you'd expect to hear should be scrapped.

It wasn't the kind of system that should be scrapped. The business logic in it was fine. Somebody had thought carefully about how orders moved through it, and that thinking still matched how the business ran. What had gone wrong was everything around that.

The framework it was built on was years behind. Not broken, but sitting still while the rest of the world moved, which means every security fix and every performance improvement released in those years had gone to everybody except this one business.

The database had no indexing worth the name. This is the least glamorous problem in software and it's the one I find most often. An index is a shortcut. Without one, every time the application looks something up it reads through everything it has, top to bottom, and it does that on every page load. It works fine when there are two hundred orders in there. At twenty thousand it's the whole reason the site feels like it's wading through mud.

And the admin side, where staff actually spent their day, was the original version from whenever it was first built. Every small thing took too many clicks, so people had built workarounds, and the workarounds had become the process.

None of that is a broken application. That's a maintained application that stopped being maintained.

What we did instead

We upgraded it to the current version of Laravel. That alone brought years of security patches and performance work with it, none of which anyone had to invent or pay to design.

We added proper indexing to the database. The shortcuts. This is not a heroic piece of engineering, it's a few hours of working out what the application looks up most and telling the database to keep a fast path to it. The difference between a page that takes four seconds and a page that takes half a second is very often exactly this and nothing else.

Then we built a new customer and order management system on top, using Filament, which is a tool for building admin screens on Laravel quickly. The staff got a real interface for the work they do all day, on top of the same data, running the same order logic they already trusted.

The whole thing took three months, and it's worth being straight about what that three months was. The upgrade and the indexing weren't the bulk of it. Most of that time went into the new admin and a handful of features the client asked for once they could see it coming together, which is what happens when people stop working around software and start thinking about what they want from it.

The parts that worked stayed. The parts that hurt got replaced. Nobody had to migrate years of orders into a new system and pray, and nobody had to retrain around a business process that got redesigned by accident because a developer rewrote it from a summary.

The site ended up about 40% faster. And sales went up almost 30% in the period after. I won't tell you the upgrade caused all of that, because the same three months added features the client wanted and I can't cleanly separate one from the other. But a store that stopped making people wait sold noticeably more, and that's not a coincidence anybody in e-commerce would find surprising.

How to tell which one you're looking at

You don't need to read the code to have an opinion here. Ask two questions.

First, does the thing still describe how your business actually works? Not the buttons, the logic underneath. If orders still flow the way this software thinks they flow, the expensive part is intact. Software is mostly the accumulated decisions about how your business runs, and that's the part that took years to get right. If that's still true, you're looking at a maintenance problem wearing a rewrite costume.

Second, when somebody tells you it needs rebuilding, ask them what specifically is wrong. A real answer sounds like a list of things with reasons attached. A vague answer about old technology and best practices usually means nobody has looked yet.

There's a version of this where the honest answer is yes, rebuild it. That's a real situation and I'll write about it next, because knowing the difference is most of the value. But the default assumption that old means doomed costs small businesses an enormous amount of money for no reason.

The part that actually matters

The application in that story is still running. It's fast, it's current, the staff like using it, and the business never had a week where it couldn't take an order.

That's the thing to hold onto. Three months, and the store took orders every single day of it. A rebuild means your business goes without something it depends on while somebody reconstructs it, and it means paying again for decisions you already paid for once. An upgrade means the work is invisible from the outside and everything keeps running while it happens.

If something you rely on has been sitting untouched for a few years, it's worth having somebody look before anybody quotes you a rebuild. That's most of what modernization is: finding out which of it is actually old, and leaving the rest alone.

FREE · NO OBLIGATION

Let's scope it the right way

A clear plan and a fixed price before a line of code is written. Tell me what you're considering and I'll give you a straight, honest answer.

Keep reading

Something breaking on Fridays?

Tell me what's going wrong. I'll tell you what I'd do about it.

Get in touch