Full-Stack Web Engineering Roadmap
This guide shows what to learn first, next, and later. Start with the web basics. Then learn JavaScript, React, and Next.js. After that, learn Node.js, APIs, and databases. Then learn tests, security, and deployment. At the end, learn system design and show one strong project.
What to Learn, in the Correct Order
Main rule: learn the easy base first. Do not learn React before HTML, CSS, and JavaScript. Do not learn Next.js before React. Do not learn TypeScript or Node.js before JavaScript. Do not learn an ORM before SQL. Each step makes the next step easier.
Foundation outcome
- Build a responsive site without a framework
- Write clear JavaScript and solve small problems
- Use DOM, events, fetch, and browser APIs
- Add safer types with TypeScript
Application outcome
- Build React UI with clear state and data flow
- Build a Next.js app with server and client parts
- Build a Node API with PostgreSQL
- Check login and access rules on the server
Engineering outcome
- Show test proof
- Use OWASP security checks
- Keep code in clear modules
- Measure speed and reliability before you decide
Production outcome
- Run the app with Docker and CI/CD
- Learn cloud identity, network, servers, and data
- Use logs, metrics, traces, and alerts
- Explain your design and trade-offs
How to Use This Guide
Every module in this guide works the same way. Watching a video is not enough. You must be able to use the skill, not just watch it.
Learn
- Learn the main ideas and words
- Write small code examples by hand
- Check new or strange behavior in the official docs
Build
- Build one small project or feature
- Test the normal case and the error cases
- Check it with DevTools, logs, and tests
Exit
- Can explain the idea in your own words
- Can build a basic version from an empty file
- Can find a common bug
Retain
- Write short notes. Do not copy the docs
- Practice again later. Solve problems
- Go back to an old project. Use a new idea in it
Understand → Build → Break → Debug → Test → Explain → Reuse
Engineering Workflow
Use this flow from day one. Use it together with the topics in this guide, not instead of them.
Requirement → Acceptance Criteria → Design → Implement → Test → Review → Release → Observe → Improve
Development Environment & Command Line
Before you write code, learn to use your computer well. Learn files, terminal commands, your editor, and package tools.
Learn
- Files, folders, paths, extensions
- Terminal: pwd/cd/ls/mkdir/cp/mv/rm basics
- Editor, extensions, integrated terminal
- Browser DevTools: Elements, Console, Network
- Node/npm install idea and version checks
- Environment variables concept
Build / Practice
- Create a project folder only from terminal
- Open it in editor, run a simple JS file
- Inspect a public webpage in DevTools
Exit Criteria
- Can move through files without the GUI
- Can run commands and read errors
- Can find browser console/network proof
Web Fundamentals
Learn how a browser turns a URL into a web page. This helps you understand both frontend and backend work.
Learn
- Client, server, request, response
- URL, origin, domain, DNS, IP, port
- HTTP methods, headers, body, status-code classes
- HTTPS/TLS concept
- Cookies, sessions and same-origin concept
- CORS: browser policy vs server configuration
- Cache basics and browser Network tab
Build / Practice
- Trace one request in DevTools
- Identify method, headers, status and payload
- Explain browser → server → response flow
Exit Criteria
- Can distinguish 401/403/404/500
- Can explain cookie vs request body
- Can diagnose basic CORS/network failures
Git & Version Control
Learn Git early. Every project after this will use Git to save history, try new ideas, and work with a team.
Learn
- Repository, working tree, staging area, commit
- init/clone/status/add/commit/log/diff
- .gitignore
- Branches, merge and conflict basics
- Remote, fetch, pull, push
- Undo/revert basics
- Pull request concept and reviewable changes
Build / Practice
- Put every mini-project in Git
- Create feature branch and merge it
- Recover from one intentional mistake
Exit Criteria
- Can read diff before commit
- Can work without committing secrets/build files
- Can explain branch → PR → merge workflow
HTML — Document Structure & Semantics
HTML is not a framework. It is the base of every web page. Learn HTML well before you learn JSX in React or Next.js.
Learn
- Document structure, head/body, metadata
- Semantic landmarks: header/nav/main/section/article/footer
- Headings, paragraphs, lists, links
- Images, audio/video basics and alt text
- Forms: label, input, select, textarea, button
- Native validation and form semantics
- Tables for tabular data
- ARIA awareness: native HTML first
- Basic SEO metadata and document outline
Build / Practice
- Multi-page content site
- Accessible registration/contact form
- Keyboard-only navigation test
Exit Criteria
- Uses semantic element by meaning, not appearance
- Form inputs have correct labels
- Page works without CSS/JavaScript
CSS — Layout, Responsive Design & Visual System
Learn CSS rules and layout first. Learn this before Tailwind or another CSS framework. If you skip this, CSS bugs become guesswork.
Learn
- Selectors, cascade, inheritance, specificity
- Box model, display and normal flow
- Units, sizing, overflow
- Typography, color, background and borders
- Flexbox and Grid
- Positioning, stacking context and z-index
- Pseudo-classes/elements and focus states
- Responsive design, media queries, fluid sizing
- CSS custom properties
- Transitions, animation basics, and reduced motion
Build / Practice
- Responsive dashboard or landing page
- Mobile, tablet, and desktop layouts
- Reusable spacing, type, and color tokens
Exit Criteria
- Can build layout without a UI framework
- Can debug overflow, flex, and grid issues
- Focus and responsive states are usable
JavaScript Core + Logic Building
This part has 25 steps. Keep the order. It teaches JavaScript, interview basics, logic, and problem solving in one clear path.
JavaScript Core + Logic Building · Final 25-Part Roadmap
Concept → Example → Dry Run → Practice → Logic Problem → Interview Question. A part is done only when you can write small code without help, guess its output, find a mistake in it, and explain it in your own words.
Phase A · Everyday JavaScript
Parts 1–11 are used a lot in real code. Learn how data moves through functions, arrays, and objects. Do not only memorize syntax.
01Variables
- What is a variable
- Variable declaration
- Variable initialization
- let
- const
- var
- Declaration vs initialization
- Reassignment
- Redeclaration
- let vs const vs var
- Variable naming rules
- camelCase convention
- Common variable mistakes
02Data Types
- What is a data type
- Primitive data types
- Non-primitive data types
- String
- Number
- Boolean
- Undefined
- Null
- BigInt
- Symbol basics
- Object
- typeof operator
- Dynamic typing
- null vs undefined
- Primitive vs object type
03Operators
- Arithmetic operators
- + operator
- - operator
- * operator
- / operator
- % modulus
- ** exponentiation
- Assignment operators
- Comparison operators
- >, <, >=, <=
- == vs ===
- != vs !==
- Logical AND &&
- Logical OR ||
- Logical NOT !
- Increment ++
- Decrement --
- Ternary operator
- Nullish coalescing ??
- Operator precedence
- Short-circuit evaluation
04Type Conversion, Coercion & Truthy/Falsy
- Explicit type conversion
- Implicit type coercion
- String()
- Number()
- Boolean()
- parseInt()
- parseFloat()
- Number conversion rules
- Boolean conversion rules
- Truthy values
- Falsy values
- false
- 0
- Empty string ""
- null
- undefined
- NaN
- NaN concept
- Number.isNaN()
- == coercion behavior
- Common coercion interview questions
05Conditions
- What is conditional logic
- if
- else
- else if
- Nested if
- Multiple conditions
- Logical operators in conditions
- switch
- case
- default
- break in switch
- Ternary conditions
- Short-circuit conditions
- Choosing if vs switch
- Common condition-based problems
06Loops
- What is iteration
- for loop
- while loop
- do...while
- for...of
- for...in
- Loop initialization
- Loop condition
- Loop update
- Nested loops
- break
- continue
- Infinite loops
- Loop dry run
- Choosing the correct loop
- Counting with loops
- Accumulating values with loops
- Pattern-based loop problems
07Functions
- What is a function
- Why functions are used
- Function declaration
- Function expression
- Arrow function
- Anonymous function
- Parameters
- Arguments
- Return statement
- Return value
- Default parameters
- Rest parameters
- Local variables
- Function calling
- First-class functions
- Callback functions
- Higher-order functions
- Passing functions as arguments
- Returning functions
- IIFE basics
- Recursion basics
- Pure function basics
- Function interview patterns
08Arrays
- What is an array
- Creating arrays
- Array indexes
- Accessing elements
- Updating elements
- Array length
- Nested arrays
- push()
- pop()
- shift()
- unshift()
- slice()
- splice()
- concat()
- includes()
- indexOf()
- lastIndexOf()
- join()
- reverse()
- sort()
- forEach()
- map()
- filter()
- find()
- findIndex()
- some()
- every()
- reduce()
- Array.isArray()
- Array iteration
- Array method chaining
- Common array interview problems
09Objects
- What is an object
- Creating objects
- Properties
- Key-value pairs
- Dot notation
- Bracket notation
- Adding properties
- Updating properties
- Deleting properties
- Nested objects
- Object methods
- Computed properties
- Property shorthand
- Object.keys()
- Object.values()
- Object.entries()
- Object.assign()
- hasOwnProperty()
- in operator
- Looping through objects
- Objects inside arrays
- Arrays inside objects
- Common object interview problems
10Strings & Common Methods
- What is a string
- Single quotes
- Double quotes
- Template literals
- String interpolation
- String length
- Character access
- Strings are immutable
- toUpperCase()
- toLowerCase()
- trim()
- trimStart()
- trimEnd()
- includes()
- startsWith()
- endsWith()
- indexOf()
- lastIndexOf()
- slice()
- substring()
- replace()
- replaceAll()
- split()
- concat()
- repeat()
- String comparison
- Common string problems
11Destructuring + Spread + Rest
- Array destructuring
- Object destructuring
- Default values
- Renaming destructured values
- Nested destructuring
- Skipping array elements
- Destructuring function parameters
- Spread syntax ...
- Spread with arrays
- Spread with objects
- Copying arrays using spread
- Copying objects using spread
- Merging arrays
- Merging objects
- Rest syntax
- Rest parameters
- Rest with arrays
- Rest with objects
- Spread vs rest
Phase B · Deep JavaScript + Interview Core
Parts 12–17 cover scope, hoisting, closures, this, and classes. These parts explain why JavaScript acts in its own way.
12Scope
- What is scope
- Global scope
- Function scope
- Block scope
- Lexical scope
- Scope chain
- Inner scope
- Outer scope
- Variable shadowing
- let scope
- const scope
- var scope
- Scope with functions
- Scope with blocks
- Common scope interview questions
13Hoisting + Temporal Dead Zone
- What is hoisting
- Variable hoisting
- var hoisting
- let hoisting
- const hoisting
- Function declaration hoisting
- Function expression hoisting
- Arrow function hoisting
- undefined during hoisting
- Temporal Dead Zone (TDZ)
- Why let/const behave differently
- Hoisting execution examples
- Common hoisting interview questions
14Closure
- What is closure
- Lexical environment
- Outer functions
- Inner functions
- Remembering outer variables
- Returning inner functions
- Private variables using closures
- Data hiding
- Closure with callbacks
- Closure inside loops
- Closure with counters
- Practical closure use cases
- Common closure interview problems
15this + Call + Apply + Bind
- What is this
- How this is determined
- this in global context
- this inside regular functions
- this inside object methods
- this inside arrow functions
- Lexical this
- this inside nested functions
- this inside callbacks
- this inside classes
- call()
- apply()
- bind()
- Setting this manually
- Function borrowing
- call vs apply
- call vs bind
- apply vs bind
- Common this interview questions
16Primitive vs Reference + Copying
- Primitive values
- Reference values
- Value assignment
- Reference assignment
- Comparing primitive values
- Comparing objects
- Mutation
- Immutability
- Reference sharing
- Shallow copy
- Deep copy
- Spread copy
- Object.assign()
- Array copy
- Nested object copy problem
- structuredClone()
- JSON stringify/parse cloning
- Limitations of JSON cloning
- Stack vs heap basic concept
- Common reference interview questions
17Prototype + Class + OOP
- Object-oriented programming basics
- Constructor functions
- new keyword
- Prototype
- prototype property
- Prototype chain
- Prototypal inheritance
- ES6 classes
- class syntax
- constructor()
- Instance
- Instance methods
- Static methods
- extends
- super
- Inheritance
- Encapsulation basics
- Polymorphism basics
- Getters
- Setters
- Private fields basics
- Class vs constructor function
- Class vs prototype
- Common OOP interview questions
Phase C · Errors, Async & Runtime
Parts 18–20 cover errors, Promises, async/await, and the event loop. These are key to understanding how real apps behave.
18Error Handling
- What is an error
- Syntax error
- Runtime error
- Logical error
- ReferenceError
- TypeError
- RangeError basics
- try
- catch
- finally
- throw
- Error object
- error.message
- error.name
- error.stack
- Creating custom errors
- Handling errors properly
- Debugging basics
- Common error interview questions
19Asynchronous JavaScript
- Synchronous JavaScript
- Asynchronous JavaScript
- Blocking vs non-blocking concept
- Callback
- Callback nesting
- Callback hell
- Promise
- Promise states
- Pending
- Fulfilled
- Rejected
- resolve()
- reject()
- then()
- catch()
- finally()
- Promise chaining
- Returning values from promises
- Error handling with promises
- async functions
- await
- async/await flow
- try/catch with async/await
- Promise.all()
- Promise.allSettled()
- Promise.race()
- Promise.any() basics
- Sequential vs parallel async tasks
- Common async interview questions
20JavaScript Execution Context + Event Loop
- JavaScript engine basics
- Execution context
- Global execution context
- Function execution context
- Creation phase
- Execution phase
- Variable environment
- Lexical environment basics
- Call stack
- Stack frames
- Memory heap basics
- JavaScript single-threaded behavior
- Runtime environment concept
- Event loop
- Callback queue
- Task queue
- Microtask queue
- Macrotask queue
- Promise microtasks
- setTimeout behavior
- Execution order
- Microtask vs macrotask
- Call stack + event loop relationship
- Common event loop interview problems
Phase D · Logic Building + Problem Solving
Parts 21–25 teach you how to break down a problem, find patterns, work with arrays and objects, and solve interview problems.
21Problem Solving Fundamentals
- Understanding the problem
- Identifying input
- Identifying output
- Identifying limits
- Breaking problem into smaller parts
- Thinking step-by-step
- Writing pseudocode
- Dry running
- Testing manually
- Finding edge cases
- Handling empty input
- Handling duplicate values
- Handling negative values
- Handling invalid cases
- Solving without coding first
- Brute-force thinking
- Improving a solution
- Debugging wrong logic
- Comparing multiple approaches
- Building logical thinking habits
22Logic Building Patterns
- Counter pattern
- Accumulator pattern
- Flag pattern
- Min tracking
- Max tracking
- Previous value tracking
- Current value tracking
- Searching pattern
- Filtering pattern
- Transformation pattern
- Comparison pattern
- Frequency counting
- Duplicate detection
- Unique value detection
- Nested loop thinking
- Multiple conditions
- State tracking
- Running total
- Early return pattern
- Breaking large logic into functions
23Array & String Problem Solving
- Traversing arrays
- Traversing strings
- Sum problems
- Average problems
- Minimum value
- Maximum value
- Second largest value
- Searching values
- Counting values
- Counting characters
- Counting words
- Frequency problems
- Duplicate detection
- Duplicate removal
- Unique values
- Reverse array
- Reverse string
- Palindrome problems
- Anagram basics
- Comparing arrays
- Comparing strings
- Filtering data
- Transforming data
- Sorting-based problems
- Nested array problems
- Flattening basics
- Chunking basics
- Rotating arrays basics
- Common interview-style array problems
24Object-Based Problem Solving
- Frequency maps
- Key-value lookup
- Counting using objects
- Character frequency with objects
- Word frequency with objects
- Grouping data
- Mapping IDs to values
- Lookup tables
- Objects inside arrays
- Arrays inside objects
- Array of objects problems
- Finding objects by property
- Filtering objects
- Sorting arrays of objects
- Grouping arrays of objects
- Transforming object data
- Nested object traversal
- Object + array combined logic
- Data aggregation
- Common object interview problems
25Algorithms & Problem-Solving Foundations
- What is an algorithm
- Why algorithms matter
- Time complexity basics
- Space complexity basics
- Big O notation
- O(1)
- O(n)
- O(n²)
- O(log n) basics
- Linear search
- Binary search
- Basic sorting concepts
- Bubble sort concept
- Selection sort concept
- Insertion sort concept
- Recursion
- Base case
- Recursive case
- Frequency counter pattern
- Multiple pointers
- Two pointers
- Sliding window basics
- Brute force
- Optimized solution thinking
- Comparing algorithm efficiency
- Choosing the right approach
- Interview problem-solving flow
Browser JavaScript & Web APIs
After core JavaScript, learn how JavaScript controls a web page in the browser. This step prepares you for React.
Learn
- DOM tree, document/window, element selection
- Create, update, and remove DOM nodes and attributes
- Events, addEventListener, bubbling, and delegation
- Forms, FormData, and client-side validation
- ES modules in browser
- JSON parse/stringify for data exchange
- Fetch API, Request/Response, and HTTP errors
- AbortController and cancel basics
- localStorage/sessionStorage and storage limits
- URL, timers, and common browser APIs
- DevTools debugging and network inspection
Build / Practice
- Vanilla JS CRUD/todo app
- Use a public JSON API with fetch
- Form validation plus loading, error, and empty states
Exit Criteria
- Can build interactive UI without React
- Understands how events move
- Can trace fetch request/response failures
TypeScript — Type-Safe JavaScript
TypeScript does not replace JavaScript. It checks types on top of JavaScript. Learn it after your JavaScript is strong.
Learn
- Type annotations and inference
- Primitive, object, array, and function types
- type vs interface
- Union, intersection, and literal types
- Narrowing and type guards
- unknown vs any; never basics
- Generics
- Utility types and keyof/typeof basics
- Optional, readonly, and nullability
- Modules and declaration basics
- tsconfig and strict mode
- Compile-time types vs runtime validation
Build / Practice
- Convert vanilla JS app to strict TS
- Type API data and functions
- Handle unknown external data safely
Exit Criteria
- Does not use any as a shortcut
- Can narrow unions safely
- Knows when runtime validation is still needed
React — Component & State Model
Learn React to build UI from components and state. Do not use it as a shortcut before you know the DOM.
Learn
- Components, JSX, props, and composition
- Conditional rendering and list keys
- Events and state
- State as a snapshot; update patterns
- Update objects and arrays safely
- Controlled forms
- Lifting state and one source of truth
- Reducer and Context when the app gets complex
- Refs
- Effects for outside systems, not normal data flow
- Custom hooks
- React DevTools and component debugging
Build / Practice
- Search/filter CRUD UI
- Form with validation and derived state
- API-backed React app
Exit Criteria
- Can decide what should be state
- Can share state without duplicate data
- Does not use effects for values it can calculate during render
Next.js — React Application Framework
Learn Next.js after React. Learn routes, server parts, client parts, data loading, and deployment. Use the current App Router model.
Learn
- App Router project structure
- Pages, layouts, and nested routes
- Linking and navigation
- Server vs Client Components
- Server-side data fetching
- Caching and revalidation basics
- Server Actions and form changes
- Route Handlers for HTTP endpoints
- loading, error, and not-found boundaries
- Metadata/SEO
- Environment variables and secrets
- Authentication and deployment basics
Build / Practice
- Dashboard with protected routes
- Server-loaded list + form mutation
- Loading/error/not-found handling
Exit Criteria
- Can explain why a component is server or client
- Can choose where data should load
- Does not expose server secrets to the client bundle
Frontend Quality & Accessibility
Accessibility is not the last step. Practice it from the start, with HTML. This module turns it into a quality check for your React or Next.js UI.
Learn
- Semantic HTML first; ARIA only when needed
- Keyboard navigation and visible focus
- Accessible names, labels and error messaging
- Focus management after dynamic changes
- Color contrast and reduced motion awareness
- Responsive behavior and touch target usability
- Loading, empty, error, forbidden, submitting and success states
- WCAG 2.2 awareness and automated/manual checks
Build / Practice
- Audit your React/Next feature by keyboard
- Run accessibility tooling + manual checks
- Fix focus/error-state problems
Exit Criteria
- Core flow usable without mouse
- Form errors are understandable
- Dynamic UI does not lose focus/context
Node.js Runtime & npm
Node.js runs JavaScript outside the browser. Learn modules, async I/O, and processes before you use a backend framework.
Learn
- Node vs browser runtime
- npm/package.json/scripts/lockfile
- ESM and CommonJS basics
- process, environment variables, and arguments
- fs/path basics
- Async I/O and event-loop basics
- Node HTTP server basics
- Streams and buffers basics
- Error handling and process lifecycle
- Debugging and built-in test runner basics
Build / Practice
- CLI utility reading/writing files
- Small HTTP server without framework
- Environment-based config
Exit Criteria
- Can explain Node vs browser APIs
- Can read package.json and npm scripts
- Knows why blocking CPU work makes a server slow
Backend & API Engineering
After Node basics, pick one HTTP framework. You do not need Express, Fastify, and Nest all at once. Learn the ideas first.
Learn
- Routes/endpoints and HTTP methods
- Request params/query/headers/body
- Keep route code and business logic separate
- Middleware, pipes, and guards basics
- Input validation and safe output
- Correct status codes and clear errors
- Pagination, filtering, and sorting
- One place to handle errors
- Configuration and secret boundaries
- Structured logging and request IDs
- OpenAPI/API docs basics
- REST basics; version only when needed
Build / Practice
- CRUD API with checked inputs
- Error format + pagination
- OpenAPI/README endpoint contract
Exit Criteria
- API is predictable for clients
- Business rules are not hidden in route handlers
- Invalid input fails safely and clearly
SQL Fundamentals
Learn tables and SQL before you learn an ORM. When you understand the database itself, you understand what the ORM is really doing.
Learn
- Tables, rows, columns and relational thinking
- CREATE/ALTER basics
- INSERT, SELECT, UPDATE, DELETE
- WHERE, ORDER BY, LIMIT/OFFSET
- INNER/LEFT JOIN
- GROUP BY, aggregates and HAVING
- Subqueries and CTE basics
- Transactions concept
- Indexes concept and query cost awareness
Build / Practice
- Design small relational dataset
- Write joins and aggregate reports
- Wrap multi-step write in transaction
Exit Criteria
- Can write common queries without ORM
- Can explain join result
- Knows why transaction is needed
PostgreSQL & Data Modeling
After SQL, learn PostgreSQL. Learn table design, data rules, indexes, and how to run a real database.
Learn
- Data types and good type choice
- Primary/foreign keys
- NOT NULL, UNIQUE, and CHECK rules
- One-to-one, one-to-many, and many-to-many
- Normal tables and when to combine data
- Transactions and isolation basics
- Indexes: single and composite basics
- EXPLAIN and query-plan basics
- JSONB awareness, not default table design
- Backup, restore, and connection basics
Build / Practice
- Schema for users, projects, or orders
- Add rules that block bad data
- Compare query plan with and without an index
Exit Criteria
- Database protects important rules
- Can explain relationships and indexes
- Can explain the transaction boundary
Data Access, ORM & Migrations
An ORM saves time. It does not replace SQL. Pick one ORM. Learn to check the SQL it creates.
Learn
- Repository/data-access boundary
- Schema/model mapping
- Relations and transactions
- Migrations and migration history
- Seed/test data
- N+1 query problem
- Raw SQL when the ORM is not enough
- Connection pooling basics
- Safe production migration and rollback basics
Build / Practice
- Connect API to PostgreSQL
- Create and apply migration
- Inspect generated SQL for one complex query
Exit Criteria
- Can debug ORM problem at SQL level
- No schema change without migration
- Understands multi-step writes in a transaction
Authentication & Authorization
A login screen is not full security. First check who the user is. Then check what the user can do.
Learn
- Authentication vs authorization
- Password hashing and safe credential storage
- Cookie/session model
- Token/JWT model and trade-offs
- OAuth 2.0 / OpenID Connect basics
- Role-based and owner-based access rules
- Tenant/user scoping
- Secure cookie flags and session expiry
- Password reset and email verification basics
- MFA awareness
- Server-side checks: never trust hidden UI
Build / Practice
- Sign in/sign out flow
- Protected API route
- Owner and tenant access tests
Exit Criteria
- Can explain 401 vs 403
- Cannot access another user's resource by ID change
- Auth state expires and revokes clearly
Full-Stack Integration
Here, you connect frontend, backend, database, and login in one feature. This is your first real full-stack proof.
Learn
- UI form → request → validation → service → DB → response → UI
- Shared API rules without tight links
- What the client checks and what the server checks
- Credentials, cookies, and CORS in a real flow
- Loading, empty, error, forbidden, submitting, and success states
- Optimistic update only when rollback is clear
- File upload basics and size/type limits
- Debug across Network → server logs → DB
Build / Practice
- Authenticated CRUD feature end-to-end
- Search/filter/pagination
- Trace one failure across all layers
Exit Criteria
- Can find the bug layer quickly
- UI states match server results
- Data stays saved and permissions stay correct
Testing Strategy
A high test number is not the real goal. The real goal is to test the important, risky parts of your app.
Learn
- Unit tests for isolated logic
- Integration tests for API + DB boundaries
- End-to-end tests for critical user journeys
- Regression test for fixed bugs
- Test data/factories and DB isolation
- Mock external boundaries, not everything
- Frontend interaction/accessibility checks
- Deterministic tests and useful assertions
- Coverage as signal, not target by itself
Build / Practice
- Test business calculation/validation
- Test protected API with real test DB
- E2E login → create → view flow
Exit Criteria
- Critical rules fail tests when broken
- Bug fix gets regression proof
- Tests are stable and readable
Application Security
Security starts when you design your app. Use OWASP Top 10:2025 and ASVS as checklists.
Learn
- Broken access control and least privilege
- Security misconfiguration
- Dependency and supply-chain risks
- Cryptography and secret-handling basics
- Stop injection with parameterized queries
- Secure design and threat modeling basics
- Authentication failure patterns
- Safe update pipeline basics
- Security logging and alerts
- Safe error handling
- XSS, CSRF, CORS, and security headers
- Rate limits and abuse controls
Build / Practice
- Threat-model one feature
- Access-control negative tests
- Dependency, secret, and security-header check
Exit Criteria
- Cannot bypass access by changing the client
- Secrets are not stored in source or client code
- Security failures are logged safely
Software Design & Maintainability
Memorizing many design patterns will not make code easy to change. Clear structure and readable code will.
Learn
- Separate different jobs in code
- Keep related code together; avoid tight links
- Small focused functions/modules
- Business logic vs UI, API, and data code
- Dependency direction
- Configuration and side-effect boundaries
- Error model and validation boundaries
- Refactoring with tests
- Composition before unnecessary inheritance
- Modular monolith as a good starting architecture
- Use patterns only when they solve repeated problems
Build / Practice
- Refactor one large feature into clear modules
- Move business logic out of controller/component
- Document one design decision
Exit Criteria
- You know where to make a change
- Core rules can be tested without booting the full app
- Can explain why the boundary exists
Performance & Reliability
Do not guess when code is slow. Measure it. Find the slow part. Fix it. Measure again.
Learn
- Response time, traffic capacity, and resource use
- Frontend payload, render, and network basics
- API timing and database query timing
- Indexes and N+1 diagnosis
- Pagination and batching
- Caching and invalidation trade-offs
- Timeouts, retries, and backoff
- Idempotency: safe retry without duplicate writes
- Health/readiness checks
- Load testing basics
- Failure modes and graceful fallback
Build / Practice
- Measure a slow endpoint
- Improve query or network bottleneck
- Add timeout, retry, or idempotency when needed
Exit Criteria
- Has before/after measurements
- Can explain failure behavior
- No retry plan that repeats unsafe writes
Linux & Runtime Operations
To fix problems on real servers and containers, you need basic Linux skills.
Learn
- Filesystem and paths
- Users/groups and permissions
- Processes, signals and exit codes
- Ports and basic network inspection
- Environment variables
- stdout/stderr and log files
- CPU/memory/disk inspection basics
- SSH concept and safe remote access
- Package/service manager awareness
Build / Practice
- Run Node app as process
- Find which process owns a port
- Inspect logs and stop process safely
Exit Criteria
- Can investigate “app not running” basics
- Understands permission errors
- Can inspect runtime environment safely
Docker & Containers
A container packages your app so it can run anywhere. Think of it as a process with its own files and network, not just “a small virtual machine.”
Learn
- Image vs container
- Dockerfile and image layers
- Build cache and .dockerignore
- Ports and networking
- Environment/config
- Volumes and persistence
- Docker Compose for multi-container local stack
- Multi-stage builds
- Health checks and non-root awareness
- Registry/image publishing concept
Build / Practice
- Containerize app
- Compose app + PostgreSQL
- Rebuild after dependency/source change
Exit Criteria
- Fresh machine can run stack predictably
- Database data persists intentionally
- Secrets are not baked into image
CI/CD & Release Workflow
Do not deploy by hand every time. Deployment should be a clear process you can repeat, check, and undo.
Learn
- CI trigger and pipeline stages
- Install from lockfile
- Lint/typecheck/test/build gates
- Artifacts/images
- Secrets in CI
- Environment-specific configuration
- Database migration sequencing
- Deployment strategy basics
- Rollback/revert
- Protected branches/review gates
Build / Practice
- PR pipeline: lint + typecheck + tests
- Build/publish container
- Deploy test environment and rollback once
Exit Criteria
- Broken build cannot deploy silently
- Secrets not printed in logs
- Rollback path is tested, not assumed
AWS Foundations
Knowing service names is not enough. Learn how identity, network, servers, data, storage, and traffic really work together.
Learn
- IAM: users/roles/policies/least privilege
- Region/AZ and availability concepts
- VPC/subnet/security-group basics
- Compute options and deployment target
- Managed PostgreSQL/RDS concept
- S3/object storage
- Load balancer and DNS/TLS concepts
- Secrets/config management
- Scaling and backup basics
- Cost visibility and tagging awareness
- AWS Well-Architected six pillars awareness
Build / Practice
- Deploy app + managed database
- Store uploaded/static files correctly
- Restrict permissions and network exposure
Exit Criteria
- Can draw traffic path
- Knows which identity can access what
- Has backup/recovery and cost awareness
Observability & Production Operations
You cannot fix real bugs by guessing. Use logs, metrics, and traces to see what the app is doing.
Learn
- Structured logs and log levels
- Request/correlation IDs
- Metrics: latency, traffic, errors, saturation
- Distributed tracing basics
- Dashboards and useful alerts
- SLI/SLO basics
- Health checks
- Incident triage and timeline
- Review after an incident and next actions
- Avoid sensitive data in logs
Build / Practice
- Log requests/errors with correlation ID
- Dashboard basic latency/error metrics
- Simulate failure and investigate
Exit Criteria
- Can answer “what failed and where?” from logs and metrics
- Alerts match real user or system impact
- Incident review creates clear follow-up work
System Design & Software Architecture
Good system design is not copying diagrams. It means you design from real needs, real data, and real limits.
Learn
- What the system must do and how well it must work
- Traffic, data size, read, and write estimates
- API and data-model choices
- Horizontal and vertical scaling basics
- Cache, CDN, queue, and object storage
- Data consistency, concurrent users, and safe retries
- Failure modes and backups
- Database scaling basics
- Module and service boundaries
- Modular monolith vs microservices trade-offs
- ADR: context, options, decision, result
- Security, reliability, performance, and cost trade-offs
Build / Practice
- Design your flagship app at 10× scale
- Write one ADR
- Explain bottleneck → next step
Exit Criteria
- Starts simple and scales with proof
- Can explain trade-offs, not just components
- Failure and recovery behavior is clear
Team Delivery, Requirements & SDLC
This is the non-coding part of the job. Solve the right problem, explain changes clearly, and release safely.
Learn
- User/problem statement
- Scope, limits, and acceptance criteria
- Break work into reviewable tasks
- Estimate work and explain uncertainty
- PR description and code review
- Technical docs and README
- Status and blocker updates
- Release notes and migration notes
- Incident communication and learning
- Ownership after release
Build / Practice
- Write acceptance criteria before a feature
- PR-style summary + test proof
- Short architecture/release note
Exit Criteria
- Another engineer can review or change your feature
- Risk and test proof are visible
- Blockers are shared early and clearly
AI-Assisted Engineering
AI can help you work faster. But you are still responsible for correct and safe code.
Learn
- Give requirements, limits, and useful context
- Use AI for drafts, explanations, tests, and refactor ideas
- Inspect diffs; do not accept large changes blindly
- Check APIs and library versions in official docs
- Run code, tests, typecheck, and security checks
- Do not paste secrets or private data unless needed
- Ask for edge cases and failure modes
- Keep a human decision note for big design changes
Build / Practice
- AI-assisted feature with a written check list
- Reject or fix one wrong AI suggestion
- Compare AI draft with official docs
Exit Criteria
- Can explain every merged change
- AI output has a separate check
- Tool does not replace your fundamentals
AI Application Engineering (optional path)
After your core skills are strong, learn AI features only if your project needs them.
Learn
- Model API and capability choice
- Prompt and instruction boundaries
- Structured outputs
- Tool/function calling
- Embeddings/RAG basics
- Grounding and source display
- Small eval sets and regression checks
- Prompt injection and data leak awareness
- Latency, cost, and fallback behavior
- Human review for high-impact actions
- Logs and observability without sensitive data
Build / Practice
- One bounded AI feature
- Small eval set with pass/fail criteria
- Failure/fallback path
Exit Criteria
- Quality is measured, not only “looks good”
- Permissions are checked outside model text
- Cost, latency, and failures are visible
Flagship Full-Stack Project
Use everything from this guide in one project. One deep, well-built project is better than many small demos.
Core Scope
- Responsive accessible UI
- React/Next.js frontend
- Node API and business logic
- PostgreSQL + migrations
- Authentication + access rules
- Search/filter/pagination
- Useful error/loading/empty states
Engineering Proof
- Unit/integration/E2E tests
- Security checklist and negative auth tests
- Docker + CI/CD
- Cloud deployment
- Logs/metrics
- Architecture diagram + ADR
Presentation Proof
- Clear README and setup
- Live demo/screenshots
- Data model/API docs
- Trade-offs and known limits
- One production-style incident/debug story
Job-Ready Evidence
Reading every topic is not enough to be job-ready. You need proof: you can build things, fix things, and explain things on your own.
Learn Later — Not Needed for Core Full-Stack Skill
| Topic | Know now | Learn deeply when |
|---|---|---|
| Kubernetes | Container orchestration idea | You run many services and need orchestration. |
| Terraform / IaC | Infrastructure-as-code idea | You manage cloud setup many times. |
| Kafka / RabbitMQ | Queue/event ideas | You need async jobs, retries, or events. |
| GraphQL | API alternative awareness | Your product needs it. |
| Microservices | Trade-offs and service boundaries | Separate scale, teams, or deployments are real needs. |
| Advanced DSA | Finish JS Part 25 first | Your interview target needs trees, graphs, or DP. |
Core Technical Terms
| Term | Meaning in this guide |
|---|---|
| HTTP | How browsers and APIs send requests and get responses. |
| DOM | The browser's object model of an HTML page. |
| API | A clear way for software parts to talk to each other. |
| REST | A common HTTP API style based on resources. |
| DB / SQL | Database / language used to read and change relational data. |
| ORM | A tool that maps code objects to database tables and queries. |
| AuthN / AuthZ | Authentication = who you are. Authorization = what you can access or do. |
| CI/CD | Automated checks and deployment flow. |
| Observability | Seeing app behavior through logs, metrics, and traces. |
| SLI / SLO | Reliability signal / reliability target. |
| ADR | Architecture Decision Record: context, options, decision, result. |
| RAG | Retrieval-Augmented Generation: find useful sources before model output. |
Official Sources Used to Validate the Learning Order
Framework versions change over time. When you reach a module, check the official docs again to make sure everything is still correct.