profile-pic
Vetted Talent

Dishant Arora

Vetted Talent

Versatile Senior Software Engineer with 6 years of experience in building scalable IoT systems, web applications, and AIdriven tools. Proficient in Python, Django, React, AWS IoT, and new technologies like LLM, RAG and Langchain. Developed innovative solutions like an IoT system managing over 1000 nodes and a tech support assistant chatbot using AI to automate diagnostics. Passionate about continuous learning and solving complex problems, I bring enthusiasm, adaptability, and a drive for excellence across IoT, web development, and AI, ensuring impactful and lasting solutions in diverse domains.


  • Role

    Automation Developer

  • Years of Experience

    6 years

Skillsets

  • AWS
  • Prompt Engineering
  • React Native
  • Streamlit
  • TCP/IP
  • AWS IoT
  • Modbus
  • BACnet
  • socket
  • Raspberry Pi
  • Postgre SQL
  • UML diagrams
  • AWS - 3 Years
  • InfluxDB
  • rag
  • Telegraf
  • AWS Lambda
  • AWS S3
  • Postgre SQL - 3 Years
  • Docker
  • JavaScript - 1 Years
  • Restful APIs - 1 Years
  • Django - 1 Years
  • react - 1 Years
  • Chatbots
  • CI/CD
  • CSS
  • Design patterns
  • Python - 6 Years
  • Flask - 1 Years
  • Grafana
  • HTML
  • LangChain
  • Matplotlib
  • MQTT
  • OpenAI API
  • pandas

Vetted For

12Skills
  • Roles & Skills
  • Results
  • Details
  • icon-skill_image
    Senior Full Stack Engineer (React/Next.js & Django/Python) - REMOTEAI Screening
  • 56%
    icon-arrow-down
  • Skills assessed :Ci/Cd Pipelines, Communication Skills, SDLC, HTML5/CSS3, Next Js, PostgreSQL/MySQL, react, Restful APIs, AWS, Django, JavaScript, Python
  • Score: 50/90

Professional Summary

6Years
  • Feb, 2018 - Present8 yr 4 months

    Senior Software Engineer

    Smartjoules Pvt. Ltd.

Applications & Tools Known

  • icon-tool

    Ansible

  • icon-tool

    Docker

  • icon-tool

    Linux

  • icon-tool

    Git

  • icon-tool

    Grafana

  • icon-tool

    InfluxDB

  • icon-tool

    Telegraf

  • icon-tool

    PostgreSQL

  • icon-tool

    CI/CD

  • icon-tool

    Streamlit

  • icon-tool

    Pandas

  • icon-tool

    Matplotlib

Work History

6Years

Senior Software Engineer

Smartjoules Pvt. Ltd.
Feb, 2018 - Present8 yr 4 months
    Led the development of a scalable IoT system managing over 1000 Linux-based edge nodes, achieving 99% uptime and eliminating single points of failure. Developed IoT software in Python to run on edge controllers, collecting data from up to 30 MODBUS RTU devices and BACnet IP protocols, ensuring seamless data collection. Engineered software to process and transmit sensor data between edge nodes and the cloud over MQTT, improving data transfer efficiency by 40%. Implemented a health monitoring system for IoT controllers using InfluxDB and Grafana, tracking 15+ metrics (CPU, memory, network latency, disk I/O), reducing downtime by 25%. Designed an end-to-end process for controller lifecycle management, from testing and provisioning to deployment, increasing deployment speed by 30%. Built an OTA pipeline using AWS IoT Jobs, enabling remote software updates for controllers, cutting manual intervention by 50%. Defined and assessed system reliability metrics such as data quality and system uptime, integrating them with the monitoring system to boost overall system reliability by 20%. Developed a custom logic processing engine, allowing users to automate site processes through flow-based logic, enhancing system flexibility, alerting, and user control. Standardized command request processing from the cloud to control assets, tracking each command across 5 stages with 20 status codes to precisely trace command journeys. Enforced clean code principles and design patterns, improving software reusability, readability, and extensibility. Standardized logging practices and integrated alerting tools to notify developers of controller errors, reducing incident response time by 40%. Spearheaded the development of a cross-platform web app (Ionic, React Native, Flask) to monitor sensor data, perform Modbus scans, and control devices. Built an intelligent tech support assistant chatbot using OpenAI API, RAG, Langchain, and Streamlit, automating 70% of issue diagnosis and resolution, significantly reducing support time.

