Tech · · 17 min read

The Unreasonable Effectiveness of Boring Business Software

Glamorous tech gets the headlines, but the real money — and the real engineering challenges — live in CRM workflows, ERP integrations, and the unsexy plumbing that keeps businesses running. A love letter to boring software.

There is a particular kind of melancholy that settles over a developer who has just spent six months building a beautiful, pixel-perfect, award-worthy consumer app — only to watch it die in obscurity with forty-three monthly active users, thirty of whom are family members. Meanwhile, somewhere in a windowless office park in suburban Ohio, a team of unremarkable developers is maintaining a payroll processing system that handles two billion dollars in transactions every month, and nobody has ever written a breathless TechCrunch article about them.

This is an essay about that second team. About the strange, wonderful, deeply unglamorous world of business software. About why the most impactful code you will ever write might involve tax jurisdiction lookups rather than neural networks. And about why, if you squint at it from the right angle, boring software is actually the most interesting software there is.


The Glamour Gap

Go to any hackathon. Walk the floor. Count the projects. You will find AI-powered social networks, blockchain-based everything, apps that use your phone’s accelerometer to detect your mood, and at least three teams building “Uber for X” where X is something that absolutely does not need an Uber. What you will not find is anyone building an invoice reconciliation tool.

This is not because invoice reconciliation is a solved problem. It is, in fact, a spectacularly unsolved problem. Billions of dollars leak out of the global economy every year because of mismatched invoices, duplicate payments, and accounting errors that nobody catches until the quarterly audit. But invoice reconciliation does not look good in a demo. You cannot put a spinning 3D globe on the landing page. The pitch deck does not make VCs lean forward in their Aeron chairs.

There is a fundamental disconnect between what engineers want to build and what the world actually needs. Engineers gravitate toward novelty. We want to work on things that feel new, that push boundaries, that give us something interesting to talk about at dinner parties. But the world does not primarily need novelty. The world needs its invoices reconciled. It needs its inventory tracked. It needs its employees paid on time and its taxes filed correctly and its customer complaints routed to someone who can actually help.

This is the glamour gap: the chasm between what is celebrated in tech culture and what creates genuine economic value. And if you are a developer looking for a place where your work will actually matter, that gap is where you want to be standing.


The Billion Dollar Spreadsheet

Here is a secret that the enterprise software industry does not like to advertise: most of the global economy runs on spreadsheets. Not elegant spreadsheets, mind you. Monstrous, sprawling, multi-tab behemoths with nested VLOOKUPs referencing other spreadsheets that reference other spreadsheets, forming a dependency graph that would make a compiler engineer weep. Spreadsheets with macros written by someone who left the company in 2014. Spreadsheets that crash if you sort column J because column J contains a formula so deeply recursive that Excel needs a moment to contemplate its own existence.

These spreadsheets are not a joke. They are the beating heart of commerce. A McKinsey study once estimated that knowledge workers spend nearly 30 percent of their time searching for and consolidating information, much of it trapped in spreadsheets that were never designed to be systems of record but became them anyway, through a slow process of accretion and organizational neglect.

Every great business software company started by looking at one of these spreadsheets and saying: “What if this were a real application instead?”

Salesforce looked at the spreadsheets that sales teams were using to track leads and contacts and said: what if we put this in the cloud and added workflows and dashboards and an entire platform on top? That observation is now worth over two hundred billion dollars in market capitalization.

SAP looked at the spreadsheets that manufacturers were using to plan production runs and manage supply chains and said: what if all of this data lived in one integrated system? That observation created a company that quietly runs a significant fraction of the Fortune 500.

Intuit looked at the spreadsheets — and shoeboxes full of receipts — that small business owners were using to manage their books and said: what if this were software that your accountant could also use? That observation built a company that touches the financial lives of tens of millions of people every year.

The pattern is remarkably consistent. Find a spreadsheet that a business depends on. Understand why it exists, what it tracks, and who touches it. Build software that does the same thing but with proper data integrity, access controls, audit trails, and automation. Congratulations, you have a business.

The reason this works is that spreadsheets, for all their flexibility, are terrible at the things that matter most in business: enforcing data consistency, managing concurrent access, maintaining audit history, automating workflows, and scaling beyond one person’s mental model. The moment a spreadsheet becomes critical to a business process, it has already outgrown the tool. The gap between what the spreadsheet does and what the business needs is where all the value lives.


Why Business Software is Actually Hard

There is a persistent myth in the tech world that business software is easy. That it is just CRUD apps all the way down. Forms, databases, reports. How hard can it be?

Let me introduce you to the concept of a fiscal year calendar.

You might think a fiscal year is simple. It is twelve months, starting on some arbitrary date instead of January 1. Your company’s fiscal year starts in April? Fine, shift everything by three months. Done.

