
As a seasoned Senior Software Engineer with over five years of experience, I have honed my expertise in full-stack development, specializing in technologies such as React.js, Next.js, PostgreSQL, and Python. Throughout my career, I have led impactful projects, from spearheading the development of cutting-edge e-commerce platforms to introducing innovative technologies like Tailwind CSS and GraphQL to enhance performance and user experience. My journey has also involved integrating complex features like Elastic Search and Amazon S3, demonstrating not only technical proficiency but also a keen eye for collaboration and innovation. Additionally, my commitment to open-source contributions, notably through Google Summer of Code 2019, underscores my dedication to continuous learning and driving impactful solutions in the dynamic field of software engineering.
Senior Full Stack Developer
NielsenSoftware Engineer
ThoughtworksSoftware Engineer
CapgeminiFull Stack Developer Intern
Kwatt SolutionsSoftware Engineer Intern
Shopsense FyndOpen Source Contributor Internship
Google Summer of Code
AWS S3

Python

React

Next.js

PostgreSQL

tailwind css

MERN Stack

GraphQL
Node.js
REST API

Express.js

TCP/IP
.png)
Google Analytics

PHP

Bootstrap

TypeScript
.png)
Docker

tailwind

React Query
.png)
FastAPI
.png)
JWT

LLM

LangChain

AWS

Tailwind

Postgres

