profile-pic
Vetted Talent

Bhupesh Pandey

Vetted Talent

With over 15 years of experience in software development and engineering, I am currently a Backend Developer at IBM, where I work on creating innovative and scalable cloud solutions using Golang and Docker. I am passionate about leveraging cloud technologies to deliver value to clients and stakeholders, and to solve complex business challenges.


As a certified ScrumMaster and a team leader, I have successfully led and managed multiple projects throughout the software development life cycle, using Agile methodology and best practices. I have also mentored and coached junior developers, and facilitated cross-functional collaboration and communication. I have a strong technical background and a working knowledge of NodeJs, Typescript, docker-compose, SnapTelemetry, and Modbus REST API. I am always eager to learn new skills and tools, and to explore new domains and opportunities.

  • Role

    Cloud Developer

  • Years of Experience

    18 years

Skillsets

  • Prometheus
  • JUnit
  • Linux
  • Logdna
  • Microservices
  • Modbus
  • MQTT
  • Network Security
  • Pprof
  • JFace
  • RabbitMQ
  • ReactJs
  • SWT
  • Sysdig
  • system security
  • TravisCI
  • TypeScript
  • Opensensorhub
  • Cloud Security
  • Kubernetes - 4 Years
  • Docker
  • Eclipse
  • AWS
  • Azure
  • Azure Blob Storage
  • Azure Event Hub
  • CI/CD
  • Github
  • Consul
  • Corejava
  • Cryptography
  • EMF
  • Golang
  • gRPC
  • Helm

Vetted For

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

Professional Summary

18Years
  • May, 2022 - Present4 yr

    Cloud Developer

    Ibm
  • Oct, 2021 - May, 2022 7 months

    Principal Software Engineer

    F5
  • Nov, 2020 - Oct, 2021 11 months

    Senior Technical Lead

    Infinite Computer Solutions
  • May, 2012 - Dec, 20131 yr 7 months

    Senior Engineer

    Continental Automotive Components
  • Oct, 2015 - Feb, 20204 yr 4 months

    Project Lead

    L&T Technology Services
  • Aug, 2020 - Nov, 2020 3 months

    Project Lead

    Persistent Systems
  • May, 2012 - Aug, 2012 3 months

    System Analyst

    Atos India
  • May, 2008 - May, 20124 yr

    Senior Software Engineer

    Kpit Cummins Infosystems

Applications & Tools Known

  • icon-tool

    DEX

  • icon-tool

    Docker

  • icon-tool

    Jenkins

  • icon-tool

    Angular

  • icon-tool

    GitHub

  • icon-tool

    Linux

  • icon-tool

    AWS Kinesis

  • icon-tool

    Docker Swarm

  • icon-tool

    Prometheus

Work History

18Years

Cloud Developer

Ibm
May, 2022 - Present4 yr
    As a senior engineer and individual contributor on the team my responsibilities included: 1. Using the technologies like golang, docker kubernetes develop robust code and write test cases using inbuilt testing and mock framework for the same. 2. Update the code to add observability via means of sysdig, prometheus and logDNA. 3. Develop synthetics test cases using nodejs to monitor the production environment. 4. Ensure that the API's are stable and any issues arising in the code, API or too many error condition etc. are all caught effectively.

Principal Software Engineer

F5
Oct, 2021 - May, 2022 7 months
    SCIM Provides standard schema/definitions for users and can be used to manage standard operations, that is, CRUD (create, read, update, delete). Voltconsole is a platform for Distributed Cloud Services - a SaaS-based offering that automates deployment, security and operations of distributed apps and infrastructure across multi-cloud or edge. As a senior engineer on team: 1. Write the CRUD API's which will provide the multi cloud to interact and work with the Voltconsole(F5 Legacy Cloud Computing app) using Golang, docker and kubernetes.

Senior Technical Lead

