Codebase là gì? Toàn bộ code của dự án — 'kho tài liệu' bạn sở hữu khi thuê dev

Codebase là toàn bộ source code + cấu hình + dependencies của một phần mềm. Hiểu codebase giúp bạn đánh giá agency, đòi đúng quyền sở hữu, biết khi nào pivot sang stack mới và đo được 'sức khoẻ' dự án dev của mình.

12 phút đọcCập nhật 2026-05-22
Nghe bài viết
Để Claude đọc bài cho bạn — vừa nghe vừa làm việc khác
Mục lục bài viết(12)
Cấu trúc codebase điển hình của một dự án Next.js — folder app/components/lib/content, file package.json, next.config.ts, .env

Cấu trúc codebase điển hình của một dự án Next.js: folder source code (app, components, lib, content), file cấu hình (package.json, next.config.ts), file secret (.env, không commit). node_modules/ KHÔNG tính là codebase vì sinh tự động qua npm install. Đây là codebase thực của vietcodex-app — 1 repository chứa cả landing site, wiki, admin và API.

Hiểu đơn giản nhất

Codebase = toàn bộ code (mã nguồn) tạo nên một phần mềm.

Tưởng tượng bạn mở một quán cà phê. Để vận hành quán, bạn cần một tủ tài liệu chứa:

  • Menu món
  • Công thức pha chế từng món
  • Quy trình đón khách
  • Danh sách nguyên liệu + nhà cung cấp
  • Hợp đồng thuê mặt bằng + giấy phép

Tủ tài liệu này không phải là quán cà phê — quán phải có khách, có nguyên liệu, có nhân viên mới chạy được. Nhưng nếu thiếu tủ, bạn không thể mở quán mới ở chi nhánh khác, không thể onboard nhân viên mới, không thể đảm bảo chất lượng đồng đều.

Codebase chính là tủ tài liệu đó nhưng cho phần mềm. Phần mềm chạy được nhờ codebase + server + database + người dùng. Mất codebase = bạn không sửa được bug, không thêm tính năng mới, không deploy ở môi trường khác.

Tại sao bạn cần biết

  • Đánh giá agency dev trước khi ký hợp đồng. Hỏi "Tôi có quyền sở hữu codebase sau khi thanh toán đủ không?" — câu trả lời "không" hoặc "ờm" là red flag.
  • Đòi đúng tài sản khi hand-off. Khi dự án kết thúc, bạn cần codebase + tài liệu deploy + database schema — không phải link admin panel.
  • Quyết định khi nào pivot stack. Codebase 50.000 dòng PHP 5.6 → cost migrate sang Node.js là bao nhiêu? Cần biết size mới ước được.
  • Đo "sức khoẻ" dự án. Test coverage, build time, số bug/tháng — đều xuất phát từ codebase.
  • Hiểu chi phí maintenance. Codebase to + cũ + ít test = chi phí maintenance cao. Codebase nhỏ + modern + nhiều test = nhanh thêm tính năng mới.
  • Chuyển agency dễ hơn. Codebase có docs + convention rõ ràng → agency mới onboard 1 tuần. Codebase "tribal knowledge" (chỉ dev cũ hiểu) → mất 1-3 tháng + nhiều bug.

Codebase chứa những gì

Một codebase điển hình của dự án web 2026 có 6 nhóm file:

NhómVí dụ fileMục đích
Source code.ts, .tsx, .css, .py, .goLogic chính của ứng dụng
Cấu hìnhpackage.json, tsconfig.json, next.config.tsKhai báo dependencies + build settings
Content/assetẢnh, MDX, JSON data, font, videoNội dung tĩnh người dùng thấy
Test*.test.ts, *.spec.ts, e2e/Kiểm thử tự động
Tài liệuREADME.md, docs/, CONTRIBUTING.mdHướng dẫn cho dev
Script + toolingscripts/, .github/workflows/, DockerfileTự động hoá build, deploy, CI

