DEV Community

Cover image for 5 Things Even AI Can’t Do: Context, Creativity, and Human Touch in Node/NestJS Development
DevUnionX
DevUnionX

Posted on

5 Things Even AI Can’t Do: Context, Creativity, and Human Touch in Node/NestJS Development

MY GAME JUST LAUNCHED

Flip Duel: Online Card Game - Apps on Google Play

1v1 card duel! Bluff, beat your rival. Combine your cards, raid the dungeon!

favicon play.google.com

Introduction

AI is powerful and getting smarter – it can generate code, answer questions, and even help design systems. Yet seasoned engineers know there are tasks only people can do. A recent industry overview bluntly states: “it does not understand meaning… it cannot create independent judgment… [and] it lacks emotional intelligence”. In other words, AI excels at narrow, data-driven tasks but fails where true understanding, empathy, or accountability is required. This article – aimed at Node.js/NestJS developers and engineers – digs into five such areas. Each section explains the concept, provides real-world dev examples (with code snippets in JavaScript/TypeScript when relevant), and notes where AI helps and where it stumbles. We cite the latest research and official docs to back up these points. By the end, you’ll have a grounded perspective on AI-assisted development: how to benefit from code generation tools and LLMs while knowing when human judgment must step in.


1. AI Can’t Truly Understand Context

AI models do a fantastic job spotting patterns in data and text, but real context remains elusive. LLMs process words based on statistical associations, not on meaning the way humans do. As one AI analyst notes, “AI… operates by detecting patterns in historical data. It does not understand meaning. It does not know consequences”. In practice, that means an LLM won’t “get” the broader situation behind your code or data. It has no sense of what happened a minute ago in the team standup or what business rules apply to a request.

Context in Software Systems

Consider NestJS’s ExecutionContext, which provides metadata about a request or event handler. In a HTTP context, a guard or interceptor can see exactly which controller and method are handling the request. For example, Nest’s docs show that when handling a POST to CatsController.create(), getHandler() returns the create() function and getClass() returns CatsController. This allows the code to adapt behavior based on context:

@Injectable()
export class LoggingInterceptor implements NestInterceptor {
  intercept(context: ExecutionContext, next: CallHandler) {
    const httpCtx = context.switchToHttp();
    const req = httpCtx.getRequest<Request>();
    console.log(`Incoming ${req.method} ${req.url}`);  
    console.log(`Handler: ${context.getClass().name}.${context.getHandler().name}`);
    return next.handle();
  }
}
Enter fullscreen mode Exit fullscreen mode

Here, the developer explicitly uses runtime context (HTTP request, handler info) to log or branch logic. An AI given only a code snippet and a prompt might not infer all those details about when and how the code executes. It lacks true awareness of the request lifecycle and runtime state.

Where AI Excels and Falls Short

Modern LLMs can “remember” recent conversation (via a context window) and even long documents. For example, Google’s Gemini can handle over a million tokens. But larger windows aren’t a magic fix: as the Anthropic team points out, “LLMs, like humans, lose focus… as the number of tokens in the context window increases, the model’s ability to recall information decreases”. This “context rot” means that even if you feed the AI pages of documentation, it may still get confused about which part is relevant to the current query.

In practice, developers use Retrieval-Augmented Generation (RAG) to mitigate this. RAG fetches specific data from external sources into the prompt. As NVIDIA explains, RAG “enhances the accuracy and reliability of generative AI models with information from specific and relevant data sources”. In other words, you build a “knowledge base” (say, your own code docs) and include facts in the prompt. This helps ground the AI’s answers. NVIDIA even notes that RAG “reduces the possibility that a model will give a very plausible but incorrect answer, a phenomenon called hallucination”.

For example, in Node.js you might write a simple RAG function to answer questions about your project:

async function answerWithRAG(query, vectorStore) {
  const docs = await vectorStore.retrieveRelevant(query);  // fetch related docs
  const prompt = `
    Use the following information to answer the question.
    ${docs.join("\n")}
    Q: ${query}
    A:
  `;
  const completion = await openai.createChatCompletion({
    model: "gpt-4",
    messages: [{ role: "user", content: prompt }]
  });
  return completion.data.choices[0].message.content;
}
Enter fullscreen mode Exit fullscreen mode

