You're Not Junior. You Just Don't Have the Words.

A blog series by Gaurav Sharma: The True Code of a Complete Engineer. Lessons I wish someone had told me 20 years ago.

You're Not Junior. You Just Don't Have the Words.
Pencil sketch illustration of a young software engineer sitting quietly while senior engineers discuss architecture terms like idempotency, concurrency, CAP theorem, and backpressure.

Early in my career, I sat in an architecture review where two senior engineers debated a problem I had personally solved six months earlier. I had the experience. I had the answer. I sat quietly for twenty minutes and said nothing.

Because they kept using a term I didn't know.

After the meeting I looked it up. It was exactly what I had dealt with. Same problem. Same fix. I just didn't have the word. And that word had kept me invisible in a room I had earned the right to speak in.

That moment changed how I think about technical growth.


The thing nobody tells you about seniority

We obsess over skills. Frameworks. Tools. Certifications. Years of experience.

But there is something that quietly separates the engineers who get heard from the ones who don't, and it is almost never talked about directly.

Vocabulary.

Not intelligence. Not even skill. Vocabulary.

The engineers who command a room in architecture discussions, who get taken seriously in interviews, who can redirect a design conversation with a single question, they are not always the most technically brilliant people there. But they speak the language of the field precisely. They can compress a complex problem into one term that everyone in the room immediately understands. They can ask a question using the right word and watch the whole conversation sharpen.

The engineers who struggle in those same rooms are often just as capable. Sometimes more so. But they describe the same ideas in ten sentences where one word would have done it, and by the time they finish, the conversation has moved on.

Here is the uncomfortable truth: in technical discussions, the way you say something is not separate from how seriously people take what you are saying. Precision of language signals precision of thinking. And the vocabulary of this field is how we signal that we have thought about something at the right depth.


The gap that is costing you

Here is what makes this particularly frustrating.

Most of the time, the vocabulary gap is not about things you don't know. It is about things you do know but cannot name.

You have built systems that keep working even when a dependency goes down. That is fault tolerance. You have fixed bugs where two users hit the same record at the same time and the data came out wrong. That is a concurrency control problem. You have thought carefully about whether it is safe to retry an operation, whether running it twice would cause a duplicate charge or a duplicate record. That thinking has a name: idempotency. You have watched a pipeline fall behind under load because the consumer could not keep up with the producer. That is a backpressure problem. You have brought a system back up after an outage only to watch it crash again immediately under the weight of accumulated requests. That is a thundering herd.

You did not need the words to deal with any of these. But you needed them to talk about them. And that is exactly where the gap opens up.

The knowledge is there. The experience is real. But without the vocabulary, you cannot fully access it in the moments that matter. You cannot connect it to the wider body of engineering thinking. You cannot signal to others that you have thought about it at the right level.

And so you get passed over. Not because you don't know enough. Because you sound like you don't.

That is worth sitting with for a moment.


What vocabulary actually does

When you learn the right term for something, three things happen simultaneously.

First, you can participate fully in conversations that were previously opaque to you. Architecture reviews, incident postmortems, technical interviews. These run on shared vocabulary. When you have it, you are in the conversation. When you don't, you are watching it from outside.

Second, you unlock a vast amount of accumulated thinking that you could not previously access. Every term in this field has books, papers, patterns, and hard-won lessons attached to it. Without the term, you cannot find them. With it, you can absorb in an hour what took others years to discover.

Third, and this is the one people underestimate: the vocabulary changes how you think, not just how you talk. When you have a precise term for something, you think about it more precisely. You ask better questions. You see the edges of the problem more clearly. You stop treating every instance as a unique problem and start recognising the category.

A developer who knows the word "idempotency" designs differently from one who doesn't. Not because the word is magic, but because the word comes loaded with implications, patterns, and questions that reshape how they approach the problem.


Some terms worth starting with

These are not obscure. They come up constantly in senior engineering conversations, architecture discussions, and technical interviews. I am sharing these purely as a reference point, a starting list to give you a sense of the vocabulary that exists and the depth behind each word. This is not a complete list. Not even close. Every domain has its own vocabulary and your job is to keep finding more. But if any of these are unfamiliar, that is not a gap in your intelligence. It is a gap in your vocabulary. And vocabulary is fixable.

1. Idempotency An operation that produces the same result no matter how many times you run it. Why it matters: The moment you use this word in a design discussion, you are asking one of the most important questions in distributed systems: what happens if this runs twice? That question prevents double charges, duplicate records, and some of the most painful production incidents you will ever deal with.

2. Fault Tolerance The ability of a system to continue functioning, even in a degraded state, when components fail. Why it matters: Without this term, you build defensive code reactively, one incident at a time. With it, you design for resilience as a property of the whole system from the beginning. The word forces the question: what is the failure boundary here?

3. Concurrency Control The mechanisms that ensure correctness when multiple operations access shared state simultaneously. Why it matters: Race conditions are one of the most common sources of production bugs. This term names the entire category, connects your specific fix to a body of established patterns, and prompts the right question: where else in this system can this happen?

