
Sourabh Singh is a backend engineer with expertise in scalable, high-performance systems. With a B.Tech + M.Tech in Mathematics and Computing from IIT Delhi, he has worked with Shopify (Deliverr), Expedia, and Zupee, driving system architecture, integrations, and optimization.
At Deliverr (Shopify, Flexport), he led returns integration, generating $100K/month revenue, and built inventory transfer systems. Previously, at Expedia, he optimized flight sustainability features and latency. Skilled in Node.js, Python, AWS, Redis, and microservices, Sourabh excels in system design and backend development.
Mid Backend Engineer
DeliverrSoftware Engineer
ExpediaBackend Developer
ZupeeSoftware Engineer
ScrumdoNode.js

Expressjs

Angular

MongoDB

Redis

RabbitMQ

MySQL

Python

Django
Celery

Bootstrap

Redux

Git

AWS Lambda

SQS

SNS

S3

Cloudwatch

Kubernetes
.png)
Docker

Twilio

nginx

SSL

MSG91

Instamojo
.png)
Heroku
.jpg)
Grafana
I graduated from IIT Delhi in mathematics and computing in 2018. After that, I started working for Strandu as a full-stack developer in Python, Django, and Angular front end. Then I started working with Zupery and Expedia. In Zupery, I worked as a backend developer on Node.js. And then in Expedia, I worked for around 6 months in JavaScript and Golang. Then I worked at Deliver as a backend developer. There, I worked on Node.js, AWS, and MySQL.
Connection pooling in Node.js improves database performance by creating multiple connections and then reusing them, so that more connections can be used and these operations can be done in parallel. This can help in reducing the network latency and the overhead of creating new connections for each database operation.
Yeah, I would recommend using the SOA framework because it gives us all the question response types. And also, it gives us layering of architecture. So what we can do is, we can create functions which will call other functions in, so that in this manner, we can keep our authorization and authentication layer, then logging layer, and then we can also have
We should get into it. We're not gonna know. Yes. It is entirely the same. We can ensure the identity by using a separate post guess. We can use lots that are provided by post guess. And in that manner, transactions will have SEO goodies. So they will be atomic, and there will be data integrity, and they will work as they are being performed in parallel in isolation.
We can handle so Express JS provides us with the next function. We can create a layer above the API layer. In that layer, we can call the next function and handle any errors at a global level. And if the error written by the API is a known error, then we can wrap it in a suitable error response code. Otherwise, we can throw a general error like a server error, like 500.
So for implementing a caching layer, what we can do is create a caching layer above the API layer. In that layer, it will cache data based on the API route. If data exists, then it can return it. Otherwise, it will call the underlying API function, cache it, and then return the cached data.
Maybe we can use cursors here, because if there will be, this. So here we are not handling the case when a user is not found. And in that case, we are returning rows. So in this case, the DB can throw an error and we should also throw an error if a user is not found. But it's not giving an error currently and it will return empty rows instead.
It should request parents, but I, instead of, I, it should be ID. And, because ID is the parameter name provided in
to isolate n services, isolate n services running in separate containers, how can you utilize docker's network features to isolate n services running in separate containers. If these are running in separate containers, so what we can do is, we can create, docker will provide us, we can expose different ports from each container and internally it can be connected to a common port like localhost 3000 or 8000, and externally it will be exposed to different ports. So in that way, all the services, all the containers will be exposed on different ports and can be connected to that port.
He comes in for scaling and accessing a JavaScript application on AWS infrastructure. If we're using AWS Lambda, then logging is an important factor. If we're scaling up, so multiple instances can be created at the same time. We should allow multiple instances of Lambda to be created simultaneously. And we should configure a minimum number of Lambda instances that should be running so that latency is not high for the first few requests. We can have a limited time for that Lambda, like 15 or 30 seconds, after which it will be killed. So, latency should not be greater than that. We should have a good monitoring system, using which we can monitor all the Lambda instances. And if they go down at some point of time, we should get notified and we should also monitor the error log so that we can get to know if there is something going wrong. Yeah.
Node JS application. So AWS has its repository for containing images. So first, an image would be deployed to their registry. And from there, if we are deploying on AWS Lambda, then Lambda will pull that image from that registry, and it will run that service on a virtual machine. And it also depends on how we want to trigger the deployment. Maybe we want to deploy it through several CI/CD pipelines, so that if any changes are merged to a branch, then it should be deployed automatically instead of manually taking the deployment. And there are a few steps that we can add in that circle, such as file. They should like DB migrations that should run before that. And a few indication tests that we can add, and this should be positive. We can add a condition on which, and only, passing of previous step. This step should be done, so we can create a dependency in that way. So deploying through CircleCI is a better approach.