profile-pic

Puneet Bhadauriya

To leverage my 12 years of IT industry experience, with a focus on mobile and distributed application development, to lead technical teams in delivering innovative solutions that enhance organizational efficiency and customer satisfaction.

  • Role

    Staff Software Engineer

  • Years of Experience

    8.5 years

Skillsets

  • CI/CD
  • Zookeeper
  • .NET
  • ASP.NET Core
  • Automation Testing
  • Azure Blob Storage
  • Distributed Systems
  • event-driven architecture
  • Microservices
  • .NET Core
  • Kafka
  • Datadog
  • Elasticsearch
  • Git
  • Java
  • Kibana
  • Microsoft Azure
  • REST
  • Vue.js
  • PostgreSQL
  • Kubernetes - 4 Years
  • Docker - 5.0 Years
  • JavaScript
  • Xamarin
  • Windows services
  • WPF
  • Azure DevOps - 6 Years
  • C#
  • MongoDB
  • SQL Server - 4 Years
  • WinForms
  • Entity Framework
  • Jenkins
  • MySQL
  • WCF
  • Amazon S3
  • Azure AI Search
  • Azure Service Bus

Professional Summary

8.5Years
  • Sep, 2025 - Present 11 months

    Staff Software Engineer

    Q2 Software
  • Aug, 2022 - Feb, 20252 yr 6 months

    Senior Technical Lead

    MediaKind India
  • Mar, 2022 - Aug, 2022 5 months

    Senior Backend Engineer

    Aviso Software India
  • Mar, 2013 - May, 20152 yr 2 months

    Senior Software Engineer

    Smart Chip
  • Sep, 2015 - Jan, 20171 yr 4 months

    Software Engineer

    Tavant Technologies
  • Jan, 2017 - Mar, 20181 yr 2 months

    Senior Software Developer

    Taritas Software Solutions

Applications & Tools Known

  • icon-tool

    Git

  • icon-tool

    GitLab

  • icon-tool

    Jenkins

  • icon-tool

    TFS

  • icon-tool

    SonarQube

  • icon-tool

    Visual Studio Code

  • icon-tool

    Visual Studio

Work History

8.5Years

Staff Software Engineer

Q2 Software
Sep, 2025 - Present 11 months
    Shaped the architectural strategy for modernizing an enterprise banking platform by introducing YARP as an API Gateway, enabling incremental migration while allowing legacy and modern services to coexist without customer disruption. Led architecture and engineering delivery for modernization of key banking domains including Disclosures Management, Interest Rate Configuration, and Customer & Account Beneficiary Management, transforming legacy console applications into modern web applications and lightweight APIs while maintaining backward compatibility. Identified a future scalability risk as search requirements expanded from customer data to account, card, and additional search attributes. Led a proof of concept and designed an Azure AI Search based architecture with Azure Service Bus for event-driven indexing, removing search workloads from the primary transactional database. Led the engineering team in implementing expanded customer, account, and card search capabilities, including multi-attribute and wildcard search, supporting a platform serving 50+ financial institutions and millions of users. Conducted proof-of-concepts and architectural reviews to validate modernization approaches and establish reusable solution patterns. Partnered with architects, product managers, and engineering teams to influence technical direction, establish engineering practices, and mentor engineers. Environment: C#, .NET 8, ASP.NET Core, ASP.NET MVC, REST APIs, Vue.js, Azure Blob Storage, Azure Service Bus, Azure AI Search, YARP, Azure DevOps, SQL Server, SpecFlow.

Senior Technical Lead

MediaKind India
Aug, 2022 - Feb, 20252 yr 6 months
    Contributed to the modernization of 15+ legacy .NET Framework services running on Windows, migrating services to .NET Core and containerized deployments with Docker and Kubernetes to address infrastructure cost and scalability limitations. Led the architecture for transitioning an enterprise OTT CMS from a single-tenant-per-customer model to a flexible shared and siloed SaaS platform, defining HLD/LLD, tenant-aware APIs, authorization, and data-isolation patterns. Enabled faster customer onboarding and supported scaling the platform to additional customers while preserving shared and tenant-isolated operating models. Led architecture discussions with architects and engineering teams, defined implementation approaches, and reviewed technical designs and pull requests to guide delivery of the multi-tenant platform. Designed a real-time metadata caching architecture to reduce customer-visible latency while preserving existing publishing workflows. Redesigned metadata cache generation for 500K+ title catalogs after CLR out-of-memory and memory-pressure issues prevented customers from publishing large catalogs. Replaced monolithic processing with batch-based processing and controlled batch sizes to bound memory usage, enabling the platform to support significantly larger sports streaming catalogs. Led and executed a zero-downtime MongoDB migration from 2.6 to 6.0, driving the POC, migration strategy, application driver upgrades, deployment standardization, and automated validation as part of the platform's transition from Windows-based infrastructure to containerized deployments. Proposed, designed, and drove implementation of an active-active regional architecture using MongoDB replication, leveraging a secondary regional cluster to improve customer availability and eliminate dependency on a single region. Improved content publishing performance by optimizing cache-generation algorithms, refactoring critical processing paths, and streamlining Azure Blob Storage and Amazon S3 uploads, reducing publishing time by approximately 25% for high-volume sports streaming workloads. Influenced platform architecture through technical design reviews, proof-of-concept initiatives, technology evaluations, architecture documentation, and migration strategies. Rapidly assumed ownership of a mission-critical OTT CMS platform with minimal knowledge transfer, mastering an unfamiliar Java/JBPM ecosystem and leading delivery of five major customer features. Led root-cause analysis and resolution of complex distributed-system issues involving MongoDB, Kubernetes, caching, memory management, garbage collection, and indexing. Environment: C#, .NET 6, ASP.NET Core, REST APIs, MongoDB, Elasticsearch, Kibana, Docker, Kubernetes, Azure Blob Storage, Amazon S3, Kafka, Zookeeper, Java, Automation Testing.