Infinite Computer Solutions
Nov, 2020 - Oct, 2021 11 months
    Crypto Services: Services inside crypto service allows user to create and store their keys. When they have to login to a service using the key they can query their keys via these services. The keys are encrypted and stored in the redis cache. As a senior engineer on the team: 1. Write certificate expiry verifier and notify slack about expiry using Golang, Docker Kubernetes. 2. Modify the CI/CD pipeline using the helm charts and TravisCI.

Project Lead

Persistent Systems
Aug, 2020 - Nov, 2020 3 months
    Intersight Orchestrator: CISCO's Intersight Orchestrator is a tool designed to allow users to create Workflows, Tasks and stages for executing the automated workflows. Did not get to work on the requirements. Environment: GoLang, Docker, PProf, Unit TestCases, Windows 10, GitHub, Linux(Alpine) for docker, ReactJS.

Project Lead

L&T Technology Services
Oct, 2015 - Feb, 20204 yr 4 months
    Data Exchange Platform (DEX): As a senior engineer: 1. Develop RabbitMQ, MQTT, GRPC and REST connectors using Golang, Docker, Kubernetes and Azure, AWS Kinesis. 2. Explore the services like AWS kinesis to see if that would fit into our application for the sake of streaming data as the next level of development would involve analyzing the data patterns and hence kinesis would be perfect way to start. Modbus Rest Connector: As an engineer: 1. Write Rest Service to read and write data to the holding registers of the modbus using golang and docker. 2. Also, write the connectors on opensensor hub for the modbus to read high frequency data that can be later written to modbus or read from modbus using the above rest service using the CoreJava and opensensorhub. Telemetry Data Collection Tool: As an engineer on the team 1. Write the golang collector that can connect to the rabbit mq which is receiving the data at 20K/sec frequency containing multiple signals. 2. Create a golang processor that can apply signal specific algorithms. 3. Golang publisher that can publish the slowed data to 1/sec and publish it on different channel. Middleware for the Rig Activities: Write a typescript application that can serve as an middleware and create containerized apps using docker test it via portainers. Connectors For Kepware: 1. Create a connector for connecting to Kepware using core java.

Senior Engineer

Continental Automotive Components
May, 2012 - Dec, 20131 yr 7 months
    Core Java, Eclipse Plugin, JUnit; Project is based on the basic plugin requirements dealing with the generation of NvM & Diagnostic Configuration.

System Analyst

Atos India
May, 2012 - Aug, 2012 3 months

Senior Software Engineer

Kpit Cummins Infosystems
May, 2008 - May, 20124 yr
    Core JAVA, EMF, SWT, JFace.

Achievements

  • Developed service-broker REST Server components
  • Enhanced observability and performance metrics for cloud services
  • Handled production issues and implemented autoscale suspension
  • Created Monitoring Dashboards
  • Built SCIM application for VoltConsole
  • Developed UI for data exchange application
  • Implemented connectivity endpoints using RabbitMQ and MQTT
  • Developed telemetry tools and plugins for Snap-Telemetry
  • Designed middleware application in TypeScript and Node.js

Major Projects

1Projects

Data Exchange Platform (DEX)

Oct, 2015 - Feb, 20204 yr 4 months
    Golang application for data exchange with MQTT, RabbitMQ, GRPC, and REST support to replace Halliburton's legacy C# application INSITE.

Education

  • B.E: Information Technology

    Bansal Institute of Science And Technology (B.I.S.T) (2007)

Certifications

  • Certified scrummaster

  • Ibm cloud advocate essentials - ibm

  • Ibm certified advocate - cloud v2 - ibm