Achievements

  • Led the development of a scalable IoT system managing over 1000 Linux-based edge nodes, achieving 99% uptime and eliminating single points of failure.
  • Developed IoT software in Python to run on edge controllers, collecting data from up to 30 MODBUS RTU devices and BACnet IP protocols, ensuring seamless data collection.
  • Engineered software to process and transmit sensor data between edge nodes and the cloud over MQTT, improving data transfer efficiency by 40%.
  • Implemented a health monitoring system for IoT controllers using InfluxDB and Grafana, tracking 15+ metrics (CPU, memory, network latency, disk I/O), reducing downtime by 25%.
  • Designed an end-to-end process for controller lifecycle management, from testing and provisioning to deployment, increasing deployment speed by 30%.
  • Built an OTA pipeline using AWS IoT Jobs, enabling remote software updates for controllers, cutting manual intervention by 50%.
  • Defined and assessed system reliability metrics such as data quality and system uptime, integrating them with the monitoring system to boost overall system reliability by 20%.
  • Developed a custom logic processing engine, allowing users to automate site processes through flow-based logic, enhancing system flexibility, alerting, and user control.
  • Standardized command request processing from the cloud to control assets, tracking each command across 5 stages with 20 status codes to precisely trace command journeys.
  • Enforced clean code principles and design patterns, improving software reusability, readability, and extensibility.
  • Standardized logging practices and integrated alerting tools to notify developers of controller errors, reducing incident response time by 40%.
  • Spearheaded the development of a cross-platform web app (Ionic, React Native, Flask) to monitor sensor data, perform Modbus scans, and control devices.
  • Built an intelligent tech support assistant chatbot using OpenAI API, RAG, Langchain, and Streamlit, automating 70% of issue diagnosis and resolution, significantly reducing support time.

Major Projects

1Projects

FPL Garage

Jan, 2023 - Oct, 2023 9 months
    Developed a web app for FPL (Fantasy Premier League) managers using React, Material-UI, Django, and PostgreSQL, offering features like a drafts planner and AI-driven team optimization. Integrated real-time FPL data for team management and decision-making. Built an Expected Points (XP) model to predict player points using historical data, player form, opponent strength, and FDR, enhancing accuracy for upcoming gameweek predictions.

Education

  • B.Tech - Mechatronics

    University of Petroleum And Energy Studies, Dehradun, Uttarakhand, India (2018)
  • B.Tech - Mechatronics

    University of Petroleum And Energy Studies (2018)

AI-interview Questions & Answers

Hi, I'm Dushyant. I've been working as a software engineer for the past 6 to 7 years. I've been mostly working in the IoT industry. I have worked on developing IoT systems from scratch, and these IoT systems are currently active in around 50 different buildings in India. These buildings are huge. So, these IoT systems monitor the data, and they allow users to control the assets within the building. I have worked on building these systems from scratch. I have led the development and led all the work required to monitor these IoT systems on a daily basis and maintain the IoT software. So, mostly I have worked in this industry, and throughout I have gained experience in skills like Python. Mainly, I've been developing software in Python. I've used a lot of frameworks in Python. I've worked with NQTT. I've worked with databases like Postgres, InfluxDB, and DynamoDB, and networking protocols. They are quite common and quite required in the IoT domain. I've worked with the networking protocols like TCP/IP and Purity. In Python, mainly I have solved problems that require multi-processing or parallel computing. And some tasks require high-throughput data. So I have solved a lot of problems like that with high-throughput data because IoT has a lot of sensors, a lot of devices, etc. And I have worked in this domain, where we had to work with different technologies like InfluxDB, Grafana, so that we can monitor these R&D systems. And lately, I've worked on a personal project called FPL Garage, which is basically a web app to help FPL managers, the fantasy league managers, build their teams and optimize their teams. And I have used React as the front-end framework and Django in the back-end as the back-end framework. So yeah, that's it.

