profile-pic
Vetted Talent

Sps

Vetted Talent
A B.Tech Graduate from IIT Kharagpur with 7+ years of professional experience working in product and e-commerce based organizations. Having an experience of around 2+ years mentoring junior engineers for their overall excellence.
  • Role

    Technical Lead

  • Years of Experience

    10.8 years

Skillsets

  • Firebase
  • Redis
  • Algorithms
  • Memcache
  • Golang
  • Claude code
  • Cloudfront
  • Cursor AI
  • Data Structure
  • Docker
  • EC2
  • Java
  • Grafana
  • Helm
  • JavaScript
  • Kubernetes
  • MCP servers
  • MongoDB
  • Prometheus
  • RDS
  • React.js
  • S3
  • Redis
  • AWS - 4 Years
  • Java - 5 Years
  • Kafka
  • MySQL
  • Postgres
  • RabbitMQ
  • Algorithms
  • Redis
  • MySQL
  • Java
  • Scalability
  • Algorithms
  • Golang
  • MySQL
  • Java
  • Redis
  • Algorithms
  • Golang
  • Nodejs
  • PHP
  • MySQL

Vetted For

8Skills
  • Roles & Skills
  • Results
  • Details
  • icon-skill_image
    Senior Golang Engineer (Remote)AI Screening
  • 89%
    icon-arrow-down
  • Skills assessed :Dart/Flutter, GCP/Docker, GraphQL, Rust, Mongo DB, Go Lang, Kubernetes, Postgre SQL
  • Score: 80/90

Professional Summary

10.8Years
  • Jun, 2025 - Present 11 months

    Technical Lead

    Nimbuspost
  • Jul, 2023 - May, 20251 yr 10 months

    Founder and Full Stack Developer

    StockBaaz
  • Sep, 2021 - May, 20231 yr 8 months

    Senior Software Engineer

    Dehaat
  • Jul, 2015 - Nov, 20161 yr 4 months

    Software Engineer

    ARC Document Solutions
  • Nov, 2016 - Jan, 20192 yr 2 months

    Software Developer (Catalogue Team)

    Shopclues
  • Apr, 2019 - Jun, 20212 yr 2 months

    Senior Software Engineer

    Guavus

Applications & Tools Known

  • icon-tool

    Java

  • icon-tool

    Go

  • icon-tool

    MongoDB

  • icon-tool

    Docker

  • icon-tool

    Kubernetes

  • icon-tool

    Helm

  • icon-tool

    Microservices

  • icon-tool

    kafka

  • icon-tool

    CI/CD

  • icon-tool

    Redis

  • icon-tool

    prometheus

  • icon-tool

    AWS

  • icon-tool

    Metabase

  • icon-tool

    RabbitMQ

  • icon-tool

    AWS

  • icon-tool

    Postgres

  • icon-tool

    Golang

  • icon-tool

    Python

  • icon-tool

    Redis

  • icon-tool

    Prometheus

  • icon-tool

    Grafana

  • icon-tool

    Spring Boot

  • icon-tool

    PHP

Work History

10.8Years

Technical Lead

Nimbuspost
Jun, 2025 - Present 11 months
    Technical Lead for the product Checkout as a service and mobile team, owning end-to-end architecture, design, and delivery across multiple microservices including mobile backend, checkout-core, payments-api, PII service, notification service, checkout frontend, and seller checkout. Led multiple payment gateway integrations including Razorpay, Easebuzz, Billdesk, PhonePe, and Plada (UPI mandates), enabling scalable seller onboarding and delivering actionable checkout insights. Mentored 6 developers, driving architectural best practices, enabling Cursor AI usage for code, design reviews, and high code quality standards across the team. Provided technical leadership across cross-functional teams, driving issue resolution, architectural alignment, and timely resolution of critical production bugs/issues.

Founder and Full Stack Developer

StockBaaz
Jul, 2023 - May, 20251 yr 10 months
    Developed a full-stack web application stockbaaz.com for stock analysis, covering monthly, quarterly, and event-based market moves, from coding to deployment. Implemented containerized web application using docker. Implemented real-time live feeds for breakout/breakdown alerts of stocks for intraday traders, integrating with the Zerodha Websocket API and broadcasting via an in-house websocket server. Created real-time pattern recognition alerts to assist intraday traders in identifying market patterns and opportunities.