Senior Backend Engineer

Aviso Software India
Mar, 2022 - Aug, 2022 5 months
    Improved backend performance by optimizing complex SQL queries and request-processing workflows for enterprise financial planning software. Partnered with product and engineering teams to deliver scalable backend capabilities and contribute to architecture, peer reviews, and incremental modernization. Environment: C#, .NET 6, ASP.NET Core, REST APIs, MongoDB, Microservices, Jenkins, Git, Datadog.

Senior Software Developer

Taritas Software Solutions
Jan, 2017 - Mar, 20181 yr 2 months
    Designed and developed enterprise cross-platform mobile applications using Xamarin for Android, iOS, and Windows from a shared codebase. Built REST APIs, synchronization services, and offline-first data models supporting reliable enterprise mobile applications. Integrated Visual Studio App Center for crash reporting, analytics, and application monitoring.

Software Engineer

Tavant Technologies
Sep, 2015 - Jan, 20171 yr 4 months
    Designed and implemented enterprise authentication and authorization using Microsoft Active Directory. Developed enterprise desktop applications using WPF, MVVM, and WCF, focusing on modularity, maintainability, and responsiveness. Collaborated with architects and senior engineers on reusable frameworks, solution design, and engineering best practices.

Senior Software Engineer

Smart Chip
Mar, 2013 - May, 20152 yr 2 months
    Developed software solutions supporting Regional Transport Offices across multiple Indian states for vehicle registration, driving license issuance, and smart-card personalization. Implemented a 24/7 distributed synchronization platform exchanging data between regional transport offices and centralized government databases. Built Windows Services, ASMX, and WCF services supporting real-time communication, background processing, and secure data synchronization. Optimized SQL Server performance through stored procedures, query tuning, and efficient data-access strategies for high-volume government transactions.

Achievements

  • Achieved smooth transition within 2 weeks and rapid feature implementation for CMS products, resulted in more business , new customers and revenue.
  • Enhanced database performance by 20% and scalability for high-demand sports customers.
  • Led the successful migration of legacy applications to .NET Core, reduced cost by 40% on overall deployment and maintenance.
  • Reduced overall azure / AWS storage costs by re architecture image resize flow , resulted in 30% cost savings.

Education

  • Bachelor of Engineering Computer Science & Engineering

    Patel College of Science & Technology (2011)