4. Eventual Consistency A consistency model where data across distributed components will converge to the same value, given enough time. Why it matters: Knowing this term makes you ask the question that prevents a specific class of user-facing failure: which interactions in this system cannot tolerate stale data? That question is rarely asked by engineers who don't have the term.

5. Backpressure The mechanism by which a downstream component signals to upstream components that it cannot keep up with the current rate of data. Why it matters: Without this concept, you describe pipeline failures as performance problems and throw hardware at them. With it, you redesign the flow. One word changes the category of solution you reach for.

6. Circuit Breaker A pattern that stops an application from repeatedly attempting an operation that is likely to fail, allowing it to recover without being overwhelmed. Why it matters: This is what separates retry logic from fault tolerance. Anyone can write a retry. A circuit breaker shows you understand that retrying a failing dependency can make things dramatically worse, and that your system needs a way to stop.

7. Thundering Herd A situation where a large number of processes or requests are triggered simultaneously, overwhelming a resource that cannot handle the sudden spike. Why it matters: This problem appears most viciously during recovery, when you bring a system back up and it immediately goes down again under accumulated load. Knowing the name means knowing the fixes exist before the incident teaches you the hard way.

8. CAP Theorem The principle that a distributed system can only guarantee two of three properties simultaneously: Consistency, Availability, and Partition tolerance. Why it matters: Every distributed system you build makes a CAP tradeoff whether you know it or not. Naming it forces a conscious design decision rather than an accidental one. In a senior interview, how you discuss CAP signals immediately whether you have thought about distributed systems at the right depth.

9. Saga Pattern A way of managing data consistency across microservices through a sequence of local transactions, each publishing events that trigger the next step, with compensating transactions to handle failures. Why it matters: If you have ever tried to maintain data integrity across two services without a distributed transaction and felt the pain of partial failures, you were looking for this pattern. The name gives you access to a decade of thinking about how to solve it properly.

10. Observability The ability to understand the internal state of a system by examining its external outputs: logs, metrics, and traces. Why it matters: Monitoring tells you when something is wrong. Observability tells you why. When you use this word in a design conversation, you are asking: will we be able to understand what this system is doing when it behaves unexpectedly? That question, asked upfront, saves enormous pain later.

11. Sharding A database architecture pattern where data is split across multiple databases or nodes, each holding a subset of the total data. Why it matters: When a single database can no longer handle the load, sharding is the conversation that follows. Knowing the term means knowing the tradeoffs: query complexity, cross-shard transactions, rebalancing costs. Engineers who understand sharding ask the right questions before the system hits its ceiling.

12. Rate Limiting A technique that controls the rate of requests a system accepts from a client or service within a given time window. Why it matters: Rate limiting is the difference between a system that survives a sudden traffic spike and one that collapses under it. It also signals to others that you think about your system's contract with its callers, not just its internal behavior.

13. Deadlock A situation where two or more processes are each waiting for the other to release a resource, resulting in none of them making progress. Why it matters: Deadlocks are silent killers. Processes hang, nothing errors, and finding the cause without understanding the concept is genuinely painful. Knowing the term means knowing how to design to avoid it and how to diagnose it when it happens.

14. Event Sourcing An architectural pattern where state changes are stored as a sequence of events rather than as the current state alone. Why it matters: This term opens up an entire conversation about auditability, replay, and temporal queries that a traditional CRUD mindset simply cannot have. When you use it, you signal that you understand there are fundamentally different ways to think about how state is modelled and persisted.

15. Bulkhead A pattern that isolates components of a system into separate pools so that a failure in one does not cascade and exhaust resources needed by others. Why it matters: Named after the watertight compartments in a ship that keep it afloat even when one section floods. Knowing this term means knowing that fault tolerance is not just about handling errors, it is about containing them. A single slow dependency should not be able to bring your whole service down.


Start now. Not eventually.

Here is the thing about vocabulary gaps: they compound in the wrong direction. Every month you go without these terms is another month of participating below your actual level. Another interview where you know the answer but can't frame it. Another design discussion where your instinct is right but lands as vague instead of precise.

The fix is not complicated. Take one term from this list that you recognise from experience but have never properly owned. Read about it for an hour. Not to memorize a definition. To find the edges of it, the tradeoffs, the patterns, the questions it prompts. Then use it once, deliberately, in a real conversation.

That is it. Then find the next term. And the one after that.

You are not starting from zero. You are naming what you already know. And the difference that makes, in how you think, how you design, and how you are heard, is larger than most engineers expect until they experience it.

The vocabulary was always there. It was waiting for you to claim it.


📚 About This Series: The True Code of a Complete Engineer

This is part of an ongoing series where I share things I wish someone had told me earlier. Not theory, but the real stuff that shaped how I grew, earned trust, and learned to lead.

  • 👉 Bookmark the full series page
  • 👉 Follow me on LinkedIn for shorter takes more often
  • 👉 Or share this with someone who is technically strong but keeps getting overlooked in the room. They probably know more than they think. They just need the words.