Except no. Some companies use a 4-4-5 calendar, where the year is divided into four quarters, each consisting of two four-week periods and one five-week period. Except in years where there are 53 weeks, in which case the last period gets an extra week, and now your year-over-year comparisons are broken because you are comparing a five-week period to a six-week period. And some companies use a 4-5-4 calendar instead, because of course they do. And some companies have a fiscal year that changes depending on when Easter falls, because they are in retail and their fiscal year is pegged to the holiday shopping season.

Now make your reporting system handle all of these. And make it let users switch between them in the same dashboard.

That is one feature. One. And it is not even one of the hard ones.

The Edge Case Menagerie

Business software is where edge cases come to roost and multiply. Consider multi-currency handling. On the surface, it seems straightforward: store the exchange rate, multiply. But a real implementation needs to track historical exchange rates (because the rate when the deal was signed is different from the rate when the payment was received), handle triangulated conversions through a common currency, deal with currencies that have been redenominated or abolished entirely, manage rounding rules that differ by currency and jurisdiction, and handle the fact that some currencies do not have decimal subdivisions at all.

Or consider approval hierarchies. A simple approval chain is easy: the request goes to your manager, then their manager, and so on up the chain. But real organizations have matrix reporting structures where you report to different people for different purposes. They have delegation rules where someone can approve on behalf of someone else, but only for amounts below a certain threshold, and only during certain date ranges, and only for certain categories of expenditure. They have skip-level approvals and split approvals and conditional approvals and approvals that need to loop back to the requester for additional information before proceeding. Modeling this correctly is a genuine computer science problem.

And then there is compliance. Regulatory requirements that change quarterly. Tax codes that differ not just by country but by state, city, and sometimes by the specific block the transaction occurred on. Privacy regulations that require you to delete data but also require you to retain records of what you deleted and why. SOX controls that demand audit trails on everything but also demand that the audit trails themselves be tamper-proof.

This is not CRUD. This is real engineering. The problems are hard, the constraints are real, and the consequences of getting it wrong are measured in dollars, lawsuits, and occasionally jail time. Nobody goes to prison because your social media app has a bug in the friend suggestion algorithm. People can and do face legal consequences when payroll software miscalculates overtime.


The Integration Tax

Here is an iron law of business software: every application, given enough time and users, will evolve until it needs to integrate with every other application.

It starts innocently. Your CRM needs to pull customer data from the ERP. Your ERP needs to push inventory updates to the warehouse management system. Your warehouse management system needs to send shipping notifications to the e-commerce platform. The e-commerce platform needs to feed order data back into the CRM. Before you know it, you have drawn a diagram on the whiteboard that looks less like a system architecture and more like a conspiracy theorist’s evidence wall, complete with red string connecting everything to everything else.

This is the integration tax, and every business pays it. The larger the business, the higher the tax. And unlike other technical debt, integration debt compounds in ways that are genuinely nonlinear. When you have three systems, you have three potential integration points. When you have ten, you have forty-five. When you have fifty, you have over a thousand. And each integration is a bespoke snowflake, because no two systems model the same data in the same way, handle errors the same way, or define “customer” the same way.

The Middleware Underclass

Integration engineering is the most underappreciated discipline in software. The people who build and maintain the APIs, webhooks, ETL pipelines, message queues, and middleware layers that tie enterprise systems together are doing genuinely difficult work. They are dealing with distributed systems problems — eventual consistency, idempotency, partial failures, ordering guarantees — in a context where the systems on either end were not designed to cooperate and the data models are actively hostile to each other.

Consider what happens when a customer’s address changes. In the CRM, this is an update to a contact record. In the ERP, it might trigger a tax jurisdiction recalculation. In the shipping system, it needs to update pending orders but not completed ones. In the billing system, it depends on whether the address is a billing address or a shipping address or both. In the compliance system, the old address needs to be retained for historical records. And all of these updates need to happen in a coordinated fashion, or you end up with one system thinking the customer is in Texas and another thinking they are in Oregon, and suddenly you are calculating the wrong sales tax and your finance team is having a very bad quarter.

The people who solve these problems do not get invited to give keynotes at tech conferences. They do not have popular Twitter accounts. But they are holding together the infrastructure of modern commerce with duct tape, clever retry logic, and a deep understanding of distributed systems theory that they probably did not learn in school.


The Low-Code Paradox

Every few years, the enterprise software world discovers a new silver bullet: tools that let “citizen developers” — business analysts, power users, people who are not professional software engineers — build their own applications. The pitch is always the same. We will democratize software development. We will eliminate the IT bottleneck. Business users will build exactly what they need, when they need it, without waiting six months for the development team to get around to it.

And to be fair, these tools deliver on part of the promise. Low-code and no-code platforms are genuinely excellent for the first 80 percent of a problem. Need a form that captures data and stores it in a database? Done. Need a workflow that routes approvals through a three-step chain? Done. Need a dashboard that shows last month’s sales by region? Done. The citizen developer builds it in an afternoon, the business is happy, and everyone declares victory.

Then comes the last 20 percent.

The Last Twenty Percent