Có một số thứ KHÔNG được tính là codebase:

ItemTại sao KHÔNGỞ đâu
node_modules/Sinh tự động qua npm install từ package.jsonĐọc từ npm registry
Database dataCode không chứa data — chỉ chứa schema (cấu trúc)DB server
.env (secrets)Bí mật, không commit công khaiFile riêng trên server
dist/, .next/ (build output)Sinh từ source code, có thể tạo lạiLocal hoặc CI
Log file .logSinh runtime, không phải codeServer hoặc log aggregator

Cấu trúc codebase điển hình (Next.js)

Đây là cấu trúc của vietcodex-app (chính là codebase của trang bạn đang đọc):

vietcodex-app/
├── app/                        # Routes + pages (Next.js App Router)
│   ├── (marketing)/            # Trang chủ, dịch vụ, bảng giá
│   ├── (wiki)/                 # Wiki — chỗ này
│   ├── admin/                  # Admin panel
│   └── api/                    # API endpoints
├── components/                 # React components dùng chung
│   ├── ui/                     # Button, Input, Card, ...
│   ├── wiki/                   # Sidebar, TOC, search modal
│   └── marketing/              # Hero, pricing card, ...
├── lib/                        # Logic + helper
│   ├── auth.ts                 # Đăng nhập (better-auth)
│   ├── db.ts                   # Kết nối Postgres (Drizzle ORM)
│   ├── brand.ts                # Thông tin brand (color, logo, slogan)
│   └── wiki/                   # Helper riêng cho wiki (mdx parse, tree)
├── content/                    # Content tĩnh (MDX)
│   └── wiki/
│       ├── co-ban/             # 23 bài Cluster 1
│       └── ai-coding/          # 11 bài Cluster 2
├── public/                     # Asset tĩnh (ảnh, SVG, robots.txt)
├── scripts/                    # Tool build (search index, ...)
├── drizzle/                    # DB schema + migration
├── package.json                # Dependencies + scripts
├── next.config.ts              # Cấu hình Next.js
├── docker-compose.yml          # Setup local dev
├── Dockerfile                  # Build image production
└── README.md                   # Hướng dẫn setup

Tổng số file: ~520 (không tính node_modules). Tổng dòng code: ~28.000 (TypeScript + MDX + CSS). Dependency count: 42 (production) + 18 (dev). Build time: ~85 giây (Next.js build production).

Mỗi folder có mục đích riêng — đây là convention (quy ước chung) của hệ sinh thái Next.js. Dev mới vào project Next.js bất kỳ sẽ thấy cấu trúc tương tự → onboard nhanh.

Codebase nhỏ vs lớn — đo bằng số nào

Quy môLOC (dòng code)FileDev teamVí dụ
Tiny< 1.000< 201Script automation, landing đơn giản
Small1.000-10.00020-2001-3Marketing site, MVP
Medium10.000-50.000200-1.5003-10SaaS giai đoạn early, e-commerce nhỏ
Large50.000-200.0001.500-5.00010-50SaaS đã có khách, mid-size product
Enterprise200.000-1.000.0005.000-30.00050-500Banking app, ERP, lớn corp
Hyperscale> 1.000.000> 30.000> 500Google Search, Facebook, Stripe core

So sánh ngữ cảnh thực tế:

  • Linux Kernel (2026): ~30 triệu LOC, ~80.000 file. Codebase open-source lớn nhất.
  • Chromium (Chrome browser): ~35 triệu LOC.
  • Windows (rumour): ~50 triệu LOC.
  • WordPress core (CMS): ~700.000 LOC.
  • Next.js framework: ~250.000 LOC.

Codebase startup VN giai đoạn pre-Series A thường 20.000-80.000 LOC — không cần quá to để build được sản phẩm tốt.

Monorepo vs Polyrepo

Hai mô hình tổ chức codebase phổ biến:

Yếu tốMonorepo (1 repo nhiều project)Polyrepo (mỗi project 1 repo)
Code chung (UI, types)Dễ share — import trực tiếpPhải publish package (npm)
Atomic commit (sửa nhiều project cùng PR)Không, phải 2-3 PR riêng
CI/CD complexityCao — cần biết file nào đổi để build subsetThấp — mỗi repo CI riêng
Build timeCó thể chậm nếu không cacheNhanh, mỗi repo độc lập
Onboard dev mớiClone 1 repo là xongPhải clone N repo
Tool supportTurborepo, Nx, pnpm workspace, LernaNative Git, không cần tool
Phù hợpTeam > 10 dev, share code chung nhiềuTeam nhỏ, mỗi service độc lập
Ví dụGoogle (1 monorepo 2 tỷ LOC), Meta, vietcodex.comNetflix (microservices polyrepo)

Cảnh báo: Đừng dùng monorepo cho dự án nhỏ chỉ vì "trông pro". Polyrepo đơn giản hơn cho 90% startup VN.

Đánh giá health codebase — 8 chỉ số

Khi audit một codebase (của agency, của dự án bạn đang maintain, hoặc trước khi quyết định mua lại 1 startup), kiểm tra 8 thứ:

Chỉ sốTốtĐáng loCách đo
Test coverage> 60%< 20%npm test -- --coverage
Build time< 2 phút> 10 phúttime npm run build
Dependencies outdated< 10%> 30%npm outdated
Security vulnerabilities0 high/critical> 5 highnpm audit
Linter errors0> 100npm run lint
TypeScript errors0> 50tsc --noEmit
README + docsCó, < 3 tháng updateKhông có hoặc cũ > 1 nămĐọc bằng mắt
Last commit< 1 tuần> 6 thángGit log

Một codebase 30.000 LOC nhưng đầy lỗi linter + dependency cũ 2 năm = cost maintenance gấp 3 lần codebase 60.000 LOC sạch sẽ + có test.

Ví dụ thực tế: codebase vietcodex-app

Codebase trang bạn đang đọc — số liệu cụ thể tháng 5/2026:

Chỉ sốGiá trị
LOC (TypeScript + MDX)~28.000
File520
Dependencies (prod)42
Dependencies (dev)18
Build time85 giây
Bundle size (sau gzip)~340 KB
Test coverage32% (cần cải thiện)
TypeScript errors0
Linter errors0
Security vulnerabilities0
Repo size (không node_modules)28 MB
Last commit< 24 giờ

Codebase này phục vụ 3 site cùng lúc qua 1 build:

  • vietcodex.com (marketing)
  • wiki.vietcodex.com (chỗ bạn đang đọc)
  • admin.vietcodex.com (CMS nội bộ)

Đây là monorepo nhẹ — KHÔNG dùng Turborepo, chỉ phân chia qua route group của Next.js App Router. Hợp lý vì 1 team, code chung nhiều (UI components, brand config, auth).

Cái gì có thể sai

Vấn đềTriệu chứngCách phòng
Tech debt tích tụMỗi tính năng mới mất gấp đôi thời gian dự kiếnDành 20% sprint cho refactor + viết test
Không ai sở hữu codebaseBug rớt giữa team A và team B, không ai sửaCODEOWNERS file (GitHub) + on-call rotation
Documentation cũ hơn codeOnboard dev mới mất 1 tháng, hỏi suốtREADME + ADR (Architecture Decision Record) update theo PR
Dependencies cũ 2-3 nămSecurity risk + không nâng cấp được frameworkRenovate Bot tự tạo PR upgrade hàng tuần
Codebase "lock" bởi agencyKhông deploy được nếu thiếu agencyHợp đồng ghi rõ chuyển giao + deploy thử trước khi thanh toán cuối
Secret commit nhầm vào codebaseAPI key bị hacker dùng.gitignore .env* + gitleaks pre-commit hook
Dead code (code không ai gọi)Bundle to + dev confusedTool knip, ts-prune scan định kỳ
Coupling cao giữa các moduleSửa A → B C D đều hỏngArchitecture review hàng quý + giảm dependency graph