Senior Software Engineer

Dehaat
Sep, 2021 - May, 20231 yr 8 months
    Created the Scheme Rewards Service to reward DeHaat centres based on advance booking and turnover using Golang (gin web framework and gorm and goAdmin). Developed multiple backend APIs for user registration (create/update), scheme listing, and discount fetching for seamless integration with DeHaat Business App (DBA). Created a bulk uploader to efficiently onboard offline users. Lead 3 team members and coordinated with product managers to define project scope and implement solutions in an agile manner. Set up and customized the Keycloak framework from scratch for authentication of all services using Java, RabbitMQ, AWS, and Postgres. Implemented Service Provider Interfaces (SPIs) to provide custom authentication solutions based on specific requirements. Developed Time-based One-Time Password (TOTP) flow for mobile-based authentication and coordinated with the mobile app team for seamless integration. Created a RabbitMQ service for publishing all authentication-related events, enabling other services to consume these events. Mentored 3 junior engineers in adding new functional capabilities to Keycloak.

Senior Software Engineer

Guavus
Apr, 2019 - Jun, 20212 yr 2 months
    Developed solutions for projects from clients such as Verizon, including BDR, PMS, and PCMD. Utilized GoLang, Redis, Helm, Docker, Kubernetes, and Prometheus. Implemented monitoring and alerting systems using Prometheus and Grafana. Created plugins/UDX for the in-house data streaming platform SQLStream using Java. Worked on app container orchestration using Docker, Kubernetes, and Helm package manager.

Software Developer (Catalogue Team)

Shopclues
Nov, 2016 - Jan, 20192 yr 2 months
    Revamped Bulk upload project in order to achieve scalability and performance. Created REST APIs (category api's, products api's) in the Spring Boot framework for the catalogue team. Developed a Feature/Brand Validation Service, reducing the Feature Missing Count from 12% to less than 0.1% and significantly improving catalog quality. Developed a Duplicate Check Service, reducing same-seller duplicates from 20% to approximately 2%. Created a new Product Template Generation panel, increasing seller-side catalog by 5x, thereby enhancing catalog upload efficiency and reducing operational efforts and merchant issue tickets.

Software Engineer

ARC Document Solutions
Jul, 2015 - Nov, 20161 yr 4 months
    Led full stack development in the PwC Revamp project, transitioning from old UI to new UI and implementing new data layer methods. Also managed migration from MS-SQL to MySQL. Created an S3 Bucket Migration Service to efficiently migrate production data from user-specific buckets to a consolidated bucket for all users, handling terabytes of data. Utilized Java and AWS S3 API.

Major Projects

1Projects

StockBaaz

Jan, 2024 - Present2 yr 4 months
    Full-stack web application for stock analysis including real-time live feeds and pattern recognition alerts.

Education

  • B.Tech Aerospace Engineering

    IIT Kharagpur (2015)

AI-interview Questions & Answers

My name is Sashid Pratap Singh, and I have around 8 years of experience working in the software industry. I have worked in different technologies, including Golang and Java. On the database front, I have worked in MySQL, Postgres, and a little bit in MongoDB. I was working in a startup called Cathayas Private Limited, where I was working as a staff software engineer for the startup mainly in the very initial phase. So I was responsible for creating dashboards and all in the database, and contributing to new features. I was directly reporting to the CTO of the company, and I contributed in various projects as well. I have also worked in various product-based companies. I started my career with NRC Document Solutions, where I stayed for around 1 year. After that, I worked in an ecommerce-based company called ShopRoots, where I worked for around 2, two and a half years. Then I worked in Guava's, a networking company, whose clients are telecom-based. I worked there for around 2 and a half years. After that, I joined Heart as a senior engineer, where I stayed for around 2 years nearly.

