profile-pic
Vetted Talent

Suraj Kumar Ghosi

Vetted Talent

Experienced Senior Full Stack .NET | Angular |React | SQL Software Developer with over 10+ years in full-stack development. Specialized in designing, implementing, and optimizing complex applications with expertise in Single Sign-On (SSO) integration. Proficient in modern technologies including React, .NET Core, Redis, and SQL Server, and recognized for delivering secure, high performance solutions that enhance user experiences and business productivity. A hands-on leader adept at collaborating across teams, managing client relations, and driving end-to-end project success

  • Role

    Full Stack Developer

  • Years of Experience

    11 years

Skillsets

  • SQL Server
  • ASP.NET
  • CI/CD
  • Electron.js
  • Google ml kit
  • Highcharts
  • IIS
  • Ionic
  • Linq to sql
  • Microfrontend
  • modular monolith
  • react
  • .NET Core
  • SSRS
  • Web API
  • AI integration
  • Asp.net mvc
  • Azure ai fundamentals
  • Microservice
  • NoSQL
  • NServiceBus
  • OCR
  • RabbitMQ
  • SQL
  • Github
  • jQuery - 7 Years
  • Angular - 6 Years
  • Bootstrap - 2 Years
  • ASP.NET Core - 7 Years
  • Azure - 1 Years
  • Redis - 4 Years
  • SSO - 3 Years
  • HTML - 4 Years
  • Angular
  • Azure DevOps
  • CSS
  • JavaScript - 7 Years
  • GitHub Copilot
  • LLAMA
  • Mistral
  • Mssql
  • Node.js
  • PrimeNG
  • React Native
  • Socket.IO
  • token authentication
  • Webforms
  • Ollama

Vetted For

9Skills
  • Roles & Skills
  • Results
  • Details
  • icon-skill_image
    C#/SQL ProgrammerAI Screening
  • 72%
    icon-arrow-down
  • Skills assessed :Microsoft SSRS, PowerBI, .NET, AI, Database management, C#, JavaScript, SQL, Type Script
  • Score: 65/90

Professional Summary

11Years
  • Feb, 2025 - Present1 yr 3 months

    Full Stack Developer

    DataArt India
  • Sep, 2022 - Feb, 20252 yr 5 months

    Senior Full Stack Developer

    Medallia
  • May, 2016 - Sep, 20226 yr 3 months

    Lead Full Stack Developer

    Etech Global Service
  • Jan, 2014 - Mar, 20151 yr 2 months

    Software Developer

    Etech Global Service

Applications & Tools Known

  • icon-tool

    ASP.NET Core

  • icon-tool

    ASP.NET MVC

  • icon-tool

    Redis

  • icon-tool

    IIS

  • icon-tool

    Angular

  • icon-tool

    React

  • icon-tool

    TypeScript

  • icon-tool

    Ionic

  • icon-tool

    jQuery

  • icon-tool

    Javascript

  • icon-tool

    Bootstrap

  • icon-tool

    Microsoft SQL Server

  • icon-tool

    MongoDB

  • icon-tool

    GitHub

  • icon-tool

    GitHub Copilot

  • icon-tool

    .NET Core

  • icon-tool

    ADO.NET

  • icon-tool

    highchart

  • icon-tool

    REST API

  • icon-tool

    Web API

  • icon-tool

    IIS

Work History

11Years

Full Stack Developer

DataArt India
Feb, 2025 - Present1 yr 3 months
    Full-stack development on a healthcare project using Angular v18+ (TypeScript) and .NET Core, with SQL Server and Redis for caching and data management. Designed and implemented a Clean Architecture with Repository + Unit of Work pattern, ensuring scalability, maintainability, and modularity. Developed secure APIs and frontend modules with token-based authentication, session management, and audit logging, ensuring HIPAA compliance. Integrated Azure NServiceBus and Saga patterns for distributed transactions and reliable inter-service communication. Optimized application performance through Redis caching, query optimization, and efficient database indexing. Implemented structured logging, telemetry, and monitoring to improve observability, debugging, and production reliability. Collaborated with cross-functional teams to conduct security reviews, penetration testing fixes, and enforce best practices in secure coding and data handling.

