Every few months, a client asks if we should rebuild on the latest framework, or migrate to a database that promises infinite scale on a tweet. We listen. We explain why we usually say no. Then we go back to shipping.

GridX — our utility billing platform — runs on PostgreSQL, a vanilla Node API, and a React dashboard that isn't trying to win design awards. It processes thousands of meter readings a day. Nobody cares what ORM we use. They care that invoices are correct.

1. Boring means debuggable at 2am

When a payment reconciliation job fails on a Sunday night, you want Stack Overflow answers, not a GitHub issue with 12 open threads. PostgreSQL has decades of that. So does nginx. So does Redis.

Exotic stacks mean exotic failures. Your junior dev shouldn't need to understand distributed consensus to fix a typo in a billing rule.

2. The product is the differentiator

Your customers in Kampala or Lagos don't choose you because you run Kubernetes. They choose you because you understand their workflow — prepaid meters, irregular payment cycles, agents who work offline.

Invest engineering energy where users feel it. Not where developers tweet about it.

3. Our default stack (and why)

  • PostgreSQL — JSON support when you need flexibility, ACID when you need trust
  • Flutter or React — depending on mobile vs web priority, not hype cycles
  • Managed hosting — Railway, Fly, or a solid VPS. No self-managed K8s for a 10k-user app
  • GitHub Actions — CI/CD that every dev on the team can read

We deviate when there's a genuine reason — real-time sync needs SQLite on device, high-throughput ingestion might need a queue. But "it's new" isn't a reason.

4. When we do reach for something newer

We're not luddites. We adopt tools when they're proven, documented, and solve a problem boring tech can't. We added Drift for offline SQLite because the Flutter ecosystem matured around it. We didn't adopt it because it launched on Product Hunt.

The test: can we explain the choice to a client in one sentence? Can we hire someone to maintain it in Nairobi? If both answers are yes, it's worth considering.

Excitement where it counts

Save the innovation budget for user-facing features — faster checkout, smarter reconciliation, dashboards that actually help someone run their business. The stack should be invisible. The product should be unforgettable.

Want a team that picks tools for your business, not their résumé? Start a conversation.