Implementing distributed transactions across microservices and Kubernetes while ensuring data consistency involves several strategies and best practices. So the best practices that can be used is the saga pattern. So the saga pattern is suitable for managing distributed transactions in microservices architecture. It breaks down a transaction into a series of smaller and independent transactions. Each microservice executes its part of the transaction, and compensating transactions are defined to undo changes if any step fails. Saga orchestration is the first step. A central coordinator or part of an API gateway manages the sequence of microservices involved in the saga, initiates each step, and tracks their progress. Then, there is service-to-service communication. Use reliable communication mechanisms such as gRPC or REST with idempotent operations to ensure that if a request fails and is retried, it does not cause unintended effects. For distributed transactions and data consistency, database transactions can be used to ensure that each microservice manages its database transactions correctly. Use ACID-compliant databases where necessary to maintain strong consistency within each microservice boundary. Then, an event-driven architecture can be used, with events to communicate between microservices to trigger the next step in the saga. Events should include a transaction ID and payload to ensure that steps can be retried or compensated if needed. Service discovery and load balancing can be achieved by using Kubernetes service discovery via DNS to locate microservices involved in the saga. Kubernetes also ensures that microservices are deployed and scaled efficiently, providing resilience and fault tolerance. Ensuring data consistency requires idempotent operations, and then compensation actions to undo any changes made by previous steps.

So there are multiple ways in which we can avoid the race condition in Go while multiple Go routines are accessing the same MongoDB collection. So let me list them 1 by 1. So first is they use MongoDB driver with session management. When working with MongoDB and Go, it's crucial to use a MongoDB driver that supports session management. For example, the official MongoDB driver, the Mongo Go driver provides a client and database trunk that manages connections efficiently. Then what we can use is we can use synchronized access with mutexes. To prevent a race condition when accessing a MongoDB collection from multiple Go routines, use sync.NewMutex or sync.RWMutex. This ensures that each method accesses MongoDB using a lock before performing an operation and unlocks afterwards. And then there can be used context management. So always use context.Context while interacting with MongoDB operations. This allows you to control the life cycle of operations and manage timeouts and test cancellations effectively.

Performing seamless schema migration on MongoDB during application deployment in Go involves careful planning and execution to minimize downtime and ensure data consistency. So here is a strategy using Go and MongoDB to achieve this. So first is versioning and tracking. Version control, maintain a versioning system for your MongoDB schema. This could be a simple integer or a timestamp-based identifier stored in a dedicated collection or document with MongoDB itself. Tracking migration state. Store migration state in a persistent way, such as another collection or document in MongoDB. Then we can use a schema migration tool. Write a migration tool, develop a Go application or a script that manages schema migration. This tool should read the current schema version, apply pending migrations, and update the schema version after each successful migration. Then, third is MongoDB driver and transactions. Use the MongoDB Go driver. Utilize the MongoDB Go driver. If your MongoDB deployment supports transactions, use transactions to ensure atomicity of schema migrations. This helps in rolling back changes if a migration fails in the middle. Then, you have to handle rollbacks also. Implement a rollback mechanism in case of a fallback is needed and changes need to be reverted in case of migration failure. Then, there should be a clear deployment strategy. So, pre-deployment checks should be there before deploying new code that includes schema changes. Ensure that the migration tool is tested thoroughly in a staging environment, and then use gradual rollout. If possible, deploy schema changes gradually across multiple instances or shards to minimize downtime and ensure that all instances are in sync. Then, use monitoring and logging to ensure everything is going well after the deployment. So, logging, implement detailed logging within the migration tool to check the progress of each migration and detect any issues directly. And then, monitoring, monitor MongoDB and your application during deployment to detect any performance issues or failures related to schema migration.