Here the code explicitly retrieves context (docs from a vector store) and injects it into the prompt. The AI no longer has to recall everything; it sees targeted context. This improves reliability but also highlights AI’s gap: it needed human help (the vector store, curation of docs) to supply true context. AI by itself would likely hallucinate or miss important facts without that.

Lessons for Developers

  • Use prompt and context engineering: Carefully craft prompts, provide relevant docs, and manage the token window. Treat context as finite. Anthropic advises thinking “in context” – iteratively curating only the smallest set of high-signal tokens needed for the task.
  • Validate outputs: Even with RAG or careful prompting, always test AI-generated code or answers against known facts. The AI might produce fluent but incorrect text once you exceed its context capacity.
  • Combine AI with logic: Use static types, unit tests, and logging (as in the NestJS example) to catch context mismatches early. AI can suggest code, but you must check it in the full system context.

In summary, AI struggles with hidden context and system state. It can automate low-level coding, but developers must manage broader context, architecture and integration – tasks that require human insight.


2. AI Can’t Take Responsibility

AI will help write the code or suggest a design, but it won’t own the results. Machines don’t have accountability or intention. A recent discussion on AI accountability emphasizes: “it cannot assume responsibility for the outcomes of those decisions… The emphasis must remain on ensuring that humans are equipped and willing to take accountability”. In other words, if an AI-driven system causes a bug, outage, or even an ethical breach, the responsibility ultimately falls on the human developers, operators, or managers involved.

Real-World Software Example

Imagine deploying a NestJS microservice that uses an AI to classify user inputs. If the AI misclassifies sensitive data, who fixes it? Engineers must detect it, debug the model or logic, and apologize to stakeholders – tasks no AI can do. Similarly, an AI-generated pull request still requires a developer to review, merge, and be ready to revert if things go wrong.

Consider DevOps and CI/CD: AI tools can suggest pipeline configurations or even generate Kubernetes YAMLs. But when a deployment fails or a security issue emerges, a human is on-call to investigate and respond, not the AI. If the pipeline says “build succeeded” but a hidden error slipped through, the engineer digs into logs and patches the code.

The need for human oversight is often summed up: “you can outsource execution; you can’t outsource consequences. If it goes wrong, 'AI said so' won’t save you”. (An Instagram quote puts it simply: accountability cannot be automated – and in a production system, someone must own every decision.)

AI’s Strengths vs. Weaknesses (Accountability)

Aspect AI Role (Strength) Limitation (Responsibility)
Decision Support Generates options and analysis rapidly Cannot endorse or guarantee outcomes; doesn’t understand ethics
Consistency Follows rules consistently in code generation Lacks judgment; blindly follows flawed instructions without question
Speed Suggests fixes or configs in seconds May miss context that a human would catch; not liable for mistakes

As the Lumenalta report on AI limits notes, “high-stakes work still depends on judgment about tradeoffs, ambiguity, and consequences. AI can support that work. It will not own it well.”. AI can accelerate the “explore” phase (e.g., propose database schemas or microservice structures), but the final decision (“commit” phase) remains human-led.

Lessons for Developers

  • Always review and test: Never merge AI-generated code or configs unreviewed, especially for critical paths. Pair AI with code reviews, automated tests, and staging deployments.
  • Human-in-the-loop: Design systems so that important decisions (security, product priorities, unusual conditions) require a human sign-off. As one AI executive advises: “treat outputs as hypotheses, keep decision-making human-led”.
  • Clear ownership: In agile teams, use clear ownership or responsibility matrices. Document which team/person is responsible for each AI-assisted component. This way, when an issue arises, it doesn’t become “AI’s fault,” it’s traceable to the responsible owner.

By acknowledging that AI isn’t accountable, teams avoid the trap of over-reliance. AI is a tool that suggests – but we, the developers and architects, must decide and own the results.


3. AI Can’t Replace Human Creativity

