> _ VG.dev
~/home~/projects~/blog~/about
~/blog
16-years-enterprise-software-lessons.md

title: "16 Years in Enterprise Software: Lessons Learned"

date: 2026-04-26

readingTime: 7 min read

tags: ["Career", "Leadership", "Opinion"]

16 Years in Enterprise Software: Lessons Learned

April 26, 20267 min read
CareerLeadershipOpinion

16 Years in Enterprise Software: Lessons Learned

I started my career in 2008, fresh from engineering college in India, about to board a flight to Bahrain for my first job. I knew C# syntax. I knew sorting algorithms. I knew nothing about building software that real businesses depend on.

Today, I lead software support and operations for a group of companies, overseeing systems handling payroll, accounting, inventory, and trading for thousands of users.

This post is what I've learned—the hard way—about enterprise software, teams, and careers.

Lesson 1: Boring Technology Wins

At 24, I wanted to use the latest frameworks. Every project needed cutting-edge tech.

At 40, I choose boring technology.

Why:

  • The latest framework might not exist in 3 years
  • Your team needs to hire developers in 2 years
  • That edge case you found on GitHub? Someone already solved it with ASP.NET Web Forms in 2005
  • Boring = documented, stable, understood

Our stack today (2026):

  • Backend: .NET Core (not the latest, not the oldest—LTS)
  • Frontend: React (boring, but works)
  • Database: SQL Server (we know it, it works)
  • Infrastructure: Mix of Azure and on-prem (whatever the business needs)

Not exciting. Very effective.

Lesson 2: Legacy Code Isn't Stupid—It's Battle-Tested

Early in my career, I looked at legacy code and thought: "This is terrible. I'll rewrite it properly."

Then I'd rewrite it. And break something I didn't understand.

What I learned:

  • That "terrible" if statement? Handles a regulatory requirement you didn't know existed
  • That "spaghetti" code? Has been patched for 10 years of edge cases
  • That "outdated" library? Works, and replacing it costs 10x what you estimated

Now I ask:

  1. Why does this exist?
  2. What happens if I change it?
  3. Who knows the history? (Find that person)
  4. Can I incrementally improve instead of rewriting?

Rewrites are last resort. Refactor incrementally.

Lesson 3: Business Value > Technical Purity

I once spent 3 weeks refactoring a module to follow Clean Architecture perfectly.

My manager asked: "Did this help the business?"

The answer was no. It looked better. I felt smarter. But the business didn't care.

What matters to the business:

  • Can users do their job faster?
  • Are there fewer errors?
  • Can we generate the monthly report before the 5th?
  • Is the payroll running on time?

Technical excellence matters, but only when it serves business value.

Framework:

  1. What problem are we solving?
  2. How does this help the business?
  3. What's the simplest solution?
  4. Now, how do we make it maintainable?

Not the other way around.

Lesson 4: Documentation Is a Gift to Future You

I didn't document code for years. "The code is self-documenting," I'd say.

It wasn't. And future me (and my team) paid the price.

What I document now:

  • Why, not what (code shows what)
  • Business rules (why this calculation exists)
  • Gotchas (what breaks if you change this)
  • Dependencies (what systems this talks to)

Example:

// Bad comment
// Calculate salary
var salary = baseSalary + allowance - deduction;

// Good comment
// Bahrain labor law requires end-of-service bonus calculation
// based on last drawn salary and years of service.
// Formula: (lastSalary × yearsOfService) / 2
// Source: Bahrain Labor Law Article 52
var endOfServiceBonus = (lastSalary * yearsOfService) / 2;

One hour of documentation saves ten hours of debugging later.

Lesson 5: Production Is the Only Truth

Your local environment lies. The test environment lies. Only production tells the truth.