Senior Full Stack Developer

Medallia
Sep, 2022 - Feb, 20252 yr 5 months
    Led full-stack development on the CheckMarket project using Angular18V+ (TypeScript) and .NET Core, with SQL Server and Redis for caching and high-volume data management. Built the solution using Microservices with Clean Architecture, integrating caching and queuing to efficiently handle high-volume survey responses. Implemented secure APIs and frontend modules with token-based authentication and session management, ensuring enterprise-grade security. Integrated SSO for a seamless and secure login experience, significantly improving usability and security. Migrated legacy systems to Angular18V+ (TypeScript) + .NET Core, enhancing performance, scalability, and maintainability. Implemented Azure NServiceBus and Saga patterns for reliable messaging and distributed transaction management. Managed sprint planning, feature releases, and cross-functional collaboration, ensuring timely delivery and high-quality code. Implemented structured logging, monitoring, and telemetry to improve production observability, debugging, and reliability.

Lead Full Stack Developer

Etech Global Service
May, 2016 - Sep, 20226 yr 3 months
    Oversaw multiple product development cycles, including sprint planning, feature implementation, and releases, while leading client meetings and resolving technical challenges. Led the integration of Redis for efficient data caching, optimizing response times for high-demand features. Led the migration of the codebase to a new stack, reducing technical debt and enhancing scalability. Built interactive frontend features in Angular for efficient display and filtering of customer interactions. Integrated Redis caching to handle high volumes of real-time data, improving system responsiveness and scalability. Developed secure token-based API for reliable user authentication and session management. Drove migration efforts to .NET Core, resulting in a more scalable and maintainable solution. Built API integrations for automated quality assessments, reducing evaluation time by 25%. Implemented intuitive dashboards for supervisors to easily track compliance metrics and access real-time results. Developed reporting dashboards to provide data insights for monthly, quarterly, and yearly periods. Streamlined data flow processes for improved data integrity, resulting in a 20% reduction in inconsistencies.

Software Developer

Etech Global Service
Jan, 2014 - Mar, 20151 yr 2 months
    Supported and maintained existing software products by implementing bug fixes, adding new features, and ensuring reliable functionality. Communicated daily with the manager and team lead for project updates, contributing to continuous improvements and issue resolution. Developed front-end features to capture and display typing results such as speed, accuracy, and error rate, providing instant feedback in a user-friendly format.

Achievements

  • Achievements Top Performer at Medallia: Consistently recognized as a top-performing Senior .NET Software Developer at Medallia, achieving top performance ratings each year for delivering high-quality, impactful projects and demonstrating exceptional technical skills and leadership. Multiple R&R Awards at Etech Global Services: Honored with multiple Rewards & Recognition (R&R) awards at Etech Global Services for outstanding contributions to projects, dedication to client satisfaction, and proactive collaboration. Recognized for excellence in project execution, technical innovation, and mentoring team members to achieve higher standards.

Major Projects

5Projects

HealthCare Project

    Designed and implemented secure authentication and authorization mechanisms in a healthcare application using .NET Core and Angular, ensuring compliance with HIPAA standards.

CheckMarket

    An enterprise-level survey management tool that enables clients to design, distribute, and analyze surveys for data-driven decision-making.

ICE (Online Chat and Email Web Application)

    A real-time customer engagement tool for online chat and email management, designed to enhance customer interaction and support.

Tying Test Application

    An internal web application designed to evaluate typing speed and accuracy for employees, displaying real-time results and automated feedback.

Lead Management System

    CRM for managing customer leads, follow-up history, and progress tracking.

Education

  • MCA, Computer Application

    Rajasthan Technical University (2013)
  • BCA, Computer Application

    University of Rajasthan (2010)

AI-interview Questions & Answers

