Level 02 · 10 → 25
Vocabulary in context
Now the words. The nouns engineers say a hundred times a day — repo, branch, PR, package, framework, environment — taught inside the workflow they belong to. No flashcards. No glossary dump. Just the words used the way they're used.
The repo
The single most important noun in software. A repo (short for repository) is a folder of code under version control. It tracks every file, every change, every author. It lives on your laptop and is mirrored on a host (GitHub, GitLab, Bitbucket).
Why it matters: a repo is the source of truth. Not the file you happened to email yesterday. Not the version on Steve's laptop. The repo. When someone says "what's in main?" they mean "what's the canonical state on the default branch in the repo right now?"
Branches and commits
Two atoms of version control. A commit is a saved snapshot of changes with a message describing what changed. A branch is an independent line of work — a series of commits that diverges from another branch.
The pattern: you cut a branch off main, do some work (a commit, two commits, ten commits), and when it's ready you merge it back. While you're working, main stays untouched. Other people are doing the same thing on their own branches. Branches are cheap to create and cheap to throw away — that cheapness is the whole point.
BASH$ git checkout -b feat/inbox # cut a new branch $ # ... edit some files ... $ git add . # stage what you changed $ git commit -m "Add inbox view" # commit with a message $ git push origin feat/inbox # send it up to GitHub
Pull requests — the dance of code review
You don't push directly to main. You push your branch and open a pull request (PR) — a proposal to merge it. The PR is where review happens: comments on specific lines, requested changes, approvals, automated checks.
Once the PR is approved and the checks are green, you merge it. The branch typically gets deleted. The change becomes part of main and (often) gets deployed automatically.
This sounds bureaucratic. It is. It exists because a single bad merge into main can take down a production site, leak secrets, corrupt data. The friction is the safety net.
"LGTM — looks good, ship it." Reviewer is satisfied; you can merge.
Reviewer wants something fixed before approving. Address comments, push more commits, ask for re-review.
Non-blocking observations. "Nit: typo." "Question: why this approach?" Doesn't gate the merge.
Your tools — IDE, terminal, CLI
An IDE (Integrated Development Environment) is the editor you write code in, plus everything around it: file tree, terminal, debugger, git, search. VS Code is the dominant one. Cursor and Windsurf are AI-first IDEs built on top of VS Code's foundations.
The terminal is the text interface for typing commands at the operating system. Engineers spend a surprising amount of time here — sometimes more than in the editor itself. Same thing as "the command line" or "the shell."
A CLI (Command-Line Interface) is any tool you drive by typing. Git is a CLI. npm is a CLI. AWS, Stripe, Vercel, Cloudflare — they all have CLIs. Production tools usually have one because clicking through a UI doesn't scale.
Packages and dependencies
Almost no software is written from scratch. You assemble it from packages — reusable bundles of code published to a registry (npm for JavaScript, PyPI for Python, RubyGems for Ruby) that you install into your project.
The packages your project uses are its dependencies. They're listed in a manifest file: package.json for Node projects, requirements.txt or pyproject.toml for Python.
package.json (excerpt){ "name": "tasklane", "version": "0.1.0", "scripts": { "dev": "next dev", "build": "next build", "start": "next start" }, "dependencies": { "next": "^14.2.0", "react": "^18.3.0", "@prisma/client": "^5.16.0" }, "devDependencies": { "typescript": "^5.4.0", "tailwindcss": "^3.4.0" } }
Two things to notice. First, scripts defines commands you can run with npm run <name>. npm run dev starts the dev server. Second, dependencies are needed at runtime; devDependencies are needed only while you're developing. Same idea, different lifecycle.
Framework vs. library
Two words used loosely, often interchangeably, but with a real distinction worth holding:
- Library
- You're in charge. You reach in and call its functions when you need them. React is a library — you import it, you use it where you choose.
- Framework
- It's in charge. You fill in pieces it'll invoke. Next.js is a framework — it dictates the file structure, the routing, the build process; you write code in the slots it provides.
The line is fuzzy. The useful intuition: a framework opinionates more, asks more of you up front, gives more out of the box. A library is à la carte.
Environments — dev, staging, production
The same code runs in different places. Each place is an environment:
- Development (local)
- Your laptop. Where you write and test changes. Connects to a local database or a dev-only one.
- Staging
- Mirrors production but isn't customer-facing. Where you smoke-test before going live. Sometimes called "preview" or "QA."
- Production
- The live environment users actually hit. Sacred. Breaking it has consequences. Often shortened to "prod."
Each environment has its own database, its own secrets, its own URL. The same code, the same logic — but pointing at different data and different keys.
Product vocabulary — the acronyms
You'll hear these in roadmap meetings, in PRDs, in pitch decks, on Twitter. Knowing what each means lets you read the room:
| Acronym | Means | What it tells you |
|---|---|---|
| SaaS | Software as a Service | You pay a recurring fee instead of buying once. Stripe, Notion, Linear. |
| MVP | Minimum Viable Product | Smallest thing that delivers value and produces learning. Often abused. |
| SPA | Single Page Application | One HTML page; JS swaps content as you navigate. No full reload. |
| SSR | Server-Side Rendering | Server builds HTML per request. Better SEO and first paint. |
| SSG | Static Site Generation | HTML built at build time, not request time. Cheap, fast. |
| CSR | Client-Side Rendering | Server sends a near-empty shell; JS fetches and renders. |
| PRD | Product Requirements Doc | The "what we're building and why" document. |
| OKR / KPI | Objectives & Key Results / Key Performance Indicator | Goals and the numbers you measure them by. |
Repo shapes — monorepo vs. multiple repos
Two structures you'll meet:
- Polyrepo (multiple repos)
- One repo per project: frontend repo, backend repo, marketing-site repo. Clean boundaries, but cross-cutting changes touch many repos.
- Monorepo (one repo)
- Everything in one repo, in subfolders. Easier to refactor across boundaries. Tools like Turborepo and Nx exist to manage them. The choice has trade-offs that take experience to feel.
For a solo project or a small team, a single repo is almost always right. Monorepo or polyrepo as a question only matters once you have several projects that depend on each other.
Wrap-up
Jargon recap
- Repo
- A folder of code under version control; the source of truth.
- Branch / Commit
- A line of work / a saved snapshot with a message.
- PR (Pull Request)
- A proposal to merge a branch, where review happens.
- IDE / Terminal / CLI
- Editor / shell / tool driven by typed commands.
- Package / Dependency
- Reusable code bundle / a package your project uses.
- Framework / Library
- It's in charge / you're in charge.
- Environment
- A place the code runs — dev, staging, prod.
- SaaS / MVP / SPA / SSR / SSG / CSR
- Product and architecture acronyms — read the table above to recall.
You should now be able to
Mini-exercise
Open a public repo on GitHub (try github.com/vercel/next.js). Look at: the file tree, the package.json, the recent commits on main, an open pull request. Don't try to understand the code — just read the shape. Notice how the conversation in the PR feels.