Latest
How to Turn Your Expertise Into a Book People Want to Read | The Expert MethodWhat’s New at The Writing King: Week of October 25, 2026Challenger Remembrance Day: The Engineer Who Wouldn’t SignJoel Salomon: The Truth About MoneyReddit Is Putting Up a Login Wall. Wikipedia Won’t Be Far Behind.Victoria Chemko: The Body Is the First TechnologySir Patrick Stewart: A TributeA Yale Economist Says We Won’t Be Missed. He Forgot the Bread Line.Walter Koenig: A TributeI Don’t Post Bad ARC Reviews. I Send the Author a Note.AI Has Paid Off Outside Tech. Apollo Is Reading the Wrong Scoreboard.The Little Red Book of Stuff That Works!Your Kids Are Your Own FaultGrow a PairYou’re Broke Because You Want to BeIt’s Called Work for a Reason!No Time for TactShut Up, Stop Whining, and Get a LifeWilliam Bessette: AI Enablement and Child Welfare TechnologyFree Book Planning ToolsWhat’s New at The Writing King: Week of October 18, 2026Ghostwriting by the Numbers: Timelines, Word Counts and the First CallPromising Young Woman (2020) ReviewBillions for AI, Pennies for the Plumbing: AI Companies Should Pay to Keep PHP AlivePHP2Shell: AI Found a 22-Year-Old Crack Under Your Website in Two DaysKindle Unlimited Is Now Kindle+. AI Audiobooks Just Joined the BuffetPetrov Day: The Officer Who Didn’t Believe the ComputerMo Gawdat Says the AI Dystopia Starts in 2027. Read the List, Skip the DatesWhen to Quit Writing a Book: I’ve Abandoned Dozens, and I’d Do It AgainThe Society of Authors Signed an Ethical AI Charter, Then Ran From It in Eight DaysChina Is Using Bots to Fan the Data Center Backlash. The Backlash Is Still Real.Getty Images Filed for Bankruptcy. Can You Prove You Licensed Your Book’s Images?Fluff Words: Cut Them From Your Prose, Keep Them in Your DialogueWhere Can Writers Learn Storytelling From Movies? Richard Lowe Publishes 1,226 Film and TV Reviews With Writing Craft NotesWhere Are the Independent Bookstores and Public Libraries Worth Visiting in Tampa Bay? Author Richard Lowe Profiles 44 of ThemWhat Should You Know Before Hiring a Ghostwriter? The Writing King Publishes 57 New Answers, Including What to Do When It Goes WrongWhere Can You Hear Founders and Executives Tell Their Own Stories? Richard Lowe’s Leaders and Their Stories Publishes Every Unscripted Interview With a Full TranscriptAuthor Richard Lowe Publishes Eight Volumes of Enemies of You, a Researched Series on the Forces Working Against Ordinary AmericansThe Jackal (1997) ReviewThe Day of the Jackal (2024) ReviewYour First Novel Is an Apprentice Piece: What Beta Readers and Editors Can’t FixWhen the Cloud Gets Bombed: What the AWS Data Center Strikes Teach About BackupsHuman-Written Book Labels Are Gatekeeping With a FeeThe Enshittification of Microsoft Office: Why I Switched to a Free CloneGlobal Encryption Day: The Padlock Every Writer Depends OnWriting Your Worst Moments in a Memoir: Show the Evidence, Skip the VerdictHow to Register a Copyright for Your Book (and What Doesn’t Count)Your AI Chats Aren’t Private: Deleted ChatGPT Logs in CourtThe Board Seat Scam: A 419 Letter in a Business SuitI Joined the Science Fiction Book Club 30 Times

One Program, Any Number of Customers

TL;DR: Software that keeps customer rules in code has a ceiling, and you find the ceiling at the worst possible time. Software that keeps them in a table has no ceiling at all. We built the second kind in the early 1980s with no database, no libraries, and nothing off the shelf, and the design decision that made it work is one most teams still skip.

Keep the rules out of the code and one program serves any number of customers.

I’ve always thought hardcoded customer rules are among the laziest decisions a software team can make, and among the most expensive. They feel fast in the first month. Then every new customer turns into a small act of surgery on a system nobody wants to touch, and the people who pay for it are the engineers stuck maintaining it and the customers stuck waiting.

What does it mean when software integrates with everything?

The claim usually means the connection works.

Connection is the part vendors show, because connection is the part that demos well. Data goes out of one system and arrives in another. Everybody nods.