Optimizing a database schema means a database schema already exists. So the reason why I know, first of all, I will understand the reason why there's a need to optimize and how slow it is and what's making it slow. Right? And what kind of queries are making it slow. It could be that only some selective queries are not efficient. So I would understand the problem first and try to find the root cause. And, oh, let's start with how you would build a database schema. So a database schema does not exist in this case. So I would understand the relationships between all the data aspects. Right? I would understand the relationships between all the data points. And then I would create this model where I can see these relationships clearly, like some kind of a diagram. Right? We have tools where we can just make a diagram of how these relationships are between all the data points. And I can visualize the relationships, and then I can start creating the tables schema. And then comes the optimization. So first of all, while building the schema, I would take into account what kind of queries I will run. And let's say a query requires data from different tables. So I would consider that use case and I would build the scheme accordingly. And then in terms of optimization, I would think about assigning the relevant keys, the primary key, the secondary key. And I would also use indexing wherever it's required. So, yeah, I would take a step-by-step approach. And, you know, step 1, I will understand the relationships. I will visualize these relationships, I will understand what kind of queries need to be in the use case, what kind of queries are going to be required. And then based on those queries, I would think about optimizing. Right? So let's say a query uses a separate condition or it needs to extract all the values based on a specific condition. So I would think about that query and try to optimize accordingly.

So I've worked in the exercise for techniques we'll use to dynamically generate static pages for our product catalog that updates daily. I've not worked on Next.js extensively. Actually, I have zero experience in Next.js. I've only recently started working in the web development industry, which is, like, I've started working on React and Django. So next year, I don't have any answers. I don't know the answer for this. What techniques were used to dynamically generate static pages? Yeah. I'm sure this answer requires some prerequisite knowledge about Next.js itself. It's not that it's not a general web development question. So I'll pass.

Operative risk for the API had handled handling in JAGU app to provide detailed feedback to the client side written in React. Interesting. So I see in mostly in API development and riskful API development. I have experienced that there's no clear standard of returning responses or the response structure, there has to be a standard for that. And I'm sure there are many such standards in the industry, right, in the web development industry. There are problems like this where the standard is not real. Right? How would you first problem I see is whether the payload and the response need to have a key called error always in the JSON payload, I'm saying. So, there has to be a standard. Let's say if there is an error, then the payload will have this error key. And the actual data can be in the data key. Right? So first of all, I see this problem of not having a standard in web development projects. Right? So first of all, I think that is very important. The second issue is related to error handling. Right? So let's say we have different views in Django and you have, let's say, that one of the views gets executed and there is some operation. Right? So let's say I want to authenticate the user. Right? So there will be a request for that and the view will get triggered. And this view needs to check a few things. Right? So it has to validate the request, validate the credentials, validate the user's information. So I'm just giving an example. Right? So it could be that I want to make a request to get the user's history, right? users' history of, let's say, what jobs did you apply to? Let's say there is a job hiring platform and there's a query coming to the JAMKO view to get the user's history of, you know, a list of jobs where he applied, right? So there could be some checks on this, whether the user is authenticated, whether the user is logged in, right, whether the user is verified, I meant. And whether the user's account is suitable to get this information, whether the user has access to get this record. So in that case, I would have these checks in place. And wherever these checks are not passing, I will raise an error. And then I will catch the error separately, and I will return that error in the same standard that I started with. Right? So yeah. That's it.

This type of process to incorporate a Docker-based development environment for a Django application ensuring alignment with production is interesting. Okay. So in this case, I would first try to understand the external dependencies of this application. Right? It's important because I would want this environment to help me test it in my local environment. Because I think that is as important as having this process, having this alignment with production. It has to be aligned with production. No doubt. No question around that. But, it has to also help me test locally so that I can speed up my development. And mostly I have used Docker because it serves me this purpose of being able to test locally also getting aligned with production. Right? So I would try to understand the external dependencies and also add those dependencies in some way in the doc in the Docker environment. Right? I never do it in such a way that those dependencies do not run in the production environment. So there has to be some control of what things to include in the environment and what things not to include in that environment based on some environment variables. Right? And let's say, that is one kind of control. And the other reason why we need environment variables is because there are some keys, there are some secret keys and credentials, there are some settings, right, which might be environment dependent. Let's say time zone, or let's say there is some path on the system which you want to access, which needs some configuration files. So there have to be environment variables like config file path, something like that. Help of these environment variables, I will be able to segregate the environments, right? Segregate the conditions which are being imposed with the different environments, right? Production environment also. So, yeah, mostly, I will use environment variables. I will maybe use a Docker Compose file and you know to set up the environment. Yeah. So, I mean, yes, let's say if there's a Python application, it's a Django application, right? So I will prepare a Docker image, the base image, the Docker image, and I will extend that image, add some if there are any additional requirements, I will add those in the Docker Compose or the Docker file. I will build that image and I will test the container. Right? And then I will test it locally first, then I will make sure it runs in production also. Right? So, yeah, that's the way I would do it.