MySQL
Roles and Responsibilities:
Roles and Responsibilities:
Roles and Responsibilities:
Roles and Responsibilities:
Hello. My name is Ravinakumar Amina. I graduated in 2019. I from ISM, Danbark. It's, uh, an IT college, one of the prestigious prestigious colleges in India. I did we take in conversational from over there. Currently, I'm working at Nielsen as a senior software engineer. I hold an experience of, uh, close to 5 years as a full stack developer. And, uh, talking about the technologies, I have worked on Reg. Js, Node. Js, TypeScript, JavaScript. And I also do have intermediate level of experience on the DevOps as well. Uh, talking about other frameworks, I have worked on Dalvin, HTML, CSS, uh, and I also do have sound knowledge on the AI as well. And, uh, apart from this, I have also done open source contribution via dual summer of code, uh, in RTMS organization. So that's a bit about me. And talking about the hobbies, uh, and interest, I, uh, like to play cricket, and, uh, I also like to do the hiking as well.
Uh, how would you design? In order to enable the feature flag in React application, what we can do, and, uh, we can have configuration file in our React application. And that configuration file will have the features, and corresponding to that feature, we will have a value. True, false, true, false. If that feature's, uh, value is true, that means that flag is enabled. And, uh, if there is 4, that means it is not enabled. And what we have to do, we have to import this configuration file in the, uh, rec component, one of the rec component where the enabling of this component will be done. So we have to import this configuration file in their, um, React hook. Okay? From that is where the the state of this, uh, component the configuration file will be maintained. Once this is done, we can just directly have a toggle button in the UI from where be like, based on the what is the feature flag? It will be turned on, uh, on and off based on the requirement. So that is how it can be done, uh, on the React JS application.
Uh, so, uh, I have faced this risk condition when multiple user access are possible concurrently. In fact, I have experienced this, uh, situation in the past experience that I have experienced. So for this type sort of things, uh, we have to use the transaction. So okay. So that in transaction, what happens, uh, it, uh, only, like, at the moment, concurrently, uh, at the, uh, concurrently, few many process will be executed. Okay? But it will be also isolated as well. Okay? How it will be isolated? We because we will be using the transaction mechanism as the serializable. Using the serializable and the transaction, we can achieve this very easily. And this will avoid the risk condition. Uh, by avoiding the risk condition, uh, so only one block of the one row of the table will be accessed by the one process because of the transaction. Another, uh, other process that wants to execute on that row have to wait. It will be queued. And so, uh, and, uh, once the previous one gets is is successful or, like, it's completed this data execution, the next process will get a chance to uh, try to execute on that particular row. So via using transaction and and locking mechanism, we can we can achieve this very easily.
Uh, okay. So, uh, large monolithic Next. Js application, this has to be this can be done, uh, very easily if, let's say, you have in your detective Next. Js application, which is monolithic. You have 5, uh, endpoints, let's say, uh, slash a slash b slash c and so on. Ten routes. Okay? So what we can do using micro front end architecture, uh, we will create a different different repositories. Okay? Um, based on that, uh, slash a will be, uh, will be the an one micro front end service. B will be the another micro front end service. Will be another micro front end service. So that is how, uh, like, based on, uh, the route slash a, if the request comes from with the route slash a, then it will be the route request will be directed to the, uh, slash a the microservice that is handling the slash a route. If if if the request comes, uh, through the slash b, then they it will be handled by the slash b micro front end service. So that is how this, uh, that is how the large monotique NextEase application can be dragged into the micro frontend, uh, architecture. And I have used this and, kind of, currently, I'm also using this micro frontend architecture in my project. And what I've experienced that, uh, it has also improved the performance of the application very drastically.
Uh, the strategy that I used to, uh, decide if I am supposed to create a new component or expand the existing one. Uh, so let's say I'm trying to develop some feature and and try to import the component. So what I will do if, uh, the com, uh, if I want to if I see if I see that this component can be extended, which will fulfill my requirement, then I will definitely extend that component. And, also, I will make sure that the existing functionality that was handled by the complaint does not break. So then so this is how. And, uh, if I feel like that the existing component will not at all be able to fulfill the requirement that I need, so in that case, I will be creating a new component. Okay? And in order to make sure that everything goes well, we can, uh, what we can do, we, uh, we will be having the existing test cases and twin test cases, unit test cases, and indication test cases. So those test cases has to be run against the refactored component if we are building the existing one. And we need to check if the like, everything goes is going well, and then only we will be supposed to, like, commit the new version of the, uh, updated component. So that is how I would make sure that the updated component does not break the entire functionalities.
Uh, yes. Uh, I have previously worked on the serverless architecture. So the serverless functions are generally used in the serverless or microservices architecture. So using the serverless function so, uh, we have this function on the AWS, which is called the Lambda. So they are called the serverless functions. So the, uh, the key point behind the serverless function is that they are very easy to code, Okay. And easy to maintain. This is all deployed on the it is all available on the AWS. So that is how it is done. And, uh, so let's say yeah. So what are in one of the application, what I was doing here, uh, application was I was working on ecommerce application where the user was supposed to download the file of the past order. Okay. So this is where downloading file is a very heavy process. Like, you need to compute what were the orders in the last 2, 1 month, 2 month based on the requirement. So it was a little heavy. So based on that, uh, the the service function was used to where it we triggered that this is the user that is trying to get the order, uh, the like, the download history of the previous order. Uh, so based on this is how it was done. So using service function, which it don't after that, it automatically sends the file to the user as well.
Uh, so here, what I see here, we have directly, uh, checked out the master first before actually pulling the repository. Okay? So here, uh, so this is the one issue that I see here. 1st, we should pull the repository. Okay? Then only we should check out the master. Once we have done this, then we will this is just to make sure that we always have the latest, uh, code available in this CICD pipeline. So for this step would be to first clone the repository, check out the master, and try to pull against, uh, again, one more thing just to make sure that, uh, we have the latest version of the code. So that is how we can improve this CICD pipeline.
Uh, okay. So, uh, there is one issue that I see here. Okay. So if the role is admin, then it will please print the welcome admin. If the role is moderator or role is user, then it will print the welcome value team member. Or else if it it is not anything, then it will bring the welcome guest. Okay. And after that, uh, once this is all done, uh, after that, it will we have also set it as end. Yes. So that end means that this that's the stop of the execution. So that is causing that will cause this script to end that at one particular line. So this will prevent this print welcome message function to be called.
In order to implement a custom Lua model that efficiently efficiently handles concurrent data rights and reads, So what we can do here, we can may utilize the basic fundamentals of the transaction. So, okay, in transaction, transaction follows the property of acid. It is atomicity, consistency, isolation, and durability. So with this, what happens, uh, at the one particular time, one process is allowed to execute while other processor are are queued. So in this way, we are making sure, like, the v, um, the process that, uh, making sure that the row or the data that we are trying to update is logged by one process so that the other process does not execute on that. So that is how we make sure that the the data we are writing is not dirty, and the data that we are reading is not dirty. So that is how we make sure by using the transaction mechanism. We make sure that the right the rights and reads are good and not dirty.
Process SQL adhere to the asset properties. The asset properties means, uh, here, a means. Like, all steps should compute should complete or none should complete complete. Consistency, like, we have the database consistent, and isolation, like, the it's, uh, database query should run-in isolation. And durability means, like, the whatever the the client data change that we are trying to make is durable and actually actually gets reflected in the database as well. Uh, okay. So using the transaction with this is very this is very basic syntax for the transaction is, like, begin transaction. And after that, just try to write the code, whatever you want to do that in transaction. After that, we at the end of we have to use the commit. So this is a bit commit. We are what we are trying to do, we are committing the transaction. Okay? So that is how, uh, this Postgres SQL added to the asset properties, and this is generally seen in the relational database only. But there are few other non relational database like MongoDB that also adhere to the acid properties. But relational database definitely follows the ACID properties.
Okay, in the next, how do we prioritize the SEO performance in Next.js application? Okay, so here, like there are other frameworks similar to the Next.js like Jake.js, but if you use, if you want to do the SEO, then Next.js would be the preferred option here because it's a, or it is all the, it gets rendered on the servers itself. So that is why it is very efficient and very powerful. Another advantage is that if SEO optimization on the servers and rendering is very, very effective and there are trade-offs as well. If you want to do the SEO and you are doing, so let's say, few of the pages needs to be rendered on the client side, at that time, the SEO might start breaking, okay, in that case. So it is possible, like it is not really possible to render our entire application on the server because we will definitely need to render the, the data might be just available on the client side itself, like authenticated user or not, but we have to check this thing. So for that purpose, we definitely have to use the client side rendering. And trade-off is like, if we, if a situation comes where we have to like render the component or page on client side, and that might, it might be slow because server centering are much, much more faster as compared to the client side rendering.