The connection was never the hard part. The hard part is that the receiving system wants the data arranged its own way, on its own schedule, with its own exceptions, and the next customer wants something different. Multiply that by every customer you have and you have the actual project. Nobody sells you that half.

I don’t trust any vendor whose demo ends at the connection. The part they skip is the part that eats the budget, and the buyer usually finds that out after the contract is signed, when the change orders start arriving for every customer who wants something slightly different.

How do you build software that handles hundreds of different customers?

In the early 1980s I led a project for a company called National TV Log, and their entire business model depended on solving that problem.

The idea was clever. Reach into a newspaper’s computer, take the file, insert small boldface advertisements into it, and put the newspaper back. Fully automated, no humans in the middle.

I’ve always thought hardcoded customer rules are among the laziest decisions a software team can make, and among the most expensive.

Around four hundred newspapers, each dialed up over a modem, because modems were what existed. Grab, insert, return, hang up, move to the next one. Then the part that made it real work. Every newspaper had its own rules about where the advertisements went and how they were formatted. Four hundred customers, four hundred sets of rules, no two the same. Every one of them wanted the advertisements handled their own way.

Why does per-customer configuration break software projects?

Because the obvious solution scales terribly and nobody notices until it’s too late.

The obvious solution is to handle the differences in code. The first customer is easy. The second is easy. By customer five you have branching logic. By customer forty you have a system nobody can safely change, because every change risks all forty. That’s the ceiling, and it arrives without warning.

Teams reach customer forty faster than they expect and the problem arrives fully formed. Nothing about it is gradual.

The modern version hides behind better words. Per-tenant configuration. Customer-specific business logic. Feature flags. Same problem, and the same teams hardcode the first three customers and discover it at the fortieth.

New words don’t change the damage. A feature flag with a customer’s name baked into it is the same trap with better marketing, and I think teams fall into it because nobody on the project gets rewarded for thinking about customer forty on the day customer three is signing.

Customer rules in code versus in a tableA comparison of handling per-customer differences in code versus in a table. In code, the first and second customers are easy, by customer five there is branching logic, and by customer forty nobody can safely change the system. In a table, the program reads the rules, and the same program served four hundred newspapers.Where the customer rules liveHardcoding works until it suddenly doesn'tRules in the codeRules in a tableCustomer 1EasyOne rowCustomer 5Branching logicFive rowsCustomer 40Nobody can safely change itForty rowsCustomer 400Never gets hereOne program, 400 newspapersA feature flag with a customer's name baked into it is the same trap with better marketing.
Customer rules in code versus in a tableA comparison of handling per-customer differences in code versus in a table. In code, the first and second customers are easy, by customer five there is branching logic, and by customer forty nobody can safely change the system. In a table, the program reads the rules, and the same program served four hundred newspapers.Where the customer rules liveHardcoding works until it suddenly doesn'tCustomer 1Rules in the code: EasyRules in a table: One rowCustomer 5Rules in the code: Branching logicRules in a table: Five rowsCustomer 40Rules in the code: Nobody can safely changeitRules in a table: Forty rowsCustomer 400Rules in the code: Never gets hereRules in a table: One program, 400newspapersA feature flag with a customer's name bakedinto it is the same trap with better marketing.

Where should business rules live in a system?

Outside the code, in something a person can read and change without a developer. That’s what we did. The rules for all four hundred newspapers lived in a table, and the program read the table.

Building that table wasn’t trivial, because we had no database to put it in. No structured query language, no commercial database engines available to us. We built the table and everything around it ourselves. With no tools and no prior art, the design was still right. One program, and adding a newspaper meant adding a row and not writing code. Four hundred was what they happened to have. The design had no number in it at all.

Teams today have databases, configuration structures, and rules engines available for free, and a great many of them still put the customer differences in the code.

That one is a bad habit. The tools we had to build from scratch are sitting right there, free, and teams still write the rules into the code because it’s quicker this afternoon. The developers who inherit that code a few years later are the ones who pay for it, and they didn’t make the choice.

How do you know when to move logic out of code?

Three signals, and any one of them is enough.

The first is a conditional statement that names a customer. The moment code says if this is customer Jones, the rules have leaked into the wrong layer.

The second is a deployment required to onboard a customer. If adding a customer means shipping code, every new customer carries the risk profile of a release.