Interests

  • Watching Movies
  • AI-interview Questions & Answers

    I have approximately 16 years of experience in the industry. Out of that, almost 8 years, I've been working in Go lang, Kubernetes, Docker, and SysAdmin. Recently, I've gained exposure to Google Cloud. So these are the major technologies I've been working with. Other than this, the major projects I've worked on in Golang are mostly of two types: either those with high-frequency data coming in, which we transform into some form or other, or rest services. These are the projects I've worked on. We would need to make the process go smoothly, not just data from MongoDB without a hitch. For MongoDB, we have a method of indexing data. If a large volume of data is coming into MongoDB, we can index the data. Based on the index, we can actually identify the data very quickly, which prevents performance issues, and we can continue with operations without lag or issues on the application side.

    So, basically, when designing an application to handle a large throughput of data, incorporating both mobile-driven and mobile caching, the application has to be designed in such a way that it can retrieve data by means of cache if not in MongoDB. So, basically, before even going to MongoDB, you can query the cache. And once you have the cached data, you can get the data and respond with that data. If not, then you can go to MongoDB. And with MongoDB also, you can optimize your queries to research based on indexing. Some sort of indexing, such as hashing, can be implemented, and that can actually help us out in incorporating a high throughput of data with MongoDB.

    I can structure a Compass Go code base to follow solid principles while taking advantage of cooperatives, which is for scale resolution. A Compass Go code base can be structured in a way where the solid principles, specifically single responsibility, are defined, which can then be distributed to a specific structure, and that structure can have the implementation of the method inside the interface that defines the single responsibility. The Liskov substitution principle states that you can replace the structure with the interface it's implementing. For instance, I have a DB interface, so I can have multiple DB implementations in my code, and I can just use the interface instead of using their structure. With that, I can call the methods on that interface, and I should be able to achieve the same operation with any DB implementation in place. The SOLID principles are a set of guidelines for designing object-oriented code. S stands for single responsibility, O stands for open-closed, L stands for Liskov substitution, I stands for interface segregation, and D stands for dependency inversion. However, the dependency inversion principle does not directly apply to Golang. After implementing this Go code base, we can have the deployment files, resources files, service files, and environment files. We can also have the ingress, egress, and other files for the applications. Via that, we can deploy the application to a cluster in a specific namespace. The application can then be deployed and communicate with other applications using the egress ingress properties on the queue using the queue proxy. We can also define how many instances of an application would be running by default.

    Audio voice condition going. What are we? To avoid a risk condition, what you can do is, whenever you're running an application, you can actually put it on the mutex section. So, basically, mutex lock and mutex unlock can actually help you avoid the risk conditions when writing to the MongoDB collection. That's one. Second thing, whenever you're running the application, you can actually introduce try-except blocks, which can actually tell you where the raise conditions are there, and you can resolve those raise conditions. So, these are the ways. Or maybe another way of resolving this would be, you can actually pass the data to the channel that you can define a channel for the data. And on that, you can listen to that channel, and then you can write the data which you're receiving via that channel to MongoDB. That way, it is, by default, mutually exclusive. That way, we can actually avoid risk conditions.

    Is what we're scaling your MongoDB replica set in Kubernetes based on different workload patterns. Strategy. A strategy for automatically scaling your MongoDB replica set in Kubernetes based on different workload patterns. Okay. What can we do for this? So, basically, we can define the DB patterns in such a way that it creates a replica set, scaling among the replicas in Kubernetes. So, you can actually have some replicasets in place for the MongoDB by default. Or, let's outline a strategy for automatically scaling your MongoDB replica set in Kubernetes based on different workload patterns. What can be done for this? You can create a MongoDB replica set, have the default MongoDB run three instances, and then define how the replicas would be created and at what point the synchronization between the replicas would happen. Those frequencies have to be defined. Since you're defining a database, that database has to have some mechanism by which it can decide upon how the data is written. So, what you can do is deploy the MongoDB on the Kubernetes side. And then, based on the memory or data consumption on the node, you can define if you want to scale up or scale down. You can define that, and that's how you would create the replicas of the MongoDB runtime. And then you can keep monitoring the matrix of the MongoDB application via Prometheus or some monitoring system. Using Kubernetes, you can also do that. And, yeah, these could be some strategies. You can provide some sort of load testing or load testing validations as well.

    There are more channels and more visibility even than a microservice. Going to build a scalable event-driven microservice architecture. So, basically, what you can do is you can create an application that can create goroutines based on the load of the application. Now, let's say I have to process a large volume of data; in that case, I can actually keep increasing the goroutines, or maybe you can do it the other way around. What you can do is have a set of goroutines that can run in parallel based on the system where they are being deployed. And then, you can scale that application if the load on the system of the application is, let's say, 80% or 85%. That's the threshold we can define. Based on that threshold, the application can create one more replica set and one more, it can scale up. After scaling up, it can actually handle the load being sent to that particular application. It can start handling the load on that other application as well. So, the replica of the current application, and that way, we should be able to scale the built application, which can actually have different channels and goroutines in place, and those can actually keep increasing or decreasing based on the load of the system.

    Which pattern would you apply to ensure that Go services can communicate effectively with different database technologies in a Polygon persistence setup. The Google My Services can communicate effectively with different databases in a PolyWord processing setup. Right. In a PolyGuard processing setup. So, basically, if we have to have multiple database technologies in place inside the Go microservice, in that case, you can always have an interface in place, and you can hide the database implementations behind the interface, which ensures that you're communicating with the interface, not the specific database. You're communicating with the interface. Alternatively, we've ensured that Google services communicate with different databases in a PolyGuard persistence PolyGuard persistence setup. In a polygon process, it is. How would you do that? How would you do that? Perhaps what you can do is that when you don't need a Polygon process. Polygon means many. So, many database technologies in a persistent setup. What you can do is have a separate repository built. Maybe. If I'm correct, you can build different repositories for different databases like MongoDB, Postgres, Cassandra. You can have all those things set up in different repositories. When your application is starting up, you can use a factory to create those applications, and then you can use multiple databases in your application. I believe that's what you meant by this question.

    Their approach to setting up a service mesh architecture. Approach to setting up. What is your approach to set up a service mesh architecture in Kubernetes to provide controlled network traffic for Golang microservices? So this mesh, that means you would be okay. When you say service mesh architecture, that means you have control over network traffic. Okay. Control network traffic means egress and ingress. So when you set up Kubernetes, when you set up your application on Kubernetes, you have to define egress and ingress policies. Ingress is something where you define how many applications can communicate with your application, and egress defines where all applications can go and communicate with. So who can communicate with your application is defined by ingress or incoming requests. And outgoing requests, also, you can define by means of egress. That means where the application can communicate to. So that way, you are restricting the traffic on the application by means of ingress and egress. So incoming traffic is restricted and outgoing traffic restricted by means of egress, if that is what it means.

    Let's apply domain-driven design approach in Go to effectively work with Neo4j graph database. Fine. A domain-driven design approach can be applied in Go to effectively work with Neo4j graph database. How will you define it? Okay. I have an element of human design approach. And when design approach and Neo4j graph database are combined. So as the name suggests, Neo4j graph database deals with graphs. It could have some sort of data format, which it understands. So maybe what you can do is define some data models. Those data models can be leveraged by the Neo4j graph database to provide storage, and that can be defined in a separate repository. And then what you can do is in your application, you will use that Neo4j repository as your interface and you will be basically just calling the APIs on that to store the data.

    I would utilize interfaces. Good apps are common functional services that can drive with different types of data, such as PostgreSQL. I'll interact with different types of data, like MongoDB. See, in this case, basically, what you can do is define the interfaces for specific purposes, like when you say MongoDB or PostgreSQL. So, you will have certain structured data that needs to go into PostgreSQL, and possibly some unstructured data that goes into MongoDB. So, maybe you can have two different interfaces in place for unstructured and structured data databases. Those kind of interfaces can be defined. Or, if in this case, it's going to be just one of the DBs we have in place, you can just define an interface for the DB and define the methods on top of it, then provide optimization inside those methods. And what you can do is use the interface in your places, like, let's just say you're creating a REST service where you have to store the data to the database. You just use our interface instance, and that using that, you would actually store the data to the database using the interface methods instead of calling the structure-specific methods on MongoDB or PostgreSQL. So, that's how you can basically leverage interfaces.