Implement the cache system red channel to reduce the number of database calls for frequent queries. So I actually went through the same exercise while I was building this FPL garage platform. And I used Django extensively in this project, which was the complete back-end framework I used in this project. I went through the same problem of queries, other requests, taking time to execute because there were database calls for some of the requests. So I would take two approaches in mind. One could be the use of some in-memory caching system. There are straightforward in-memory caching systems in Django, I think, which has its own caching mechanism or provides some methods to help you cache. So I've used that and it was an in-memory caching system. It provides external support so that you can set up the caching in Redis, or any other caching database. So yeah. I think it depends on the complexity of the project. If the project is too complex, and there is some data that needs to be accessed every now and then, I would definitely think about using an in-memory caching system. And it is very straightforward. You can just use a decorator on top of a view. Django provides this mechanism. I've used this. And on top of the decorator, you provide some details. On top of the view, you add a decorator, and it will catch the response of that view. So that is a very straightforward system to catch your responses. It will save the database calls. But I'm sure it can work for very limited use cases, but for other use cases, where this in-memory caching system will not suffice, I would definitely use Redis. And I would save those results in Redis with some details. And when those details expire, then only I will make those database calls. To have this caching system, to standardize that, I can have a module out. I can use the straightforward methods which the framework provides in its tools or in its framework. I'm sure it provides those methods which you can use to set up a caching system in Redis. But if not, then we can just have a module which does this. This module has a limited functionality to get information from Redis, to save information to Redis. And the values are expired, then it can return accordingly. The module can tell you if the value is expired, and then you can make the database calls. So, yeah, I think these are very simple and straightforward approaches.

Full stack engineers often handle both server-side logic and client-side code for a Django project. However, if the view function is not creating a new record in the database as expected, there might be several reasons for this issue. So, let's examine the Django code snippet. This is a view function, and it's handling a POST request to create a new record. The request has a name and a value. The view function is using Django's ORM to create a new record, and it's doing so by using the `objects.create()` method. The line of code in question is: `record = Record.objects.create(name=this, value=this)`. The first thing to check is that the `Record` model is correctly defined, and that it has a `name` field that can serve as a unique identifier. If the `name` field is not unique, then it's possible that the view function is not creating a new record because a record with the same name already exists. Another thing to check is the syntax of the `objects.create()` method. The method is called with two arguments, `name` and `value`, which are set to `this`. However, it's possible that the `this` variable is not being passed correctly to the view function, or that it's not being used correctly in the `create()` method. The `objects.create()` method is a shortcut for creating a new instance of the model, and it's a convenient way to create a new record in the database. However, if the view function is not creating a new record as expected, then it's possible that there's an issue with the way the method is being used, or that there's an underlying issue with the model or the database that needs to be addressed. So, to summarize, the reason why the view function is not creating a new record in the database as expected might be because a record with the same name already exists, or because there's an issue with the syntax of the `objects.create()` method.

React has its quirks when it comes to rendering. In the following codes, it would explain why the component might not be re-rendering while when the items are updated. Okay, so this is item list component which initializes and has a state called items. Cons add item equals to items are pushed, then add item, new item. Oh, so the code isn't visible. Items map. Item. The code isn't clear in terms of visibility, but I'll try to answer. Set items to items, then items push. Why would the component re-render in this case? Yes, component re-renders when there's a change in the state. It has to re-render when there's a change in the state. It has to re-render. Ideally, it should re-render, but set items. It could be something to do with shallow copy and deep copy. So I've come across some problems like this while working on this web app. The same problem. The state is changing. I'm adding something to the array or in the map. Right? And the map is a nested object. It has keys and the value is an object with subsequent keys. And then, the app won't re-render the component. So I was stuck in the same problem. The way I solved it is by understanding the deep copy and shallow copy thing. I had to reconstruct the whole state or something like that. So that's one of the reasons why. But apart from that, I'm not sure. Add item. I'll pass.