The third is a change nobody wants to make. When a small adjustment for one customer requires regression testing everybody else, the differences are entangled with the logic.

Any of those three means the rules need to come out. Doing it at customer five is a morning of work. Doing it at customer forty is a project.

Signals that rules belong outside the code
Signal What it means
A conditional statement names a customer The rules have leaked into the wrong layer
Onboarding a customer requires a deployment Every new customer carries the risk profile of a release
A small change for one customer needs regression testing for everyone Customer differences are entangled with the logic

What happens when a consultant does the job too well?

The code was finished and delivered, and the system worked well for them.

Then somebody from my team took a job at National TV Log and took the work over. We lost the account. That outcome is fine. They got a good product, it did what they needed, and the person who understood it best was now inside their building instead of billing them.

A consultancy that builds something durable and documents it properly will sometimes lose the work to its own success. The alternative is staying indispensable by leaving the thing half explained, which is worse for the client, worse for the person doing it, and worse for the firm in the long run. Anyone hiring a consultant should ask what happens when the engagement ends. A good answer describes how the knowledge transfers. A bad answer explains why you’ll always need them.

I don’t respect consultants who make themselves permanent by keeping the work murky. It’s a quiet way of taking money from a client who trusted them, and the client is the one left stranded when that consultant finally leaves.

My take

Customer rules belong in a table. Hard-code them and every new customer means a code change and a deploy. We built one program for four hundred newspapers in the early 1980s with nothing off the shelf, and adding a customer meant adding a row. You’ve got free databases and rules engines today, so there’s no excuse. If your code names a customer or onboarding needs a deploy, move the logic out now.

What can a 1980s integration project teach a modern team?

The system did its job. Four hundred newspapers, automated, running on rules in a table nobody had to compile.

None of the technology matters now. The modems are gone, the file formats are gone, the company is gone.

What survives is the decision that removed the ceiling. The rules didn’t live in the program. They lived in a table, and the program read the table, so the number of customers stopped being an engineering question.

Every platform sold today can do that. Most teams still don’t, because the first three customers don’t need it and by the time the fortieth arrives the code has already made the choice for them.

It frustrates me that teams with every tool in the world still have to relearn a lesson we worked out with modems and a homemade table. Putting customer rules in the code is a choice, and the teams that keep making it are choosing a ceiling for their own company.

Frequently Asked Questions

What is a rules engine and does a small company need one?
A rules engine stores business logic outside application code so it can be changed without a release. A small company rarely needs a commercial one. A configuration table the team can read and edit accomplishes most of the benefit at a fraction of the cost.
How do you evaluate a vendor’s integration claims?
Ask how their system handles a customer who wants the data arranged differently from everyone else. Connection is easy and every vendor has it. The answer to the difference question tells you whether they’ve solved the part that costs you money.
When should customer differences go into configuration?
Before the third customer, and certainly before code contains a conditional naming a specific customer. Moving the logic out early is a morning of work. Moving it out after the entanglement sets in is a project with a risk profile.
Does moving logic out of code create a new maintenance burden?
Yes, and the burden is smaller and safer. A configuration table needs validation, review, and backup like any other asset. Changing a row still beats deploying a release every time a customer wants something adjusted.
What should a consulting contract say about knowledge transfer?
It should name the documentation deliverables, say who on your side will be trained, and set a date when your team can run the system without the consultant. A firm confident in its work has no difficulty agreeing to that.
Is it a problem when a consultant’s employee joins the client?
For the client it’s usually a good outcome, because the knowledge moves in-house permanently. Contracts sometimes restrict it, so check before making an offer. The consultancy loses revenue and gains a reference.

About the Author
Richard Lowe, professional ghostwriter

Richard Lowe is a professional ghostwriter and author with 113+ books authored and 54+ ghostwritten. Before writing full time he spent 33 years in enterprise technology, including 20 years as Director of Computer Operations and Technical Services at Trader Joe's. He writes nonfiction, fiction and memoir, and works with executives and experts on books that build authority.

More about Richard Lowe →

Disclaimer

The views and opinions expressed in this blog post are solely those of Richard Lowe and are based on personal experience and research. This content is for informational purposes only and should not be construed as professional legal, financial, accounting, or business advice. Always consult with qualified professionals before making important business or legal decisions. Richard Lowe is not a lawyer, accountant, or licensed professional advisor, and this content does not establish any professional relationship.

0 comments

No comments yet. Yours can be the first.

Was this useful?

Leave a comment