What I've learned:

  • If it's not monitored, it's broken (you just don't know yet)
  • If you can't deploy in 10 minutes, your deployment process is broken
  • If you don't have rollbacks, you're not deploying—you're gambling
  • Logs are useless without search and alerts

Our production rules:

  1. Every service has health checks
  2. Every error is logged with context
  3. Every deployment is automated and reversible
  4. Every metric has an alert threshold
  5. Every incident has a post-mortem

Production problems aren't failures. They're learning opportunities.

Lesson 6: Soft Skills Compound Faster Than Technical Skills

Early career, I thought technical skills were everything.

Then I watched less-technical developers advance faster because they:

  • Communicated clearly
  • Understood business needs
  • Built relationships
  • Made others better

Skills that compound:

  • Writing: Clear docs, proposals, post-mortems
  • Speaking: Explaining technical concepts to non-technical stakeholders
  • Listening: Understanding what users actually need (vs. what they say they need)
  • Teaching: Making your team better makes you invaluable

Technical skills get you hired. Soft skills get you promoted.

Lesson 7: Specialize, Then Generalize

Early advice I got: "Be a full-stack developer. Know everything."

Problem: I knew a little about everything, nothing deeply.

What worked better:

  1. Specialize first (I chose backend/.NET)
  2. Become the go-to person for that thing
  3. Then expand (learned frontend, DevOps, architecture)
  4. T-shaped skills: Deep in one area, broad in others

Now: I'm still primarily a backend engineer. But I understand enough frontend, DevOps, and business to be dangerous.

Depth first, then breadth.

Lesson 8: Say No (Strategically)

Early career, I said yes to everything. More work = more experience, right?

Wrong. It led to burnout and mediocre work on too many things.

Now I ask:

  1. Does this align with my goals?
  2. Am I the right person for this?
  3. What do I need to say no to in order to say yes to this?
  4. Can I delegate this?

Saying no to good opportunities lets you say yes to great ones.

Lesson 9: Your Network Is Your Net Worth

I got my current role through a former colleague who remembered I was good to work with.

Most opportunities in my career came from relationships, not job boards.

How I build network:

  • Help others without expecting return
  • Share what I learn (blog posts, talks, mentoring)
  • Stay in touch with former colleagues
  • Be someone people want to work with

Your reputation follows you. Make sure it's one you're proud of.

Lesson 10: Technology Changes. Fundamentals Don't.

I've worked with:

  • ASP.NET Web Forms → MVC → Core
  • SQL Server 2005 → 2022
  • jQuery → Angular → React
  • On-prem → Cloud → Hybrid

What hasn't changed:

  • SOLID principles
  • Database normalization
  • HTTP (still request/response)
  • The need for clear requirements
  • The importance of testing
  • The value of good documentation

Invest in fundamentals. Frameworks come and go.

Lesson 11: Imposter Syndrome Never Fully Goes Away

At 24: "I don't know enough to be here."

At 40: "I don't know enough about [new thing]."

What I learned:

  • Everyone feels this way (even the people who seem confident)
  • Not knowing is fine. Not learning isn't.
  • Expertise is temporary. Stay curious.
  • You're hired for what you know. You're kept for what you learn.

Imposter syndrome means you're growing. Embrace it.

Lesson 12: Work-Life Balance Isn't Selfish

I've pulled all-nighters for deployments. Worked weekends for deadlines.

Did the business remember? Yes. Did it matter in 5 years? No. Did it affect my health and relationships? Yes.

Now I prioritize:

  • 8 hours of sleep (non-negotiable)
  • Exercise (3-4x per week)
  • Family time (protected)
  • Hobbies outside tech
  • Actual vacations (no laptop)

Burnout helps no one. Sustainable pace wins.

Advice to My 24-Year-Old Self

If I could talk to myself back in 2008:

  1. Learn the business, not just the code
  2. Write things down (docs, notes, blog)
  3. Build relationships with colleagues
  4. Ask questions earlier (don't spin wheels for days)
  5. Specialize first, generalize later
  6. Take care of your health (you'll need it in 20 years)
  7. It's okay to not know. It's not okay to not learn.
  8. Find mentors (and be one eventually)
  9. Side projects matter (they keep you curious)
  10. This is a marathon, not a sprint

What's Next?

I'm still learning. Currently exploring:

  • AI/ML applications in enterprise software
  • Modern architecture patterns (event-driven, microservices)
  • Better ways to lead and mentor teams
  • How to build software that lasts 20+ years

The day I stop learning is the day I should retire.


Thanks for reading. If this resonated, share it with someone starting their journey. Find me on LinkedIn or GitHub.

You might also like

2026-04-17

Vibe Coding: Myths vs Facts

6 min read
Next