AI can recombine existing code patterns in novel ways, but it does not originate new ideas with intent the way developers and designers do. It might surprise you with an unusual code snippet, but that’s remixing what it “saw” during training. As one expert pithily puts it, “AI recombines patterns. Humans create with purpose, emotion, and narrative.”.

Creativity in Software Engineering

Consider a developer brainstorming a new feature or user story. They think of product vision, user needs, and constraints. They sketch architectures, whiteboard ideas, and iterate. AI can help flesh out details – for instance, suggesting class structures or API endpoints – but it cannot conceive the original vision or the “why” behind the feature.

For example, writing a complex Node.js application often involves creative design: deciding the right microservices boundaries, naming conventions, or novel algorithms. An AI model can suggest code snippets (like a clever function), but it doesn’t understand the problem domain. It doesn’t know your startup’s unique value proposition or the UX story your frontend needs. It only knows patterns.

One way to see this is how AI deals with unexpected situations. The Lumenalta analysis gives a marketing use case: AI can generate campaign variants and test subject lines quickly. The same system will not recognize that a market shift makes the campaign premise wrong, or that a customer reaction signals a brand risk that historical data cannot capture. The AI is excellent at extending existing patterns, but it “does not originate a better frame on its own.” It takes a human to see beyond the data and pivot creatively.

Even in coding, creativity shows up in choosing algorithms or patterns. Given two approaches, an engineer might innovate a hybrid or use domain knowledge. AI will tend to use common design patterns. It might suggest a decorator or service for a NestJS app, but it won’t invent a brand-new architecture style or fix a deep UX issue in ways never documented.

AI’s Strengths vs. Weaknesses (Creativity)

Capability AI Strength Limitation
Code Generation Generates boilerplate and known patterns fast Lacks original intent or problem framing
Problem Solving Offers multiple solution variants Doesn’t understand when to break the mold
Innovation Can suggest combinatorial recombinations “Surprising output” comes from scale, not true novel ideas

In fact, a data scientist notes that the common saying “AI can’t be creative – it only recombines what already exists” has truth, but also nuance. Modern LLMs with huge context windows can produce surprisingly novel-seeming outputs (thanks to exploring massive combinatorial spaces). But those surprises are still rooted in the training data, not some internal “imagination.”

Lessons for Developers

  • Focus AI on repetitive creativity: Let AI handle rote creativity tasks (e.g. generating code templates, unit test stubs, or design variations). For truly open-ended innovation, rely on human brainstorming.
  • Use AI to augment, not replace design: For example, ask an LLM to propose NestJS service names or database schema from a docstring – it can speed things up. But always vet them: humans must ensure these proposals fit the product’s unique needs.
  • Break down big problems: If AI suggestions seem “stuck,” break the task into smaller parts. Then use your own creativity for the overall structure and let AI assist with the details.

By embracing that creativity is ultimately human, teams can use AI to rapidly prototype and experiment, while reserving the “big idea” work for developers’ insight.


4. AI Can’t Build Genuine Human Relationships

No matter how friendly a chatbot sounds, it isn’t a human colleague or friend. Machines lack authentic empathy, trust, and emotional intelligence. As a therapist writes, AI “aids with facts but lacks emotional depth and intuition. Professionals offer empathy and care that AI cannot replicate.”. In software teams, this means AI cannot truly motivate developers, resolve interpersonal conflicts, or mentor junior engineers.

Team and Customer Context

On a project, relationships matter. A senior developer encourages a newcomer, understands frustration, and adapts feedback to their learning style. An AI code reviewer might suggest changes, but it won’t pick up on a dev’s confusion or morale. It can’t shake hands, share a joke, or build trust after a deployment outage. In DevOps incidents, an on-call engineer consoles stakeholders, while AI tools only log errors.

In customer-facing systems (like chatbots), scripted “compassion” is limited. A customer unhappy with a bug needs understanding; an AI response can sound polite, but it doesn’t actually feel urgency or remorse. If a chatbot just repeats instructions, the user feels unheard. Real human support engineers will empathize and maybe go the extra mile. This reflects the Psychology Today point that “genuine connection… [from AI] is missing” – when people use digital support, “the missing piece? Real connection”.

