Dec. 05, 2025
20 minutes read
Share this article
Last Update August 2026
There is one question that sorts a Node.js vendor shortlist faster than any portfolio review: which major version will you target, and what happens when it leaves long-term support? Most vendors cannot answer it without checking. That is the whole problem in miniature.
Node.js needs no defending as a platform choice. In the Stack Overflow Developer Survey 2025, Node.js was the most used web technology among all respondents, cited by 48.7 percent of 23,678 developers, ahead of React at 44.7 percent. It also scored 52.2 percent on admiration, meaning most people who use it professionally want to keep using it.
That ubiquity is the buyer problem. Because everyone uses Node.js, everyone sells Node.js. “We build with Node” carries no information, which is why most shortlists look identical on paper and diverge violently by month four.
The real cost of choosing badly is never the rate differential. It shows up in four places, none of which appear in the proposal:
A capable team at ninety dollars an hour is almost always cheaper over eighteen months than a mediocre team at fifty. What follows is the process that tells them apart, specific to Node.js rather than vendors in general. For broader criteria, see our software outsourcing partner selection guide.
Ask this in the first technical call, before portfolios or rates: which Node.js major version will you target, and what happens when it leaves Active LTS?
The answer is diagnostic because the Node.js release schedule is public, fixed, and governed by the OpenJS Foundation. Every even-numbered major gets thirty months of support, then stops receiving security patches. Where the line sits as of July 2026:
| Version | Codename | Status in July 2026 | End of life |
|---|---|---|---|
| Node.js 18 | Hydrogen | End of life, no security patches | April 30, 2025 |
| Node.js 20 | Iron | End of life, no security patches | April 30, 2026 |
| Node.js 22 | Jod | Maintenance since October 21, 2025 | April 30, 2027 |
| Node.js 24 | Krypton | Active LTS since October 28, 2025 | April 30, 2028 |
| Node.js 26 | Current | Released May 5, 2026, becomes LTS October 28, 2026 | April 30, 2029 |
A partner proposing greenfield work on Node.js 20 in mid 2026 is proposing an application that left its security support window before the first sprint. Node.js 22 is in maintenance with under a year left. The correct default is Node.js 24, with a documented path to Node.js 26 after it reaches LTS in October. A specialist knows this without looking it up, and can describe a live upgrade as a canary deploy plus a dependency compatibility pass rather than changing a number in a Dockerfile.
The partner who is right for a transaction API is not the one who is right for a monolith decomposition. Node.js competence is a family of loosely related skills, and teams are rarely strong across all of them. Decide which row you are in first.
| Workload | What it actually demands | What to ask for as evidence |
|---|---|---|
| REST or GraphQL API | Clean layering, boundary validation, pagination and caching. The choice between Express and NestJS matters less than the layering. | A walkthrough of where routing ends and business logic begins |
| Microservices decomposition | Boundary reasoning, idempotency, distributed tracing, contract testing | A redacted decomposition plan from past work |
Then write a one-page technical brief instead of a request for proposal: workload type, current stack, expected peak throughput, timeline, internal team composition, and the hardest problems you anticipate. An RFP invites boilerplate; a brief with a real problem invites differentiated thinking. Partners who reply with a capabilities deck have told you what you needed to know.
Run these with the engineers assigned to your project, not the sales engineer. Sixty minutes of this beats a two-hour tooling demo.
Describe a route handler that reads a large file with a synchronous call, parses it, and returns a summary, then ask what they would change. The shallow answer is that the read should be asynchronous. The answer you want goes further: stream the file rather than load it into memory at all, plus a question back about how large it actually gets, because the right fix depends on that.
Node.js runs your JavaScript on a single thread, so anything synchronous and expensive there stops every request in flight. A strong answer names the offenders unprompted: synchronous file system calls in a handler, parsing very large JSON payloads, synchronous cryptographic hashing, catastrophic regular expression backtracking, and unbounded array operations over large datasets.
The production half matters more. Listen for event loop delay as a monitored metric via perf_hooks or their observability vendor, with alerting on the ninety-ninth percentile. Push once further and ask how they would diagnose a memory leak: you want a procedure (reproduce under load, capture heap snapshots at intervals, compare retained sizes, find the retaining path) rather than a habit of restarting the process on a schedule.
This separates people who read the docs from people who have shipped. The answer depends on the shape of the work: worker threads for CPU-bound work inside one process, cluster or a process manager to use multiple cores across independent requests, and an external queue for anything long-running, retryable, or that must survive a deploy. A candidate reaching for worker threads on an input and output bound problem has misdiagnosed the bottleneck, the most common Node.js performance mistake there is.
Ask them to describe piping a large file or database cursor to a slow consumer, and listen for what happens when the producer is faster than the consumer.
The weak pattern is attaching a data listener and writing straight through, which ignores whether the destination is ready and grows memory until the process dies. You want stream pipelines, respect for the return value of write, and an account of what happens to memory when a producer outruns a consumer. Teams that miss backpressure ship services that pass staging and fall over under real load, with memory growth that looks like a leak and is not.
TypeScript is the professional default for new Node.js backends. GitHub reported in its Octoverse 2025 research that TypeScript became the most used language on the platform in August 2025, overtaking Python and JavaScript after adding roughly 1.05 million contributors in a year, growth of 66.6 percent.
The version-specific part is the tell. Node.js handles TypeScript natively through type stripping: experimental in 22.6.0, on by default in 23.6.0 and 22.18.0, marked stable in 24.12.0 and 25.2.0, with the transform types flag removed in 26.0.0. A partner who knows this can tell you when a build step is genuinely required and when it is ceremony. One who dismisses TypeScript on greenfield work in 2026 is optimizing for their own convenience. If the question is live in your own team, our comparison of JavaScript and TypeScript and the case for TypeScript across the full stack.
The npm ecosystem is the largest attack surface in a Node.js application and the least examined line in any proposal. Acceptable answers: a committed lockfile, npm audit or an equivalent scanner as a pipeline gate rather than an advisory, deterministic installs via npm ci rather than npm install in continuous integration, a software bill of materials per release in a standard format such as CycloneDX, dependency review before adoption using OpenSSF Scorecard, and a stated patch window for critical advisories. Teams operating at the front of this practice will also mention npm provenance attestations and the SLSA build integrity levels unprompted.
Ask separately about secret management, where the only correct answer is a managed secret store rather than environment files, and about the Node.js permission model. Serious teams track the Node.js security policy and its security working group, and treat the OWASP Top Ten and CISA secure by design principles as the floor.
“We write tests” is not an answer. Ask for the split between unit, integration, and contract tests, whether they use the built in Node.js test runner or an external framework and why, what coverage threshold fails a build, and what they deliberately do not test. Operationally, look for structured logging with correlation identifiers, distributed tracing, event loop and heap metrics, and error tracking specified before launch. Diagnostics channel hooks and OpenTelemetry mark a team that has operated systems, not only built them. Pair this with their view on automated regression testing.
The patterns that most reliably predict expensive months later.
This is the question that separates a 2026 buyer guide from a 2023 one, and most vendor evaluations still skip it. Every partner you shortlist is using AI assistance. The variable is whether they have a review discipline around it or are quietly shipping output nobody fully understands.
The Stack Overflow 2025 developer survey is blunt about the friction. The biggest single frustration, cited by 66 percent of developers, is AI output that is “almost right, but not quite,” and 45 percent say debugging AI-generated code takes longer than writing it themselves. Trust is low and falls with experience: 46 percent actively distrust AI accuracy against 33 percent who trust it, and among developers with ten or more years of experience, the highly distrust figure reaches 20 percent.
That matters commercially because “almost right” code is exactly what passes review, ships, and surfaces as an incident. Ask four questions:
Contract implication: your intellectual property clause should assign all deliverables to you regardless of how they were generated, with the vendor warranting it holds the rights to assign. Where the application itself embeds a model, hold them to the OWASP Top 10 for LLM applications.
Portfolios are curated and references pre-screened. A short paid exercise is the only pre-contract signal that is hard to fake. The first is a two-week discovery sprint with a concrete deliverable: an architecture document, a risk register, an API design with contracts, or a narrow proof of concept. You own the output either way.
The cheaper option is a reverse code review. Give the shortlisted engineers a real service from your codebase and ask for a written review in two days. Score four things: whether they found the blocking or unbounded operations rather than only style issues, whether they separated what breaks production from what is untidy, whether they asked about missing context, and whether a non-specialist could follow the argument. This step reorders shortlists more often than any other.
This is covered at length in our comparison of in-house, outsourcing, and staff augmentation and of staff augmentation versus managed services. The Node.js specific point is narrower: augmentation works when you have internal technical leadership and the constraint is capacity, a dedicated squad when you need an outcome owned end to end, and fixed price only when scope is genuinely specifiable. If you cannot write a specification you would defend in a contract dispute, fixed price will cost you more than time and materials with disciplined control.
The headline rate is the least informative number in a proposal. Three questions recover the rest.
Who is actually doing the work? Some vendors present senior engineers in the sales process and staff mid-level developers after signature. Get named individuals into the statement of work with an equivalent seniority replacement clause.
What does ramp-up and churn cost? The first two to four weeks are largely onboarding, and you pay for them, so ask what fraction of week one is billable and what artifacts they bring. Then ask about average tenure on client projects and the process when a lead departs mid-engagement: you want a documented handover, an overlap period, and a replacement service level.
What sits outside the quoted figure? Clarify whether automated, exploratory, performance, and application security testing are included, priced separately, or assumed to be yours. Do the same for observability platforms, continuous integration minutes, staging environments, and licenses.
A worked example makes this concrete. Compare a four-engineer squad at fifty-five dollars an hour against one at eighty-five. Over six months at roughly 1,000 hours each, that is 220,000 dollars against 340,000, an apparent saving of 120,000. Now add two extra weeks of ramp across four people (about 17,600), quality assurance excluded and backfilled by two of your engineers for a month (about 30,000 at loaded rates), and one rework sprint (about 35,000). The gap closes to under 40,000 before a single production incident. Cheaper teams are not always a false economy, but the comparison is meaningless until ramp, quality assurance, and rework are priced.
A well-drafted agreement is not adversarial. It settles expectations while everyone is still optimistic. Four clauses are most often underspecified, and each one has a specific failure mode.
| Clause | What to require | The failure mode if you skip it |
|---|---|---|
| Intellectual property | All code, documentation, and deliverables assigned to you as work for hire on payment | A vendor license to reuse your code elsewhere, or assignment that vests only on completion, leaving you owning nothing if you terminate early |
| Defect response | Severity levels with response and resolution targets, and whether the clock runs on business or calendar hours | A dispute during your first outage about what “urgent” meant |
| Offboarding | Architecture documentation, decision records, runbooks, and a two-week overlap with any incoming team | You are not a client, you are a hostage. The most frequently omitted term, and the one that hurts most |
Two additions. A clause barring you from hiring their engineers directly is reasonable; one barring you from engaging other vendors in your space is lock-in dressed as boilerplate, so push back. And where you handle regulated data under GDPR, HIPAA, or PCI DSS, a data processing agreement specifying handling, storage, retention, and sub-processors is a legal requirement, not a nice-to-have.
Architecture decisions, code review, and incident debugging are conversational. Inside a shared working day a decision takes an hour; across a nine-hour offset, it takes two days of asynchronous exchange, and that cost compounds instead of appearing as a line item. So the question is not offshore or nearshore; it is how much synchronous collaboration your project needs. Greenfield work with evolving requirements needs a lot; well-specified execution work needs little.
That is why Latin American nearshore teams have become a common default for United States companies on Node.js: four to six hours of daily overlap with Eastern time supports real-time architecture discussion and same-day review. See our analysis of Latin America versus offshore alternatives, nearshore development as an operating model, and the common failure modes of distributed engagements that apply whichever model you pick.
Most engagements fail quietly, and the failure shows in metrics before a status report. Agree these five before signing, using the DORA delivery metrics as the backbone.
| Measure | What a healthy engagement looks like | What it tells you |
|---|---|---|
| Time to first merged pull request | Within week one | Onboarding quality, and whether ramp estimates were honest |
| Deployment frequency | Rising through month one, stable after | Whether continuous delivery is real or aspirational |
| Change failure rate | Trending down after week four | Test coverage and review discipline |
| Time to restore service | Measured, and improving | Whether observability was built in or bolted on |
| Review comments per pull request | Non-zero and substantive | Whether review is a real gate or a rubber stamp |
This is the sequence that works, compressed into six weeks.
| Weeks | Stage | What good execution looks like |
|---|---|---|
| 1 to 2 | Shortlist and brief | Five to seven candidates from directories and referrals, filtered to verified Node.js work at your scale. Send the brief, not an RFP, and score the reply. Our guide to outsourcing JavaScript development has a longer template. |
| 2 to 3 | Technical deep dive | Run the vetting questions and the AI review questions with the assigned engineers, then ask each to describe a past architecture decision they would now make differently. Naming a mistake concretely is the best proxy for engineering honesty observable in an hour. |
| 3 to 5 | Paid exercise | Discovery sprint or reverse code review with the top two candidates in parallel if budget allows. Two real outputs beat one output against a hypothetical. |
| 4 to 5 | Reference calls | Skip questions that invite endorsement. Ask what they would not use this partner for, how the partner delivered bad news, and what handover looked like. |
| 5 to 6 | Contract, not rate | Score the finalists on the weighted card below, then spend the remaining time on intellectual property assignment, offboarding, defect response, and named resources. |
Three situations where the honest answer is to wait.
If the work is your core differentiator and you have no internal Node.js depth, a partner will build something you cannot evaluate or maintain. Hire one senior engineer first, then augment around them. Our view on what to keep in house covers this boundary.
If you are still deciding what the product is, a partner will build the wrong thing efficiently. Do four weeks of internal discovery first.
And if your deployment pipeline, environment provisioning, and access management are not functional, external engineers will spend month one blocked and you will pay for it. Fix the delivery pipeline first, especially mid-migration to a cloud native architecture.
Shortlist decisions go wrong when everything is weighted equally, and the cheapest credible option wins by default. Score each finalist out of five, multiply by the weight, compare totals. These weights reflect what predicts an eighteen-month outcome, not what is easiest to assess in a sales call.
| Criterion | Weight | What a five looks like |
|---|---|---|
| Runtime and platform depth | 25% | Names the current LTS line unprompted, has an upgrade plan, and demonstrates event loop, concurrency, and backpressure reasoning under questioning |
| Delivery discipline | 20% | Tests, continuous integration gates, observability, and migration rollback all specified before the first sprint rather than after the first incident |
| Supply chain and security posture | 15% | Deterministic installs, scanning as a gate, a software bill of materials per release, managed secrets, and a stated patch window |
| Communication and honesty | 15% | Names a past mistake concretely, pushes back on your assumptions, and asks about context they are missing rather than assuming |
| AI review discipline | 10% | Identical review standard for assisted and hand-written code, dependency verification, and a clear list of what they do not delegate |
| Commercial terms and rate | 15% | Named engineers, intellectual property assigned on payment, defined defect response, a real offboarding clause, and a rate that stays competitive once ramp, quality assurance, infrastructure, and expected rework are priced in |
Note how little weight rate carries. Revisit the worked example above: the apparent saving disappeared into ramp, backfilled quality assurance, and one rework sprint before a single incident.
Bring a technical evaluator, either an internal engineer or an independent architect contracted for a day. Failing that, use the reverse code review and judge the output on clarity, prioritization, and whether they asked about missing context. You do not need to assess the code to assess the reasoning about it.
Node.js 24, which entered Active LTS on October 28, 2025, and is supported until April 30, 2028. Node.js 22 is in maintenance until April 30, 2027, and Node.js 20 reached end of life on April 30, 2026. Node.js 26 was released in May 2026 and becomes the next LTS line in October 2026, so a partner should present a migration path to it.
No runtime version strategy, business logic in route handlers, no monitoring of event loop delay, dismissal of TypeScript on greenfield work, no dependency scanning in the pipeline, no review standard for AI-assisted code, unwillingness to name assigned engineers, and no offboarding process. One is a conversation. Three together is a decline.
Because Node.js architecture work is conversational. Four to six hours of daily overlap with Eastern time means design decisions, code review, and incident response happen within one working day rather than across two, removing the coordination tax that erodes offshore savings.
Not by itself, since effectively all of them do. Be concerned if they cannot describe a review standard for assisted code, cannot explain how they verify a suggested dependency actually exists, or cannot name what they refuse to delegate. The risk is not the tooling; it is output that is almost right passing review unexamined. Ask whether they track change failure rate on assisted changes: the answer tells you whether they are managing the practice or hoping.
Strong Node.js partners are scarce not because good engineers are scarce, but because runtime depth, delivery discipline, clear communication, and honest commercial terms rarely arrive together. When you find that combination, pay a fair rate and keep it: the cost of switching mid-product is always higher than you estimate.
Coderio builds and staffs Node.js engineering teams from Latin America, whether you need a dedicated squad or to hire Node.js developers into an existing team. For a second opinion on a shortlist you are already evaluating, book a technical call.
As the Vice President of Sales, Michael leads revenue growth initiatives in the US and LATAM markets. Michael holds a bachelor of arts and a bachelor of Systems Engineering, a master’s degree in Capital Markets, an MBA in Business Innovation, and is currently studying for his doctorate in Finance. His ability to identify emerging trends, understand customer needs, and deliver tailored solutions that drive value and foster long-term partnerships is a testament to his strategic vision and expertise.
As the Vice President of Sales, Michael leads revenue growth initiatives in the US and LATAM markets. Michael holds a bachelor of arts and a bachelor of Systems Engineering, a master’s degree in Capital Markets, an MBA in Business Innovation, and is currently studying for his doctorate in Finance. His ability to identify emerging trends, understand customer needs, and deliver tailored solutions that drive value and foster long-term partnerships is a testament to his strategic vision and expertise.
Accelerate your software development with our on-demand nearshore engineering teams.