Interests

  • Cricket
  • Cooking
  • Travelling
  • A Few Screening Questions Before You Begin

    So myself, Puneet, and I have I'm a software engineer working in the IT industry for the last twelve years. And, primarily, I have been working with the Microsoft tech stack. There, I have basically worked on many technical things. Like, starting from my career, I have worked on wind farms and the WPA. After that, I got a chance to work on mobile development using Jaming, which is a crash platform framework. And after that, I have been working on API development where I was mainly part of building or building the API, which can scale to millions of users, and we can support that load. Apart from that, also, I am part of the architecting team. So I and my team have rearchitected couple of modules in our product line so that we can support multiple other customers, which are not in the same data model or you can say, they are huge in those dimensions. So, to support them, we have to re architect some of our modules. I also migrated my dot net projects, which were running in Windows only, and then we were not able to use them on Linux or Kubernetes. So I migrated all my media kind products to dot net core. And since then, we are in the cloud world. Also, last three years, I am working as a senior tech lead. There, I am playing three roles. One is, mainly, I'm doing development. But on the other side, I'm part of requirement analysis and gathering, and then seeing whether they are good to be put in the product line or there is some architectural change. There is team collaboration as well in the same time, and then my team is there where we are doing grooming and we are delivering those features. And, I'm part of performance testing and, you say, whenever there is some issue is happening on the production environments, I'm the one who is the subject matter expert. So I also play a crucial role in those calls where I can try to mitigate or resolve those problems. So that's pretty much me. And apart from that, I'm also a good learner and keep adapting to anything. So last one year also, I am supporting one of my Java project, which has come as a transition to me. So I and couple of other people in my team were supporting that. So, usually, we were able to deliver three to four features within six months. And so, yeah, Java is something I am also comfortable with, not proficient, but comfortable. And then apart from that, I am very comfortable with front-end development where I can build something using Angular or React. And then I can integrate APIs and all in those modules. So, yeah, pretty much, yeah, I'm comfortable with this.

    So at your service, we are not using our product line. We are using Kafka to paste, but they are pretty much the same. I can relate how your service bus is basically working. The idea is basically when earlier, we had a monolithic architecture where one service was deployed and all the load was coming to that service only. And scalability was a problem with that type of architecture because you cannot scale horizontally those services. It can scale up to vertically, and then there is a limit to RAM and hard disk. And that is where these microservices or decoupled components came into the picture. And to basically communicate with each other, they'll need some asynchronous mechanism. So that is where Azure service bus plays a crucial role, which can basically play as a publisher and subscriber. So when an event is published in an asynchronous manner, that can be basically listened to by other dependent microservices, and they can perform some business. Right. So yeah. Topics are basically where the messages go. Messages are basically put there. And from there, subscribers are basically consumers or someone who consumes those topics. So first, they subscribe to those topics, and then whatever message is coming to those topics, they can get consumed. We are using Polly for retries. It can be used because you shouldn't unnecessarily call your API, and the services won't respond. You're down. So that is where this retry mechanism or circuit-breaking strategies came into the picture. We can use Polly, which is in the.NET library, and can be used for retrying. There are on/off toggles, which can be used to specify how many times you want to hit that. If any after that, you can do a circuit-breaking and be ideal so that your breaking service doesn't get impacted with the other service, which is not responding. You're basically breaking down. Apart from that, yeah. Okay. Yeah. So pretty much, yeah. I have covered this question, and yeah. So, reliable communication between microservices or decoupled components can be done using these Kafka, Redis, or Azure service bus because they are basically writing messages on the topic, and then the topic is subscribed to consumers, and consumers are continuously getting those messages, and they can play. It's more so-called as event-driven architecture in the microservices world.

    I don't have much exposure to Azure functions, so I will not be able to answer this. And I'll skip this for now, but this is something which after Java, I will be learning. I have written couple of Azure functions just for practice, to understand how they work and how we can use them in a sample project. But in our product line, we weren't using it initially, so I won't be able to answer this question.

    So dependency injection is a design pattern used in modern applications to keep two dependent classes independent. Let's say there is a dependency in terms of a class object which has to be available in the second class when we are creating the object of it. This can be resolved using dependency injection. One way to do this is to manually create that dependency and pass it to that class, and the other way is to use inversion of control frameworks, which can resolve dependencies at runtime based on the requirements of your component or classes. In.NET Core, there is an inbuilt dependency framework that we can use. However, in our.NET framework application, we also developed a custom dependency module that we migrated to.NET Core after the migration. We are not using the inbuilt framework from.NET Core, but it's doing the same thing - we can inject our dependencies, which can be either transient or singleton. Services are re-registered using service configuration. You can use AddScope, for example, to specify transient or singleton. And when you're lifting that dependency, it will be resolved via the framework. So, we'll have a default object of that class, which you have injected into the class. That's how it's specifically done.

    Not too much idea about Azure Event Grid, but, the basic concept is very similar. Whatever messaging services are available, be it Kafka, be it Azure Service Bus or Amazon SQS. Events are all the same, basically. So you publish a message to a topic, and there are subscribers or consumers that have subscribed to those topics, and they will be getting those messages. Okay. And so we are using it in our image basically, in our application, which is a media-oriented, I mean, media-driven product line. So what happens when we are getting schedules or whatever, whenever we are getting any images as part of the GIF images in our product line. The idea is basically to improve, increase, and do that work on more machines. We are using Kafka and the publish-subscribe pattern in our image processing module, where whenever there is an image to be processed, we are keeping it in a topic, and then there are the consumers who are getting the message to process. And then we are performing image resize. Same is true for our scheduled processing where we are getting hundred thousand schedules in a GIF, and the idea is to basically split this to parallel machines. We are using the publisher-subscribe pattern again where we are keeping those schedules in topics, and then there are consumers who are getting those schedules to be processed. So that is how the work which we are supposed to do in, let's say, two hours, for example, we are able to do in twenty to twenty-five minutes just by splitting that work in multiple machines. So this is one part where we are using this. And then our microservices for communication, we are using the publish-subscribe pattern again. So yeah.