AI’s Strengths vs. Weaknesses (Relationships)

Aspect AI Role (Strength) Limitation (Relationships)
User Engagement Can handle routine queries quickly Lacks true empathy; misses unspoken cues
Team Support Provides answers or suggestions 24/7 Cannot inspire, trust, or genuinely motivate
Social Interaction Can mimic friendly tone in text Has no self, no genuine care or understanding

Rafiq Wayani, a leadership coach, lists candidly that “AI cannot build relationships: Business is still built on trust… No algorithm can replicate genuine human connection”. In other words, while AI can simulate conversation, it can’t feel the emotional currents between people. It won’t notice if a team member is anxious, nor remember a manager’s leadership style to tailor its output.

Lessons for Developers

  • Use AI for tasks, but invest in people skills: Let chatbots handle FAQs or generate resource links, freeing time for your team to focus on empathetic communication and collaboration.
  • Preserve human contact points: For example, in customer support, use AI to draft responses but have a human review them. Or use AI to process logs and let engineers do the actual user outreach.
  • Build trust in processes: When adopting AI tools (like Copilots or code reviews), be transparent. Don’t promise the AI understands your code; instead say it offers suggestions. This way developers feel in control, maintaining trust in the tool.

Ultimately, AI can aid productivity and consistency, but the “glue” of any engineering effort remains human relationships and trust. Machines support us; people support each other.


5. AI Can’t Decide What Should Be Built

Perhaps most fundamentally: AI can’t decide the vision. It doesn’t know your users’ deepest needs, your company’s mission, or which product idea will really move the needle. No matter how much data it has, it can’t set priorities or conceive what to build first.

Strategic Decision-Making

In startup or product work, deciding what to build involves strategy, ethics, and foresight – “dirty work” beyond data patterns. Craig Sullivan summarizes it: “No LLM is going to tell you which deal to prioritize… or when a prospect needs a human conversation instead of another automated touchpoint… Treat outputs as hypotheses, keep decision-making human-led”. For example, an LLM can analyze customer feedback for topics, but it won’t know that shifting market trends mean the feedback signals a new feature idea. Only human product managers with market context can interpret that.

In system architecture, this shows up too. AI might generate microservice code or suggest a database (OK for boilerplate), but choosing between architectural paradigms (e.g. REST vs. GraphQL, monolith vs. microservices) requires understanding team skills, legacy constraints, and future roadmap. AI lacks that broader perspective and cannot weigh the trade-offs beyond statistical patterns.

Where AI Helps and Falls Short

AI is great at the exploration phase of problem solving – generating lots of ideas or code variants. But it’s weak at convergence. As one engineer puts it, “LLMs are great at divergence (getting more ideas), and weak at convergence (picking the right one).” Even with large-scale outputs, picking the best solution relies on human context: team culture, performance constraints, and politics.

For example, RAG or agents can gather and summarize information to inform a decision – they scale knowledge. But they won’t say “build this feature because we’ll capture X market.” They lack business acumen and on-ground insight. An LLM might suggest moving a block of code to a new file; it cannot suggest building a whole new component because “Team A is overworked, and Team B has expertise.”

Lessons for Developers

  • Keep humans in the loop for vision: Always have senior engineers or product owners steer the high-level roadmap. Use AI to gather data or simulate user scenarios, then decide the plan yourself.
  • Use AI as a tool, not a boss: When an AI suggests many solutions, treat them as hypotheses. Score them using metrics you care about and choose with human judgment.
  • Invest in domain expertise: Your knowledge of customers, business, and technical debt are irreplaceable. As one summary reminds us: “Jobs evolve. Judgment does not disappear.”.

In short, AI can never replace the creative spark and responsibility of deciding what to build. It lacks purpose. That means it’s up to the team to set direction and ensure technology serves human goals.