My name is Suraj. I have 10 years of experience as a pushback developer in.NET and SQL Server. If you're talking about my skill sets, I have experience in the.NET Core API, RESTful API. I also have experience in Node.js and creating a web API with security mechanisms, such as authentication. I have experience in SSO integration, single sign-on. On the front-end side, I have experience with Angular and React, JavaScript, and jQuery. In the database side, I have experience with SQL Server, including creating functions, jobs, and store procedure query optimization, ETL jobs. I also have experience sending notifications through email and using SQL. If you're looking at my current project, the survey tool project, we're capturing data from different print sources through surveys. We're capturing data from SMS, browsers, and other sources. We're generating reports based on the data and analyzing the database to create reports, including sentiment analysis and data analysis. We're generating reports reason-wise, gender-wise, and all other categories. The generated report will help customers gain insights into the data or take decisions based on the data. With the experience I have, I can work with the database team to channel efforts into reporting and data analysis. I've primarily used SQL Server throughout my career, working with.NET. I also manage teams and work as a senior developer, handling projects and defining project scopes.

Yeah, not a failure project. It's a smaller thing. Sometimes it happens, like, when you create a milestone for a two-state system. Okay? So, in my project, I've worked on a future feature that will be delivered in a particular timeline, okay, goal. So, it's not like a complete failure. We can say that, if it's a big feature, we divide it into chunks and decide what the MVP for that project is. First, we try to achieve that one. If everything is working fine, then we'll deliver, and it's not like it's completely a failure. I can say that it's a 90% success with small adjustments, and it's definitely 100% sometimes. Maybe we face small failures. I'm not sure. It's learning for us. So next time, we take the input from the current failure or the current day, and then we go ahead with the improvement. We take improvement feedback from the client and the team, where we're lacking and where we're missing, and then we work on that. And then we collect and work on that, and we achieve. So yeah, it's not like that failure. Yeah, it's learning. So yeah, so mostly, I'm working with the team, and we're responsible for whatever's happening in the project. So we work hard. We'll put extra time in, and we'll make sure the client is happy in the end of the day and the end of the week, whatever it goes. So yeah.

Yeah. So, view function and the stored procedures are a very important part of the SQL server and are mostly widely used in their applications. So if you're talking about the stored procedure, then we can set it as a compiled query. So stored procedure, we can get a stored procedure. It will help to think of it as mainly for performance improvement and also improving the SQL injection because if you're talking about inline query, it's impossible to prevent SQL injection from happening. Someone passes some data, it will give an explanation. But in a stored procedure, we use parameters. So, parameters are the latest chances to prevent SQL injection. And stored procedures are not like inline queries, where it's written every time a value. It will be like that sometimes it's written a value or sometimes it's not written a value, but it's compiled, and we can improve so many things in the stored procedure. Like, we can put optimization sets, not count on. So it will not be within the data. And yeah. So that thing, we can put in the stored procedure. A stored procedure is a compiled set of queries. It will return a result in a single set, multiple sets, and sometimes it will not return any result if you just update the data or anything else. And we are calling stored procedures. Like, we are not calling stored functions, but we are calling functions to stored procedures. If you're talking about the function, we can say that it's mostly for calculations. Suppose you want to give some inputs, like you want to pass some data, if you pass a quantity and the price, and based on that, it will calculate the price of the particular portion. So when we send data to a function, it's mainly used for manipulating data and it will return the data. Mostly, it will return a scalar value, but as we can say that it can also return a table value. So, yeah, in a function, we cannot perform DML operations, like instead of delete, but in a stored procedure, we can do that. A view is holding a virtual set. We cannot, like, it's it's it's fetching the data and storing it in a rigid set, and that is just what we can use in different places. So mostly, it will be useful for performance boosting. So when we have known that the data will normally frequently change or frequently something, then we can use a view, and we can create a different view. Like, we can improve data lists, we can create a view and any data which we can detect compared to fast, we can create a view and we can use it. So yeah. A stored procedure can perform DML commands like data insert, update, delete. We cannot do that in a function. We can just perform only the manipulation operations, and a view is mostly for returning data. It's a valuable resource that we can say that.