Codebase ownership — câu hỏi pháp lý quan trọng

Khi thuê agency làm web/app/SaaS, ai sở hữu codebase sau khi xong?

Mặc định theo Luật SHTT Việt Nam (Điều 27 Luật SHTT 2005, sửa 2022):

Tác giả của tác phẩm phái sinh (code do dev viết theo yêu cầu) có quyền tài sản đối với tác phẩm — TRỪ KHI hợp đồng quy định khác.

Dịch ra: agency mặc định giữ bản quyền nếu hợp đồng không nói gì. Bạn chỉ có quyền sử dụng (license), không có quyền chuyển nhượng / bán / sửa cho dùng đa mục đích.

Để bảo vệ mình, hợp đồng dịch vụ dev phải có 3 điều khoản:

  1. Chuyển giao toàn bộ quyền sở hữu trí tuệ (intellectual property — quyền sở hữu trí tuệ) đối với source code sau khi thanh toán đủ 100%.
  2. Bàn giao đầy đủ: source code (GitHub repo về account khách), tài liệu deploy, database schema, môi trường staging.
  3. Quyền tự deploy + tự thuê agency khác sửa mà không cần xin phép.

VietCodex luôn dùng pattern: push code lên GitHub account KHÁCH ngay từ commit đầu tiên — khách thấy progress realtime + sở hữu code 100% từ ngày 1 (không phải đợi xong dự án mới hand-off).

Tóm tắt 1 dòng

Codebase = toàn bộ code + config + content + test + docs của một dự án phần mềm. Lưu trong repository Git. KHÔNG bao gồm node_modules (sinh tự động), data DB (riêng), secrets (.env). Khi thuê dev, ĐÒI sở hữu codebase rõ ràng trong hợp đồng — không có codebase thì không có quyền sửa/deploy/chuyển agency.

Đọc tiếp

Câu hỏi thường gặp