Key Takeaways

  • Context is limited: LLMs handle text in isolation and have finite memory (context window). Use techniques like RAG to inject relevant data, and always test AI-generated code in the full system context.
  • AI is assistive, not accountable: AI can generate code or suggestions, but it cannot own mistakes or make judgment calls. Human engineers must review outputs and bear responsibility.
  • Creativity stays human: AI recombines patterns at scale but does not innovate with intent. Use AI for prototyping, but rely on developers for vision and strategy.
  • Relationships need humans: No matter how “smart,” AI lacks real empathy or emotional intelligence. Preserve human interaction in teamwork and user support.
  • Humans decide what to build: AI can suggest and explore, but picking the right path requires human judgment and domain knowledge. Treat AI output as hypotheses, not decisions.

Conclusion

AI and LLM tools are reshaping software development – they’re incredibly powerful assistants. They can write boilerplate, suggest fixes, summarize logs, and even generate initial system designs. But they have clear limitations. They don’t understand systems the way we do, they don’t own outcomes, they aren’t truly creative, they can’t form real relationships, and they won’t set the product vision. These aren’t flaws; they’re just the nature of current AI.

As developers, our mission is to harness AI’s strengths while managing its weaknesses. That means leveraging prompt engineering, retrieval systems, and CI/CD pipelines to get the best outputs – while always keeping humans in the loop for testing, oversight, and final decisions. When a chatbot “hallucinates,” or Copilot writes vulnerable code, it’s a reminder that context, responsibility, and human values still require us.

The future is not humans vs AI, but humans with AI. By understanding these five boundaries, we can use AI to accelerate development without losing sight of what only people can do. As one developer put it, AI “accelerates the explore phase; humans own the commit phase”. Remember that rule of thumb, and AI becomes an advantage – not a liability.

Call to Action: Have you encountered situations where an AI’s suggestion went wrong? Or where human judgment caught an AI error? Share your experiences and thoughts in the comments below. Let’s learn from each other about the real-world limits of AI in development.


FAQ

Q: Can AI ever fully replace software developers?

A: Not in the foreseeable future. Current AI lacks true understanding, ethics, and responsibility. It’s best used as a coding assistant. Developers still need to review, integrate, and make judgment calls about AI outputs.

Q: How do we guard against AI “hallucinations” in code?

A: Always validate AI-generated code with tests and type checks. Use retrieval-augmented generation (RAG) and prompt constraints to ground answers. Never trust the AI blindly – treat it as a collaborator, not an oracle.

Q: What is the role of prompt engineering?

A: Prompt engineering helps focus the AI on desired outcomes. By crafting clear, specific prompts (and including context via system messages or RAG), you improve the quality of AI assistance. However, even perfect prompts can’t teach the model empathy or responsibility.

Q: If AI can’t be creative, why do some say it is creative?

A: AI can generate novel-looking combinations because it has seen vast amounts of data. Technically, it’s remixing patterns at scale. Some surprising results can feel creative, but AI doesn’t conceive ideas from first principles or feelings. It lacks intent and can’t do strategic innovation without human guidance.

Q: How should DevOps teams handle AI tools?

A: Treat AI tools (like infrastructure-as-code generators or monitoring bots) as helpers. Use them to automate routine tasks, but maintain human oversight on critical deployment steps. For example, an AI can draft a Kubernetes manifest, but a human must review security settings and verify it in a dev cluster.

Q: Can prompt-based agents (AI that calls APIs and tools) overcome these limitations?

A: Agents can mimic multi-step reasoning and use tools, improving task execution. But they still rely on underlying LLMs. They don’t truly understand business context or own outcomes. They reduce some manual work but raise new concerns (e.g., uncontrolled API usage). Even advanced agents need carefully defined boundaries and human supervision.

Q: How does AI impact architecture and system design?

A: AI can suggest design patterns and even draw diagrams from high-level descriptions, which is useful for brainstorming. But choosing the right architecture (monolith vs microservices, specific frameworks, database technologies) requires weighing long-term factors. AI suggestions should be one input, not a final design, as it won’t know your team’s full constraints and goals.

Feel free to drop additional questions or comments below. We encourage discussion on how to balance AI tools with human expertise in your development workflow!

Top comments (0)