Real time collaborative editing feature in a Django based web application with simultaneous edits. So it has to have real time collaborative editing feature in a web application. Let's say there are multiple users editing something. Right? And whenever I'm editing something, there's a request going, let's say a post request, to this Django application. Right? Similarly, other users are also editing and the post requests are coming from their end also. Multiple post requests are coming. Right? And these requests now have to save this information in post case database. Right? Okay. Simultaneous edits, so this will be simultaneous. Right? All these requests are going to be executed concurrently using Django's built-in support for concurrency, such as async views and database connections. It will ensure that these requests are executed concurrently. I'm not sure how Django handles the concurrency, but it's designed to handle multiple requests efficiently. The views will get triggered on each request, and these will be simultaneous edits. Right? So I'm not sure what the solution is, but it's definitely possible to implement real-time collaborative editing in a Django application.

Okay, you know, I'm about to implement something like this in my app. I'm working on the model right now, but I've not yet integrated with the Django back end. But I don't have the prerequisite knowledge of how you bundle a model. Right? And how then do you use that model to predict? So let's say that model is contained within a file or within some separate application. Let's say there is a model as an application and you use that application to predict. Right? So it could be a simple monolith. The monolith has the model at the Django back end is contained within the monolith. That could be the simplest approach. As I said, I'm not sure how the model is bundled, whether it is a file, whether it is a separate application. Right? I'm sure the model is bundled in such a way that you can use it and load it again to predict. That's the simplest approach. That model is contained within the application, within the Django application. And then your app is initialized. And then whenever it's required, you do the real-time prediction, you call the model to predict the values. And then you can send these values to your front-end application via sockets or via WebSocket or some kind of request-response model. So yeah. I mean, or some other way could be that if this model is not contained within the same Django application, then this model can exist somewhere else, and there can be an API on top of it. And then the Django can use this API to get the values. Right? Get the predicted values. That could be another approach, but of course, that will introduce some latency. Right? So the best way is to do it by having that model some approach, you load that model in memory. That will be the fastest way to do it. Right? And that will make it real-time. As this question is saying, it's real-time prediction. So I would definitely try for that approach first. Then, yeah, then I would think about how to update these models in the CICD pipeline. There has to be some way to update these models also. So that will but that is a separate problem to tackle. Yeah. That's it.

How do you ensure cross-browser and cross-device compatibility for complex CSS layouts? Okay. I face the same problem in the web app. Right? I released that web app, and the user started complaining that it did not work on my mobile because I developed it only for desktop first and then I had to improve the styling, improve the components. So, right, it is UI responsive and it is compatible in all the devices. So how did I ensure this? I think the straightforward approach is doing it right the first time. Whenever you're building this app, whenever you're building any front-end app, you make sure you use these responsive UI strategies from the starting phase. Because when the project gets bigger and bigger, it gets difficult to make sure to ensure this compatibility. So, for CSS layouts, I think I use a very simple display flex-based approach. And the flex layout is very simple, and I think that's a straightforward solution to maintain the compatibility. And then based on screen sizes, you define whether it's width or whether it is font size. I find that approach simpler and straightforward. You mentioned different sizes. Right? Different width or different font size. So I think that is a very straightforward approach. I don't like condition-based CSS properties because they're just not that readable and straightforward to understand. And I have a very limited experience in CSS and React. So based on that, I think just screen-size-based CSS properties work very well. I don't know the term to define it, but that seems to be the simplest approach. And, yes, of course, use flexbox and make sure you test on both all the screen sizes. While you're building it, while you're developing it, test it then and there and fix it then and there. So you can just test your front end for all the different screen sizes in the developer tools. So make sure you do that from the starting phase. So, yeah, I think that's the approach I would take. Yeah.