The last 20 percent is where the business says: “This is great, but can you make it also check the customer’s credit limit before approving the order? And the credit limit depends on their payment history, which is in a different system, and the rules for calculating it are different for domestic and international customers, and oh, by the way, for customers in the EU we also need to check against the sanctions list.”

The citizen developer stares at the screen. The low-code platform does not have a “check the sanctions list” block. There is no drag-and-drop component for multi-system credit limit calculation with jurisdiction-dependent business rules. The afternoon project has become a multi-week ordeal, and the citizen developer — who, remember, has an actual day job that is not software development — is now spending more time fighting the platform’s limitations than they would have spent just writing the requirements document for the IT team.

This is the low-code paradox. These platforms do not eliminate the need for developers. They shift the point at which developers become necessary. The easy problems get solved faster, which is genuinely valuable. But the hard problems — the ones that involve integration, complex business logic, error handling, and edge cases — are just as hard as they always were, and now they have to be solved within the constraints of a platform that was designed for the easy problems.

The result is a new class of technical debt. Organizations end up with hundreds of low-code applications, built by people who have since moved on to other roles, with no documentation, no tests, no version control, and business logic embedded in visual workflows that are nearly impossible to audit or refactor. The IT team, rather than being freed from maintenance work, inherits a portfolio of applications they did not build and cannot easily understand.

None of this means low-code is bad. It means that low-code is a tool, not a revolution. It is excellent at making simple things simple. But it does not make complex things simple. It makes complex things look simple for a while, until they are not, and then you need a developer who understands both the platform and the underlying business problem. That developer, by the way, is in very high demand.


In Praise of Boring

I want to end with a piece of career advice that will not appear in any Silicon Valley think piece, will not get retweeted by tech influencers, and will not make for a compelling Y Combinator application. Here it is:

Get really good at building boring software.

I mean this sincerely. If you are a young developer trying to figure out where to focus your energy, I want you to seriously consider the unsexy end of the software spectrum. CRM customization. ERP integration. Workflow automation. Data migration. The kind of work that, when you describe it at a party, causes people to suddenly remember that they need to refill their drink.

Here is why.

The Money is Real

Business software is not a speculative bet on future user growth. It solves problems that businesses are already paying to solve — usually with a combination of manual labor, spreadsheets, and quiet desperation. When you automate a process that currently takes a team of eight people forty hours a week, the ROI calculation is not theoretical. It is a spreadsheet that the CFO actually understands, and CFOs sign checks.

This means that business software companies tend to have real revenue, real margins, and real staying power. It also means that the developers who build this software tend to have stable employment, competitive salaries, and the ability to point to concrete business outcomes that justify their existence. Try doing that with a social media app that has forty-three monthly active users.

The Problems are Genuinely Hard

I have tried to make this case throughout this essay, but it bears repeating: the engineering challenges in business software are real. Distributed systems, data modeling, concurrency, security, compliance, integration, performance at scale — these are not watered-down versions of “real” computer science problems. They are the same problems, wearing a suit and tie instead of a hoodie.

The difference is that in business software, the constraints come from the real world rather than from abstract specifications. You cannot simplify the tax code because it makes your data model cleaner. You cannot tell the customer that their approval hierarchy is too complex for your system. You have to build software that models the world as it actually is, in all its messy, contradictory, edge-case-riddled glory. That is a harder problem than building software that models the world as you wish it were.

The Impact is Tangible

There is something deeply satisfying about building software that you can trace directly to real-world outcomes. When you build an inventory management system that reduces stockouts by 30 percent, you can walk into a store and see the shelves that would have been empty. When you build a claims processing system that cuts turnaround time from two weeks to two days, there are real people who get their insurance checks faster. When you build a scheduling system for a hospital, there are patients who see their doctor sooner.

This kind of impact is hard to find in consumer tech, where the connection between your code and someone’s life is mediated by engagement metrics and advertising revenue. In business software, the connection is direct. You built a thing. It works. The business runs better because of it. People’s working lives are a little less frustrating. That is worth something.

The Quiet Confidence

There is a particular kind of confidence that comes from being good at something the world genuinely needs, even if the world does not celebrate it. The developer who deeply understands multi-tenant data architecture, or who can design an integration layer that gracefully handles partial failures, or who can model a complex business process in a way that is both correct and maintainable — that developer has skills that are valuable today, will be valuable in ten years, and will be valuable in twenty.

Technologies come and go. Frameworks rise and fall. The hot startup of 2024 is the cautionary tale of 2026. But businesses will always need software that tracks their inventory, manages their customers, pays their employees, and files their taxes. The boring problems are the immortal problems.


So the next time someone at a meetup asks what you work on, and you say “I build CRM integrations” or “I work on ERP middleware” or “I automate business workflows,” and they give you that slightly pitying look before wandering off to talk to the person building an AI-powered NFT marketplace for dogs — remember this:

You are building the software that the world actually runs on. The software that moves money, tracks goods, pays people, and keeps the machinery of commerce turning. It is not glamorous. It will never be glamorous. But it is important, it is hard, and it is yours.

That is more than enough.