16 Years in Enterprise Software: Lessons Learned
Reflections on 16 years building enterprise software—from writing my first ASP.NET page to leading teams modernizing legacy systems. What I wish I knew at 24.
~/blog
Thoughts on software engineering, architecture, and technology
Reflections on 16 years building enterprise software—from writing my first ASP.NET page to leading teams modernizing legacy systems. What I wish I knew at 24.
16 years of coding taught me patterns the hard way. Here are the TypeScript techniques that would have saved me hundreds of hours of refactoring.
Real-world React optimization techniques for enterprise dashboards handling thousands of rows—what works, what doesn't, and measurable performance gains.
Step-by-step tutorial: Build a code review assistant using local LLMs that catches bugs, suggests improvements, and enforces coding standards—without sending code to external APIs.
Beyond the hype—real AI/ML use cases that deliver value in enterprise ERP systems. What we've tried, what worked, and what was a waste of time.
Real cost and complexity comparison between Azure cloud and self-hosted infrastructure for enterprise ERP systems—based on actual production deployments in the Middle East.
Step-by-step guide to containerizing legacy .NET Framework applications—handling dependencies, configuration, and gradual migration to .NET Core.
Beyond textbook indexing—real strategies from optimizing ERP databases handling millions of transactions daily. What works, what doesn't, and how to measure impact.
Practical patterns for building multi-tenant enterprise systems—tenant isolation strategies, data partitioning, and compliance considerations from real production experience.
A look at my 16+ years building enterprise ERP systems with .NET and SQL Server — and why I believe in specialization over breadth.
A quick introduction to this blog, what I'll be writing about, and why I'm doing this.
Separating hype from reality in the age of AI-assisted development — what vibe coding actually is, what it isn't, and how to use it wisely.
A real-world account of migrating a 15-year-old monolithic ERP system to microservices—what worked, what didn't, and lessons learned along the way.
How to structure a .NET Core solution using Clean Architecture — separating Domain, Application, Infrastructure, and Presentation layers with real-world examples.
Deep dive into React Hooks - useState, useEffect, useContext, and custom hooks with practical examples and best practices.
A practical guide to implementing CQRS (Command Query Responsibility Segregation) in ASP.NET Core using MediatR — with real command/query examples, pipeline behaviors, and lessons from enterprise ERP systems.
Real-world SQL Server performance techniques I've used in enterprise ERP systems — indexes, query plans, CTEs, and avoiding the mistakes that kill throughput.
Real EF Core mistakes I've made or seen in enterprise .NET systems — N+1 queries, cartesian explosions, tracking overhead, migration pitfalls — and the patterns that solve them.
Practical patterns for building production-grade ASP.NET Core REST APIs — global error handling, validation pipelines, response envelopes, versioning, and more.
Essential best practices for building production-ready Node.js applications including error handling, security, performance optimization, and monitoring.