Yeah. So, in order to design and optimize a Go service to handle last throughput of data incorporating both MongoDB and in-memory cache like Redis or Memcache requires careful consideration of concurrency, data retrieval strategies, caching mechanisms, and performance tuning. So, here is a structural approach to achieve this. So, first, you develop a Go service. Develop a Go-based microservice using a framework like Gin, Echo, or plain HTTP handlers to handle incoming requests and manage data operations. Then use MongoDB for persistent storage and in-memory cache like Redis for caching frequently accessed data to reduce latency and input throughput. So, if we talk of the component design, then there is a service layer. There is a data access layer. Okay. So, if I talk of the service layer, then HTTP handlers define HTTP handlers to handle incoming requests and delegate operations to the service layer. Service logic, basically, will include all the business logic and data processing here and use asynchronous processing wherever possible to handle concurrent requests efficiently. Then, data access. So, MongoDB client use the MongoDB Go driver to interact with MongoDB, ensuring efficient connection management and connection pooling. Caching client integrate Redis or Memcached client libraries to manage in-memory caching. In order to optimize data access, read operations, basically, use the caching strategy. Implement the caching strategy to fetch frequently accessed data from Redis or Memcached first. If data is not found in the cache, then fetch it from MongoDB and store it in the cache for subsequent requests. Then, cache invalidation, implement cache invalidation mechanisms to remove or update cache whenever any data changes in MongoDB. Then, there are write operations. So, transaction handling with MongoDB transactions to maintain data consistency across multiple documents or collections. Then, you can use batch operations, batch MongoDB write operations wherever possible to reduce the number of round trips to the database and improve network operations. And then, concurrency and scalability. So, we can use goroutines for concurrent processing of requests and operations. Use channels for communication between goroutines wherever necessary. And then, connection pooling should be used. Use MongoDB's driver-built-in connection pooling, and configure the maximum number of connections appropriately based on your deployment environment and expected load. Then, Redis connection pooling. Configure the connection pooling for Redis or Memcached clients to manage the connections efficiently. Then, for performance, use monitoring, profiling, and query optimization.

Yeah. To design a code system that utilizes both channels and mutexes to coordinate access to MongoDB in a high-concurrent environment includes managing concurrent access to resources like database connections and data structures while ensuring data consistency and minimizing contention. So there is a way to achieve this. So we can use the go services, develop multiple coroutines, concurrent processes that interact with MongoDB. Then you should use channels. Use channels for communication between coroutines to coordinate access to MongoDB and exchange data safely. Then mutexes, employ mutexes. For example, sync dot mutex, to synchronize access to shared resources such as MongoDB client connections or shared data structures. And there should be components and responsibilities. So for MongoDB client management, we can use the singleton pattern, implement a new MongoDB client as a singleton to manage database connections efficiently and prevent multiple go routines from creating unnecessary connections that create load on the memory. It's unnecessary to occupy memory. Then we should use connection pooling. Use the MongoDB Go drivers built-in connection pooling to reuse connections across goroutines. To control concurrent access with mutexes, a MongoDB client mutex, use a mutex to control access to the MongoDB client instance. This ensures that only one goroutine at a time can perform operations that require MongoDB interaction using channels for coordination. For asynchronous processing, use channels to decouple tasks and manage asynchronous processing of database operations. This allows goroutines to request database operations and receive results asynchronously.

Yeah. So for building a scalable event-driven microservice architecture in Go, leveraging channels and goroutines, involves designing a system where microservices communicate asynchronously through events. This approach allows for loose coupling, scalability, and resilience. Here is a structured approach to achieve this in event-driven architecture. First of all, we will list all the components. There is an event producer, microservices that generate events based on state changes or incoming requests. Then there is an event broker, middleware like Kafka or RabbitMQ, that manages event distribution and ensures reliable delivery. Then there are event consumers, microservices that react to events to perform appropriate actions. Some design principles should be followed. For example, event definitions should be defined in a format like JSON that includes necessary metadata and payload. Producer microservices, using goroutines, handle concurrent event production, and use a channel to send events to the event broker. The event broker decouples producers and consumers, receiving events from producers and distributing them to interested consumers. Scaling with topics can be used, where topics or queues categorize events for specific consumers. Consumer microservices, using goroutines, handle concurrent event consumption, and use a channel to receive events from the event group. To consider scalability and reliability, we need to focus on concurrency and control, error handling, scaling, and monitoring and logging. For deployment and infrastructure considerations, we need containerization and orchestration. Microservices can be deployed as containers, using Docker for easier scalability and deployment. For orchestration, use Kubernetes or Docker Swarm to manage containers in production.