Yeah, I'm a senior developer. It's mostly happened with me. Like, this sometimes, Zoom people will not deliver the task, and sometimes it's delayed. So, I take the responsibility. I take the chunk of the work from the junior, and I can take the responsibility and finish the thing. Meanwhile, I'm helping the junior to understand what approach they would take if they encountered a similar situation. So, yeah, I take the responsibility and always result in a positive outcome, and we deliver. I can say that I can take a step forward because I'm a hardcore developer, and I'm very passionate about coding and everything. So, I'm always taking a challenge and tackling complex tasks compared to junior developers. Meanwhile, I'll give difficult tasks to junior developers as well. So, yeah, I take initiative. I identify the problems. I message the scrum meeting to address TEQs, like, critical bugs from the client that are reported, and then I'll jump on that. I'll take the initiative. I'll do some analysis, and later on, I'll identify the area where we can improve and fix it. So, yeah. And for my case, it's always positive because I work with a positive attitude, and I take care of other developers as well. So, yeah. It's always good to talk about the results.

Yeah, so a few things I'm considering in my mind. First thing is security. That's the highest priority for us to determine the kind of security we can put in the dot net application. Second is the infrastructure, like, the architecture which we are going to use mostly by using a clean architecture and the design pattern that we are applying in this application. So I'm highly prepared to use the repository pattern, which is very convenient, and it is very loosely coupled. So if you change anything, we can easily change it, and we can easily modify without affecting any other area. And I'm approaching this by creating some small microservices in a particular work. This is the thing that's different in web application. Also, for performance, I highly recommend using Redis for the caching purpose to boost performance. We also have to be very much compliant with the HIPAA standard to make sure whatever standard we are following is compliant. The security is the main concern, so we are implementing security in the login page with the JWT token, and we are capturing on the screen. We are also putting some firewall on the server, the IAS server, where we can block traffic if we get multiple requests in a particular time period. If we get multiple get requests from a particular IP address and some unauthorized resources, we can block them. So that kind of policy and that kind of approach is the best metric we are following. And, yeah, mostly, I'm looking to create more microservices for the particular project. We can also take care of load balancing. And if we have multiple servers, definitely, for session management, I highly recommend using Redis because it's a distributed system, and it'll be the same session in one server to another server. And, also, caching is also there. We can use in-line caching application caching to make it faster and a performance booster. Yeah. So this is the practice and the solid principle that we are using. I will recall that we are using the repository pattern, so we are using a solid principle. So, yeah, that is the best tactic that we need to follow, and, yeah, definitely, we need to follow this one. And we are following this in the current project, and I've been following the best tactic for the last 6 to 7 years. This will give more readability of code, mental ability, and yeah.

Yeah, for accuracy and reliability, I will check to see if there's a scenario, like, where we have a report, okay, where we have a report and find something. Okay. We are not fetching the data, and we are fetching incorrect data. And what was the logic behind the data? Why are we getting this data in this format? So, definitely, I will analyze the complete data in the database side. I will face all the tables related data, and I will see the relation between them. And, also, once I see the relations, I will try to face all the data with the whatever the criteria we have in the report. Suppose you are applying five filters, but you are getting a data which is not your expectation. So, I try to put all the filters, whatever you have applied on that filter, then I will analyze the data. Okay? This data flow, how the airflow is going on, how was the table intake, like, connected with another table. And I will verify the data. Once I have all the conclusions with the database side also and also what parameters and what parameters we are sending from the application side, Once I have concluded all the things, I will create a one sheet where I have mentioned all my findings. Everything I have whatever I have found with the registrar and everything, I put it in the Excel sheet and I compare the what are the data that currently we are fetching or what I have found the data in the database using the query, then the store processor. And I will identify the what is the portion where we are missing. If I change it, then it will give the desired result for the client. So, that also I will highlight it in the SPs, and I will discuss with the team and DV team. So, that is my validation. I will definitely go to the DVACM person to, like, verify the data. Okay. This approach I have done. I have this is my analysis, and this is my finding. If I do this, then it will work. So, if it is a correct approach, then definitely we can go with that one. So, yeah, that is the thing that I'm analyzing, like, building and rebuilding my data before presenting.

