Tôi không chọn Angular vì nó cool. Tôi chọn vì tôi đã mệt: mệt với việc đuổi theo xu hướng, mệt với việc refactor frontend mỗi 18 tháng, mệt với 17 ý kiến khác nhau về cách làm cùng một việc.
“Framework tốt nhất là cái mà bạn quên đi rằng mình đang dùng nó.”
Ba tháng trước tôi có một backend hoạt động, một tầm nhìn sản phẩm, và một template create-react-app trống. Mọi người đều bảo tôi dùng React, Vue, Svelte, Next.js. Chỉ có 1 team mà tôi khảo sát đang xây dựng thứ tôi cần.
Tôi không tự xây dựng framework của riêng mình. Tôi dùng Angular. Và đó là quyết định kỹ thuật boring nhất nhưng đúng đắn nhất mà tôi đã đưa ra cho dự án này.
Tiêu Chí Quyết Định Cho Founder Đơn Độc
Tôi không tối ưu cho developer experience, GitHub stars, hay DOM speed. Tôi tối ưu cho bốn thứ:
- Tôi chỉ là một người. Không cần đưa ra 100 quyết định nhỏ mỗi ngày.
- Nó phải hoạt động y hệt sau 3 năm. Không viết lại. Không sụp đổ hệ sinh thái.
- AI coding agents phải viết code đúng ngay từ lần đầu.
- Chỉ có một cách rõ ràng để làm mọi việc.
💡 Insight 1: Hầu hết các so sánh framework đo lường sai metrics. Cho founder đơn độc, tốc độ đưa ra quyết định và sự ổn định quan trọng gấp 10 lần so với raw performance hay GitHub stars.
Tại Sao Mọi Framework Khác Đều Thất Bại Với Tôi
React: Hoàn Hảo Cho Teams, Tệ Cho Một Người
React hoàn hảo cho các team có 10 frontend engineers cần sự linh hoạt. Nhưng cho một người? Mỗi lần tôi mở một codebase React năm 2026, tôi phải trả lời 12 câu hỏi trước khi viết dòng code đầu tiên: client hay server components? TanStack Query hay SWR? Zod hay Yup? Zustand hay Jotai? App Router hay Pages Router?
Mỗi lựa chọn có 1000 ý kiến “hot”, và tất cả sẽ lỗi thời trong 18 tháng. Tôi không có thời gian cho việc này. Tôi muốn build sản phẩm của mình.
Vue: Ổn Cho Đến Khi Không Ổn
Vue ổn. Tài liệu tốt. Nhưng nó có cùng vấn đề: 17 cách khác nhau để làm mọi thứ (Options API, Composition API, <script setup>, Pinia, Vuex). Tệ hơn, hệ sinh thái rất nhỏ—hầu hết các thư viện là abandonware hoặc barely maintained. Và các bản upgrade vẫn break code.
Svelte / SvelteKit: Tốt Cho Đến Khi Gặp Tường
Tôi muốn thích Svelte. Nó nhanh, thông minh, sạch sẽ. Nhưng mỗi lần tôi build một thứ gì đó không tầm thường, tôi đều gặp tường: thiếu feature, bug chưa fix, hoặc mọi người đều nói “cứ đợi Svelte 6”. Tôi không muốn đợi. Tôi muốn build ngay.
💡 Insight 2: Các chu kỳ hype của framework được thiết kế cho content creators, không phải builders. Những tools productive nhất thường là những cái không ai tweet về nó.
Tại Sao Angular Thực Sự Hoạt Động Cho Developers Đơn Độc
Mọi người đều chê Angular. Nó enterprise. Nó boring. Nó Google. Đó chính xác là lý do tôi chọn nó.
“Angular không giải quyết những vấn đề khó nhất của bạn. Nó ngăn chúng không tồn tại ngay từ đầu.”
Chiến thắng lớn nhất là sự vắng mặt của các quyết định:
- Forms: Không npm install, không thư viện third-party. Signal Forms được tích hợp sẵn, type-safe, và fully reactive.
productModel = signal({ name: '', price: 0, description: '' }); productForm = form(this.productModel, { validators: { name: [Validators.required], price: [Validators.min(0), Validators.max(10000)] } }); - HTTP: Không Axios, không interceptors để viết.
HttpClientchỉ cần dùng.private http = inject(HttpClient); private entityService = inject(EntityService); entity = signal<BusinessEntity | null>(null); loadEntity(id: string) { this.http.get<BusinessEntity>(`/api/entities/${id}`).subscribe(entity => { this.entity.set(entity); // Pre-populate form directly from API response this.productModel.set(entity); }); } async onSubmit() { if (this.productForm().invalid) return; await this.entityService.save(this.productModel()); } - Routing: Không magic, không bất ngờ. Chính xác một cách để định nghĩa routes.
const routes: Routes = [ { path: 'entities', component: EntityListComponent }, { path: 'entities/:id', component: EntityDetailComponent } ];
Và điều quan trọng: Claude, GPT và GLM viết code Angular hoàn hảo. Không có abstractions phức tạp, không có patterns invented. Tôi có thể gõ “build me a CRUD table with sorting, filtering, and pagination” và nhận được code chạy được trong 30 giây. Không cần sửa gì.
Những Phần Tốt
-
Dependency Injection: Mọi người than phiền là nó quá phức tạp. Nó không phức tạp. Dùng
inject()cho services, và nó hoạt động—không context, không prop drilling, type safe, testable. Tôi đã waste 3 ngày debug một React context provider chỉ update một nửa components. Tôi chưa bao giờ gặp vấn đề đó trong Angular.private entityService = inject(EntityService); -
Signals: Signals trong Angular 17+ hoàn hảo. Không stale closures, không gotchas kỳ lạ. Chúng chỉ update khi cần. Dùng
signal()cho local state,computed()cho derived state, và luôn ưu tiênupdate()hoặcset()thay vìmutate(). -
Angular Hiện đại: Tất cả components đều standalone mặc định, không cần set
standalone: true. Dùnghostbindings trong component decorators thay vì@HostBinding/@HostListener. Dùnginput()/output()functions thay vì decorators. DùngChangeDetectionStrategy.OnPushcho tất cả components. -
Templates: Dùng native control flow
@if,@for,@switchthay vì structural directives. Dùngclass/stylebindings thay vìngClass/ngStyle. Signal Forms tích hợp mượt với templates:<input type="text" [formField]="productForm.name" /> <input type="number" [formField]="productForm.price" /> <textarea [formField]="productForm.description" /> @if (productForm.name().invalid && productForm.name().touched) { <p class="error">Name is required</p> } -
Đã tối ưu: Dùng
NgOptimizedImagecho images, implement lazy loading cho feature routes.
Những Phần Tệ
- Custom form controls:
ControlValueAccessorlà điên rồ. Tôi mất 3 ngày cho một date picker mà lẽ ra chỉ mất 2 tiếng. Nhưng một khi viết một lần, tôi không bao giờ phải nghĩ về nó nữa. - SSR: Bây giờ thì tốt, nhưng setup mất 2 ngày chiến đấu với tài liệu lỗi thời.
💡 Insight 3: Chi phí học Angular một lần thấp vô hạn so với chi phí re-learn React ecosystem best practices mỗi 18 tháng.
Những Tradeoffs Thực Sự Không Ai Nói Đến
Đây không phải là bài “ai cũng nên dùng Angular”. Đây là cái hoạt động cho tôi.
Những gì tôi từ bỏ:
- Social capital. Ai cũng ghét nó. Đó không phải là vấn đề kỹ thuật mà là vấn đề tiếng ồn trên mạng xã hội. Bạn sẽ bị chế trên Twitter. Nửa cộng đồng frontend sẽ gọi bạn là boomer. Không ai viết những bài blog cool về stack của bạn.
- Bundle size ban đầu lớn hơn (~100kb thay vì 10kb). Không ai để ý cho B2B.
- Ít linh hoạt. Làm theo cách của Angular, hoặc sẽ vất vả.
- Đôi khi gặp vấn đề với Google: các features mới bị deprecated âm thầm.
Những gì tôi không từ bỏ: giấc ngủ. Tôi không thức dậy với các thông báo deprecation framework. Tôi không dành cuối tuần để refactor. Tôi không học 3 patterns mới mỗi tháng.
Angular di chuyển chậm. Đó là feature, không phải bug.
Kết Luận Cho Builders, Không Phải Tweeters
Cho tôi, ngay lúc này, đây là frontend framework hoàn hảo.
Tôi có thể build toàn bộ một CRUD interface với validation, error handling, và routing trong 2 giờ. Không phải 2 ngày. AI viết code chuẩn cho nó. Nó sẽ hoạt động y hệt năm 2029.
Framework này không tối ưu cho 100 developers tranh cãi về cách viết tốt nhất cho một nút. Nó tối ưu cho một developer cần ship 5 features tuần này.
Đó chính xác là những gì QuotyAI cần. Tôi không cần framework nhanh nhất hay cool nhất. Tôi cần framework giúp tôi đi ra khỏi đường và cho phép tôi build.
Nếu bạn là một founder đơn độc đã mệt với việc đuổi theo xu hướng, dừng việc suy nghĩ quá nhiều. Dùng Angular. Bạn có thể viết lại sau—nếu bạn thành công đến mức cần phải viết lại.
Câu Hỏi Thường Gặp
Tại sao chọn Angular khi là một founder đơn độc?
Angular loại bỏ sự mệt mỏi khi đưa ra quyết định với các giải pháp tích hợp sẵn cho forms, HTTP, routing và dependency injection. Nó vẫn ổn định trong nhiều năm, không cần phải theo đuổi hệ sinh thái, và các AI coding agents viết code chuẩn, idiomatic ngay từ lần đầu mà không cần sửa chữa. Tài liệu Angular toàn diện và được duy trì, với không có link broken hay ví dụ lỗi thời.
Nhược điểm lớn nhất của Angular là gì?
Ai cũng ghét nó. Đó không phải là vấn đề kỹ thuật mà là vấn đề tiếng ồn trên mạng xã hội. Bạn sẽ bị chế trên Twitter. Nửa cộng đồng frontend sẽ gọi bạn là boomer. Không ai viết những bài blog cool về stack của bạn. Những đánh đổi kỹ thuật thực tế rất nhỏ: bundle size hơi lớn hơn (~100kb), learning curve ban đầu dốc hơn, và đôi khi gặp vấn đề với các tính năng thử nghiệm của Google. Angular deprecation policy đảm bảo ít nhất 6 tháng thông báo cho các breaking changes.
AI có thể viết code Angular tốt không?
Có. Claude, GPT và GLM viết code Angular chuẩn, idiomatic ngay từ lần đầu vì Angular có một cách rõ ràng để làm mọi thứ, không có các abstractions phức tạp, và có API surface ổn định, được document kỹ đã không thay đổi căn bản trong nhiều năm. Sự có thể dự đoán này làm nó trở nên lý tưởng cho workflow phát triển có AI hỗ trợ.
Angular còn relevant năm 2026 không?
Chắc chắn. Angular powers các ứng dụng enterprise tại Google, Microsoft, và hàng nghìn companies trên toàn thế giới. Angular roadmap tập trung vào stability, cải thiện performance, và developer experience thay vì breaking changes.