So monitoring and debugging go application along with its MongoDB interaction in Kubernetes involves a combination of tools and practices to ensure observability, performance monitoring, and efficient debugging. Here are some essential tools and approaches that can be used. To monitor, you can use Prometheus. The Prometheus operator can be deployed to manage and automate Prometheus deployments on Kubernetes. Prometheus metrics can be instrumented into your application with Prometheus client libraries to expose custom metrics such as HTTP requests, database interactions, and application-specific metrics. Then, service discovery can be used, which is Kubernetes service discovery to dynamically discover and monitor your application instances. For visualization, we can use Grafana. Grafana integrates well with Prometheus to create dashboards for monitoring various metrics. It can be used to visualize the performance of your Go application, MongoDB database, and Kubernetes infrastructure. And in order to set up alerts, you can set up alerts in their panel based on Prometheus metrics to notify any performance issues or anomalies.

Configuring a Kubernetes cluster to automatically handle failover and recovery for straightforward Go services using MongoDB for data persistence involves several key steps and considerations. Here is a structured approach to achieve this. Use a stateful set for a stateful application. Stateful sets should be used. Use Kubernetes stateful sets to deploy stateful applications like MongoDB. Stateful sets provide stable network identifiers and stable storage crucial for stateful applications, and you can use persistent volumes. Configure a stateful set with positive persistent volumes and persistent volume claims to ensure data persists beyond the life cycle of pods. Then, to handle failover and recovery in port management, the port restart policy should be defined. Configure the full set of port specifications with appropriate restart policies, always or on failure, to handle port restarts automatically. Readiness and liveness probes should be defined. Define readiness and liveness probes to ensure Kubernetes knows when ports are ready to serve traffic and when they need to be restarted. Then, MongoDB configuration needs to be done. Replication and sharding should be configured to ensure data redundancy and high availability. Use a MongoDB replica set. Kubernetes stateful sets are ideal for this setup because they provide stable DNS names that the MongoDB replica set can use for discovery. We need monitoring and alerting. We can use Prometheus and Grafana for monitoring and alerting, and we can use the alert manager to know if any alerts in Prometheus are violated and notify administrators for any critical issues or failures. Then, a backup and restore strategy should be implemented. Implement a backup strategy for MongoDB data using tools like MongoDump or third-party solutions. There should be scheduled backups. Use Kubernetes cron jobs to schedule regular backups of MongoDB data.

Yeah. To maximize query performance in a Go application that combines data from MongoDB and a GraphQL-based API, you will need to optimize both your database interactions and GraphQL query executions. So, in order to achieve that, what you can do is optimize the MongoDB queries, use indexes whenever required. MongoDB indexes ensure that MongoDB collections used in your queries are properly indexed. Use the MongoDB ensureIndex method for index creation in the schema definition. Then, field selection. Fetch only the necessary fields from MongoDB by specifying them explicitly in queries to reduce data transfer and processing overhead. Then, aggregation pipelines utilize MongoDB aggregation pipelines for complex queries that involve data transformation, grouping, and joining. To optimize GraphQL query execution, you can use batching queries. The data loader can be used to batch and cache database queries in GraphQL resolvers to minimize the number of database round trips. You can use pagination. Pagination support is there. Implement pagination in GraphQL resolvers to limit query results and improve response time, especially for queries written in large datasets. Then, caching. Result caching can be used. Cache GraphQL query results using a caching layer, for example, Redis, to serve repeated queries faster and reduce load on the system.

Yeah. So, if we are using multiple databases like MongoDB and PostgreSQL, what's in order to define the common functionalities, we can use an interface. So we can define a database interface. We start by defining an interface that declares the common methods required for interacting with the databases. So this interface will include methods for operations, like connecting to the database, writing data, inserting, updating, deleting records, and closing connections. Then implement database handlers. So we can define the structures that implement the database interface for MongoDB. Similarly, for PostgreSQL, we can define a PostgreSQL handler, which will implement all these methods that are required to interact with the database. And for PostgreSQL, it will also implement those methods required to connect with the PostgreSQL DB.