Okay, let's first talk about the delegate. We can say that a delegate is useful. It points your function when you have a same definition. Suppose you're creating a function and you want to point out that function. You have a function with two parameters, and based on that, it will perform an 8 substitution, and so on. So you can see that we have two parameters of the same type. We can create a pointer for that one, and we can use that function to give a different definition on a different approach. Suppose you create a function, like any x, y, zed. And when you define the delegate for the particular function, you can give a different definition. In some functions, you can use multiple and other definitions, and we can use delegates. Even we can say that if you send some data across to applications and if you think something is invoked here, then it will automatically identify other places. So we can use an event. We can create an event, and then we can use the event's Invoke method where we can pass the data. And it will notify where we can use that event. So you can notify something when something has happened. That time, we can use an event. And mostly, we are using an event when we are sending a notification to a particular user, like if you're creating an application where you have generated a report and you send some data and you want to notify a particular user, okay, this thing is happening or the data has changed. That time we are using the interface, we are mostly using it for the repository pattern, or the abstract because when we make sure you have a contract with a tidy couple and you whatever the function we have in the interface that you forcefully implement in the class, that time, definitely, we can use the interface because if you implement the interface, you cannot give a definition of the function. It's just a signature of the function. When we implement an interface in the class, that time you need to give a definition in the class. But in an abstract class, we can have a function with a body and without a body. So if you think that you forcefully implement that function in your class, then definitely you can go with the interface. But if you think that some function we don't need to forcefully implement it, we can do an abstract class. Garbage collection is very useful. Like, we are using a Dispose method. It's automatic, but we can

So, I've said, it's a class. Okay. And it's with the abstract keyword. And all functions in the class should be, like, abstract and non-abstract. So it's a 2-way thing. In the abstract class, we can define a function with the logic as well, and we can also define a function without logic with the abstract keyword. And in the drive class, we can inherit, like, we can inherit that class, and we can give the definition of that which we cannot give the body on the abstract class. Why we can use? The reason is, if I want to share some common data between classes. Suppose I have an employee class where I have first name, last name, I have a function to give a full name based on the first name and last name. So that function is common for all the classes. Like, it gives the first name and last name with the combination, so that common thing that if you want to share in the throughout the class where you can inherit this abstract class, then definitely we can use this abstract class. Whatever the piece of code that you think when we inherit an abstract class, where it is needed, then definitely we can go with the abstract class because it's mostly useful for sharing some common data while it is inheriting. Also, it is useful when we have different definitions for different requirements. Like, you have an employee where you have a silver employee, gold employee. Okay. So, where you have a class with your first name, last name, and the full name, and you have a membership. So membership, we cannot give a definition because the gold membership and the senior membership have a different definition. Maybe someone gets a 10% discount, gold gets 5% discount. So when we inherit this abstract class in the class, that time we can give a definition and it will be, like, work. So we have a different implementation as well. And when we share common things in the throughout the class, then definitely we can go with the abstract class.

Yeah. Wave API, it is mostly useful for phishing the data, and it is really more reliable when we have Wave API where you want to, like, it's useful in a very complex project where you want to feed the data. You want to authorize the person, like, authorize the user, authorize the request. So, definitely, we can use Wave API. We can use STV protocol over there. And the way we pay the best benefit is that it will be written data in any format. It's not like JSON and XML as we see in the REST API. In the Web API, it can be in any format, like JSON data, XML data, string data, and we also get the status for that one. So, HTTP status, let's say, 200 to 500. Razor template is a combination of the HTML helper, which we can create a controller for them, and we can also do calculations based on the data model. Describe how we can link here. So, mostly, razor template is used to make a page where we want to bind tightly with our model where we want to capture the data from the form in form format. Then, definitely, I'll go with the razor template. And where if I want to consume only some data from the server, then I can definitely go with the Wave API with the HTTP post, get, and report, and delete, where we have maintained all the things like authorization and all the things on the life cycle. So, that is the flow that I can use to consume data from the API. As I said, the Wave API can be used, and it can be consumed by any device. Like, it's not like before, desktop. Mobile applications also consume the Wave API. A razor engine is basically a template. We can make a page as well. We can create a designee page. We can show the data. Yeah, all things we can do that in razor template with the help of the HTML helper and the code and everything.