Codebase và repository khác nhau ở đâu?
Codebase = toàn bộ code của một sản phẩm/dự án ở khía cạnh nội dung (file, folder, dòng code). Repository (repo) = nơi LƯU codebase đó cộng lịch sử Git (commit, branch, tag). 1 codebase = 1 repo là phổ biến nhất. Nhưng 1 codebase có thể nằm trong nhiều repo (microservices, mỗi service 1 repo), hoặc nhiều codebase nằm trong 1 repo (monorepo). Khi nói 'cho tôi xem codebase', dev hiểu là show source code (qua GitHub URL = repo). Hai từ thường thay thế nhau trong giao tiếp đời thường, nhưng kỹ thuật thì khác.
Codebase do ai sở hữu khi tôi thuê agency làm web?
Theo luật Việt Nam (Luật SHTT 2005, sửa 2022) — agency giữ bản quyền NẾU hợp đồng KHÔNG ghi rõ chuyển giao. Để đảm bảo bạn sở hữu codebase: (1) Hợp đồng phải có điều khoản 'chuyển giao toàn bộ quyền sở hữu source code sau khi thanh toán đủ'; (2) Yêu cầu agency push code lên GitHub account của BẠN, không phải của họ; (3) Nhận source code đầy đủ + tài liệu deploy lúc hand-off; (4) Có quyền tự build và chạy không cần agency. Agency rẻ thường lock code (chỉ deploy trên server họ) — đây là red flag lớn. VietCodex luôn chuyển code về repo khách hàng ngay từ commit đầu.
Codebase có chứa data người dùng không?
KHÔNG. Codebase chỉ chứa 'logic' (code), KHÔNG chứa data thực. Data người dùng nằm trong [database](/wiki/co-ban/database-la-gi) (DB) — riêng biệt với code. Khi backup codebase = backup logic + cấu trúc schema. Khi backup DB = backup dữ liệu user. Hai loại backup phải tách riêng, lịch khác nhau (code: mỗi commit; DB: hàng ngày/giờ). File secret như API key, password DB nằm trong `.env` — KHÔNG commit vào codebase, lưu riêng trên server.
Khi nào codebase 'quá to' cần tách hoặc refactor?
Triệu chứng (signal) codebase đang gặp vấn đề: (1) Build time > 5 phút — quá lâu, dev mất focus; (2) > 50.000 dòng code cho 1 module — khó nắm hết; (3) Bug fix 1 chỗ tạo bug 3 chỗ khác — coupling cao; (4) Dev mới onboard > 2 tuần mới làm gì đó được; (5) Test suite chạy > 10 phút. Khi gặp ≥2 trong 5 dấu hiệu → cân nhắc refactor (tái cấu trúc — viết lại không thay đổi behavior) hoặc tách module. Codebase startup giai đoạn early bình thường 5.000-30.000 dòng, scale-up 100.000-500.000, enterprise có thể > 1 triệu dòng.
Monorepo hay polyrepo — chọn cái nào cho dự án mới?
**Polyrepo** (mỗi service 1 repo) đơn giản nhất cho dự án nhỏ (1-3 dev): mỗi team owner 1 repo, PR riêng, deploy độc lập. **Monorepo** (mọi thứ trong 1 repo) tốt khi: code chung nhiều (UI components, types) giữa các app, team > 10 dev, deploy phối hợp. Quy tắc: < 5 dev, < 3 app → polyrepo. > 10 dev, hoặc cần share code chung giữa web + mobile + admin → monorepo (dùng Turborepo, Nx, pnpm workspace). VietCodex hiện monorepo: marketing + wiki + admin chung 1 codebase = consistency cao.
Codebase hay code base — viết liền hay rời?
Cả hai đều đúng — không có tiêu chuẩn duy nhất. Tuy nhiên 2026 viết LIỀN ('codebase') chiếm ~70% theo Stack Overflow Survey. Wikipedia, MDN dùng liền. Microsoft, Google docs cũng dùng liền. 'Code base' viết rời là dạng cũ, vẫn xuất hiện ở văn bản pháp lý hoặc người không trong ngành. Trong tài liệu kỹ thuật bạn nên dùng 'codebase' để chuẩn xu hướng + ngắn gọn hơn.
Đo size của codebase bằng cái gì?
3 chỉ số phổ biến: (1) **LOC** (Lines Of Code — số dòng code) — chạy lệnh `tokei .` hoặc `cloc .` trong repo. Loại bỏ comment + dòng trống. (2) **Số file** + **số folder** — `find . -type f | wc -l`. (3) **Bundle size** sau build — file output gửi cho user (`.next/`, `dist/`, `build/`). Lưu ý: LOC không phản ánh chất lượng — 1.000 dòng code tốt hơn 10.000 dòng spaghetti. Chỉ số bổ sung: **cyclomatic complexity** (độ phức tạp logic), **test coverage** (% code có test), **technical debt** (Sonar/CodeClimate đo).
Codebase legacy là gì? Khi nào cần viết lại?
Codebase **legacy** = code cũ vẫn chạy production nhưng khó maintain — dùng tech stack out-of-date (jQuery 2014, PHP 5.6, Angular 1.x), không có test, dev gốc đã nghỉ, không có docs. Quyết định viết lại (rewrite) vs maintain dựa trên 3 yếu tố: (1) Bug fix có còn khả thi không (yes → maintain); (2) Feature mới có thêm được không (yes → maintain); (3) Cost maintain/tháng vs cost rewrite (so sánh 18 tháng). Joel Spolsky nổi tiếng câu 'never rewrite from scratch' — 80% rewrite project fail. Tốt hơn: refactor từng phần (strangler pattern), thay thế dần module by module.