Lessons from 28 Years in Enterprise Software
What I learned building systems that process millions of transactions for Fortune 500 companies. The good, the bad, and the ugly.
Twenty-eight years is a long time to do anything. In enterprise software, it's practically an eternity. Here's what I learned.
Lesson 1: Reliability Beats Features
Every. Single. Time.
Enterprise customers don't care about your beautiful UI if the system goes down at 3 AM. They don't care about your clever algorithms if data goes missing. They care about one thing above all: does it work, every time, without fail?
I learned this the hard way. Early in my career, I obsessed over features. I wanted to build the most capable system anyone had ever seen. And I did — technically. But the system had reliability issues. Small ones, intermittent ones. But in enterprise, "intermittent" might as well be "constant." Trust erodes with every incident.
The fix? Make reliability your #1 feature. Instrument everything. Build graceful degradation. Test failure modes before success modes. Ship boring, reliable software and make the features work on top of that foundation.
Lesson 2: Integration Is Where Projects Die
The hardest part of enterprise software isn't the software. It's everything around it.
I've seen technically brilliant projects fail because the team underestimated integration complexity. They built the core system beautifully but couldn't connect it to the 15 legacy systems the company actually used.
The solution: design for integration from day one. Assume everything will need to connect to everything else. Build clean APIs. Document them obsessively. Make integration the easy part, not the hard part.
Lesson 3: The Best Code Is No Code
Not in the "no-code platform" sense. In the "every line of code you don't write is a line that can't break" sense.
Enterprise systems accumulate complexity like barnacles on a ship. Every new requirement, every edge case, every "just this once" exception adds weight. Over time, the system becomes impossible to change without breaking something.
The discipline I developed: before writing any code, ask "what happens if we don't build this?" You'd be surprised how often the answer is "nothing bad." Many features exist because someone asked for them once, not because they're actually needed.
Lesson 4: People Matter More Than Technology
The best architecture in the world fails if the team can't execute it. The most elegant code is worthless if nobody understands it.
Invest in your team. Write clear documentation. Make decisions explicit, not implicit. Build systems that a junior developer can understand, not just systems that make you look smart.
Lesson 5: The Business Problem Is the Real Problem
Technical problems have technical solutions. Business problems require business solutions — and technology is just one tool among many.
I spent years solving the wrong problems. I'd optimize a database query when the real issue was a broken business process. I'd add features when the real need was training. I'd automate workflows that should have been eliminated entirely.
Now, before I touch a keyboard, I ask: "What's the actual problem here? And is technology the right answer?"
Bringing Enterprise Lessons to Indie Building
These lessons don't just apply to Fortune 500 projects. They're the foundation of how I build everything now — including LeadzTrak, ThreadTrak, and every other product under the Kamran Ul Haq umbrella.
Build reliable systems. Design for integration. Write less code. Invest in clarity. And never lose sight of the actual problem you're solving.
That's 28 years of lessons in a nutshell. Hope it saves you some time.
Thanks for reading. If you enjoyed this, you might like my newsletter.
Join the Newsletter