Skip to main content
GullySystem
Node.js

Node.js is very good at waiting, and waiting is most of what a business system does.

Your server spends its day waiting. For the database to answer, for Razorpay to confirm a payment, for the WhatsApp gateway to accept a template. The whole runtime is built around that waiting, which is why a modest server holds a lot of people at once.

It is also the same language your React screens are written in. One team, one language, one set of habits across the browser and the server. On a small team that is worth more than any benchmark.

In plain words

Node.js is JavaScript running on a server instead of inside a browser. It does one thing at a time and hands off whatever it has to wait for. Hundreds of requests can be in flight while none of them blocks the others. It is a runtime rather than a framework, so the structure of your application stays a separate decision.

What we build with it

Where it earns its place.

What it is genuinely good at

  • APIs that mostly read and write a database
  • Live things: order status, a driver moving on a map, a counter that changes while you watch
  • Work that calls three outside services and waits for all of them
  • One backend serving a web app, an Android app and an iOS app
  • Uploads streamed through to storage rather than held in memory

Where the event loop turns against you

Node runs your code on a single thread. Anything that occupies it for a second occupies it for everybody signed in at that moment.

  • Building a large PDF or Excel export inside the request
  • Image and video processing
  • Report maths across years of rows, done in code
  • Encrypting or compressing big files

None of these is a reason to avoid Node. They are reasons to move that work to a queue, a worker process or the database, which is what we do.

Where we use it

  • REST APIs behind React and Next.js screens
  • Backends for React Native apps
  • Integration jobs talking to Tally, payment gateways and WhatsApp
  • Scheduled work, such as the nightly payment reminder run
  • Background queues on Redis, so the slow job leaves the screen alone

The part nobody mentions until it hurts

A Node application is mostly other people’s code. That is what makes it quick to build and what turns it into a maintenance job later.

  • A lock file in version control, so the build does not change under you
  • Updates on a schedule, not at the moment something breaks
  • Fewer packages, where twenty lines of our own would do
  • A look at what a new package drags in behind it

Node on its own gives you no structure

That is a feature on a small service and a problem on a system three people will maintain for years.

  • Express, where there are a handful of routes and one developer
  • NestJS, where several people work in one codebase over years
  • TypeScript either way, because the compiler catches what no reviewer does
  • The same layout for every service, so a new joiner recognises the second one
Good fit

When this is the right choice.

  • The application mostly moves data between a database, a browser and an outside service
  • You already run React or React Native, and one language across both is worth something
  • Something on the screen has to change while the user is looking at it
  • The system talks to several APIs that answer at their own pace
  • The team is small, and everybody needs to be able to read the whole system
Honest answer

When it is not.

  • Heavy number crunching or video work, which belongs in a worker or another language
  • A working Laravel or PHP application, where a rebuild costs more than the problem does
  • A team who write PHP or .NET and will maintain this after we hand it over
  • A brochure website, where a static site and no backend is less to run and less to break
  • Report work the database should be doing, which no runtime will rescue
Common questions

Questions we are asked about it.

Is Node.js fast enough for our system?

For the work most business systems do, yes, and the runtime is rarely the limit. Slow screens usually trace back to a query without an index or a report reading more rows than it needs. We look there first, whatever the language.

Do we need Node if we already run PHP?

No. If your Laravel or PHP application does its job, keep it. Node is worth introducing when you are adding something the old system handles badly, such as live updates, and the new service can stand beside it rather than replace it.

Is TypeScript necessary?

On anything that will be maintained, yes. Plain JavaScript will happily send a string where a number was meant, and you find out at 9pm on a Saturday. TypeScript turns most of that into an error while the code is being written.

Who can maintain a Node application after you?

Node and TypeScript developers are straightforward to hire in Bengaluru, which is part of why we use them. You get the repository, the deployment steps and the environment notes, so the next team is not reverse-engineering anything.

Can you add a Node service to software we already run?

Often that is the cleanest route. A separate service takes the new work and talks to the existing system through an API or a shared database. Nothing that works today has to be opened up.

Node or Python for AI features?

Both call the same model APIs, so for retrieval and generation it rarely matters. Python wins when you are training a model yourself. Node wins when the AI is one part of an application that already runs on it.

Start with the problem

Not sure Node.js is the right choice?

Tell us what the software has to do and who opens it. If something else fits better, we will say so, and say why.

  • No obligation
  • We reply the same working day
  • Your details stay private

Your details are private and secure. Protected by reCAPTCHA.