Back to Articles
Feb 1, 20262 weeks ago

What Makes an Engineer When Everyone Can Vibe Code

R
Rohit@rohit4verse

AI Summary

In an era where AI coding tools have dramatically lowered the barrier to entry, a new class of "vibe coders" can ship features with astonishing speed. This article tackles the resulting identity crisis in software development, arguing that while anyone can generate code, the true role of an engineer is more vital than ever. It’s not about writing lines, but about owning the outcomes and navigating the complex realities of production systems.

with tools like Claude code, cursor the entry barrier have collapsed, when everyone claims to be an engineer it is hard to differentiate, who is the real one. when an average developer sees a non-techie ship application at a rate faster than them, they think their job is gone.

this fomo has made people stop engineering and over relying on ai tools.

as ai lowered the entry barrier, the demand for true engineering has never been higher. companies and users don't care about who writes the code, it is about who can take accountability for the result.

from my learnings, here are the 5 major distinctions that separate the vibe coders from true engineers.

1. ownership and consequences

you must understand code is not an asset, code is a liability.

a vibe coder can generate a feature, pushes it and moves on. without caring that can break and leak confidential data. the biggest red flag which i see in vibe coders is not thinking of future spoofing and only prioritizing the current problem statement.

let me give a live scenario:

a product manager, asks for a user authentication system.

the vibe coder:

open claude code and prompts "build a user authentication system", after failing and multiple iteration, gets the code working, ships it and move to the next feature.

the engineer:

builds the same auth system, but make guardrails for future proofing the system, make sure to address the edge cases like:

rate limiting to prevent brute force attacks

session management with proper timeouts

logging for security audits

password reset flow with email verification

error handling that doesn't leak user existence (no "user not found" messages)

monitoring alerts for failed login spikes

a documented runbook for security incidents

the outcome:

when the system fails or an attack happens, you can't say it was the ai mistake as the code was pushed from your account. it is you who has to face the repercussions, it is not that an engineer code doesn't fails, break or doesn't get cyber attacks. but he knows what to fix, how to minimize the loss, and how to get the system working as soon as possible.

ownership is the moat.

2. reliability over cleverness

llm loves to rizz the user, by providing a complex one-liner or an obscure library that claims to solve the problem in a smart and easy way. in the post training it is made to be user friendly making it optimize for the academic answer.

the vibe coder see the llm logic to be good hence accepts the answer and ships it.

let's breakdown this using an example which happened in one of our codebases.

the app needs to parse user input dates.

the vibe coder:

proceed with the ai suggestions, uses a complex regex like `^(\d{4})-(\d{2})-(\d{2})T.*$` combined with a heavy lib like moment.js for timezone conversion, the answer looks short and does the job.

few months later, the regex breaks on a valid ISO 8601 format with millisecond, the vibe coder is lost in the loop of prompting to decipher the regex.

the engineer:

relies on the boring, tested native `Intl.DateTimeFormat` or a lightweight library like date-fns. writes explicit parsing logic with clear error messages: "invalid date format. please use YYYY-MM-DD."

adds unit tests for edge cases:

leap years

timezone boundaries

february 29th

daylight saving time transitions

it's not about getting the work done once, but about keeping it working forever.

3. systems thinking vs. local optimization

ai knows how to do build anything if prompted well, but vibe coders thinking pattern is linear, making ai give dumb, fastest, simplest solutions.

this is the reason, why most orgs are facing spaghetti code issue, as when one vibe coder fails on a issue, another vibe coder after 10 attempts get it done, but he is also unaware what should be done if the code breaks again.

vibe coding is great for solving immediate function, as it focuses on what's in front of them but an engineer sees the ecosystem.

the scenario: product asks for an export user data to CSV button.

the vibe coder: prompts cursor to make a function to export user data to CSV , the ai does it pretty easily and gets the code that fetches all users from the database, converts them to CSV strings in memory, and returns the file to the browser. this works perfectly for 100 tests users in dev env, ships it.

the engineer: also uses ai, but first examine the scope and it's effect on other working functions, he checks how many users do we have? answer: 500,000

realizes the vibe coder's solution will crash the server memory and timeout the request.

therefore he implement:

paginated background job,

CSV generation happens server-side in chunks to save memory

the user gets an email when the download is ready

the file is stored in S3 with an expiring security link

adds monitoring for the job queue health

when the company scales to bigger user base, the vibe coder's feature crashes in production, the engineer's solution scales without any modification. this is system thinking not just local optimization.

4. problem framing

the skill which a vibe coders will take years to get hold off, making it the highest leverage skill. honestly, a vibe coder acts a waiter who takes the order and bring the food but an engineer acts as a consultant, they question all the details, limitations, premise.

as the best engineering work happens before a single line of code is even written.

the scenario: a ticket is raised "add a real time chat to the app"

the vibe coder: prompts ai to build a web socket chat with react, gets a working chat component, integrates socket.io, ships it and closes the ticket.

the engineer: even before starting to code asks:

why do users need real-time chat?

how many concurrent conversations do we expect?

what is our infrastructure budget for web socket servers?

do we already have a notification system?

finds out, the user are complaining about the slow support responses

the outcome: he solves the real problem for lesser complexity and infrastructure cost. while vibe coder is busy building the wrong thing faster than ever, he ensures to build the right thing

5. constraints management

ai lives in utopia, thinks you have infinite memory, infinite bandwidth, infinite resources and zero latency.

reality is different, it has friction, it has budgets.

where an engineer can navigate, warn about the potential surge in costs, ways to minimize the cost, the trade offs.

the scenario: building an ai-powered image recognition feature.

the vibe coder: uses latest image generation models like nano-banana on every image uploads as it is the easiest to prompt, works beautifully, each api call costs $0.02, without knowing what could be the insane bill if there is sudden surge of users.

the real engineer: does the math and warns about the charges

after seeing the budget, proposes an alternative:

client-side image validation first (size, format)

batch processing during off-peak hours

cache results for similar images

use a smaller, cheaper model for initial triage

only use gpt-image-1-mini for the confusing edge cases

the outcome: he reduces the costs while maintaining the 95% of user experience, while the vibe coder's feature gets killed in the next budget because it burned the runway.

an llm lives in utopia, while we live in the real one.

the bottom line:

ai is a super power for velocity, you should definitely use it to move faster, prototype quicker, and kill the blank page.

but do not confuse speed with substance.

engineering is the discipline of certainty. it is the art of taking responsibility for systems that affect real people, real budgets, and real data.

if you want to survive the ai wave, use ai as a pair programmer not the owner of the codebase.

start defining yourself by your ability to guarantee outcomes in an uncertain world.