Tech stack — 16 công cụ
Chúng tôi dựng bằng gì
Một danh sách ngắn, và ngắn là có chủ đích. Mỗi công cụ ở đây đều có vòng đời hỗ trợ dài cùng một cộng đồng đủ đông để tuyển người, bởi phép thử thật sự của một stack không nằm ở lúc chúng tôi viết, mà ở lúc người khác phải tiếp quản nó.
02 công cụ
Ngôn ngữ
Một ngôn ngữ duy nhất cho cả stack, để kiểu dữ liệu đi được xuyên qua ranh giới mạng thay vì dừng lại ở đó.
TypeScript
Mặc định cho mọi thứ chúng tôi viết. Một kiểu dữ liệu dùng chung giữa API và client sẽ chặn nguyên một nhóm lỗi ngay từ lúc gõ, trước khi dòng code nào kịp chạy.
Python
Dùng khi bài toán nghiêng về dữ liệu hoặc mô hình, và hệ sinh thái Python thực sự phục vụ việc đó tốt hơn.
04 công cụ
Frontend
Render phía server ở nơi điều đó tạo ra khác biệt, và chỉ để tương tác ở nơi nó xứng đáng.
React
Nhàm chán theo nghĩa đáng quý nhất: đây là nơi có nhiều kỹ sư sẵn sàng tiếp quản những gì chúng tôi để lại nhất.
Next.js
Server rendering, routing và xử lý ảnh nằm gọn trong cùng một khung, nhờ đó trang chạy nhanh trên máy thật mà chúng tôi không phải tự dựng riêng cả một hệ thống build.
Tailwind CSS
Design token nằm ngay cạnh markup, nên phần style không trôi dần ra khỏi design system theo năm tháng.
Một codebase cho cả iOS lẫn Android, dùng khi lớp vỏ native không phải điều làm nên giá trị của sản phẩm.
03 công cụ
Backend & data
Mô hình dữ liệu trước đã. Phần lớn những rắc rối backend về sau đều bắt nguồn từ một quyết định schema được chốt quá sớm.
Node.js
Cùng ngôn ngữ với phía client, nên cả đội chỉ phải giữ một cách tư duy và một bộ kiểu dữ liệu dùng chung.
PostgreSQL
Mặc định là cơ sở dữ liệu quan hệ. Chúng tôi chỉ tìm tới thứ khác khi bản thân dữ liệu thực sự đòi hỏi như vậy.
Cache, hàng đợi và giới hạn tần suất — những việc mà nếu không có Redis thì cuối cùng cơ sở dữ liệu sẽ phải gánh thay.
04 công cụ
Hạ tầng
Môi trường được viết bằng code, và mỗi lần deploy đều nhàm chán một cách có chủ đích. Chừng nào việc release còn khiến người ta hồi hộp, thì mọi lộ trình vẽ ra cũng chỉ nằm trên giấy.
Docker
Local, staging và production khớp nhau thật, để không còn ai phải nói câu "máy tôi chạy mà" nữa.
AWS
Lựa chọn mặc định của chúng tôi. Nhưng nếu bạn đã ở đâu thì chúng tôi deploy ở đó, chứ không bắt bạn dời đi cho tiện phía mình.
Test, preview và deploy ở từng pull request, để không còn thao tác tay nào chạm vào production.
Hạ tầng nằm trong git, nên dựng lại một môi trường là việc chạy một câu lệnh, không phải việc cố nhớ xem lần trước đã làm gì.
03 công cụ
Design & chất lượng
Những phần quyết định sản phẩm có dùng được hay không, và có trụ được lâu hay không.
Figma
Thiết kế trên đúng bộ token và component mà code sử dụng, nhờ vậy bản được duyệt và bản chạy thật luôn là một.
Test end-to-end cho những luồng mà hỏng là mất tiền thật, chứ không chạy theo một con số phần trăm coverage.
Lỗi đến từ người dùng thật, kèm đủ ngữ cảnh để xử lý ngay, thay vì một phiếu hỗ trợ chỉ vỏn vẹn mấy chữ "màn hình trắng".
Cách chọn
Chúng tôi chọn dựa trên điều gì
Những quy tắc đứng sau danh sách trên, nói thẳng ra để bạn có thể phản đối ngay từ trước khi dự án bắt đầu, thay vì sau khi mọi thứ đã lỡ.
Bền vững hơn thời thượng
Chúng tôi chọn những công cụ có vòng đời hỗ trợ dài và cộng đồng đủ đông để tuyển người. Bởi sau khi chúng tôi rời đi, bạn vẫn phải tìm được người tiếp quản — và điều đó khó hơn hẳn nếu chúng tôi trót chọn một thứ đang thời thượng.
Stack của bạn quan trọng hơn stack của chúng tôi
Nếu bạn đang chạy một stack và chạy tốt, chúng tôi làm việc ngay trên đó. Chỉ cần cho biết sớm: gặp thứ chúng tôi không kham nổi tử tế, chúng tôi sẽ nói thẳng, chứ không lấy ngân sách của bạn ra để học nghề.
Càng ít thành phần càng nhẹ đầu
Mỗi service thêm vào là thêm một thứ phải giám sát, phải vá, và phải giải thích cho người đến sau. Chúng tôi chỉ thêm khi bài toán thực sự đòi hỏi, chứ không phải để sơ đồ kiến trúc trông dày dặn hơn.
Không khoá chân bạn vào chúng tôi
Hạ tầng viết bằng code, hosting tiêu chuẩn, tài khoản đứng tên bạn. Không có thứ gì ở đây cần đến sự có mặt của chúng tôi thì mới tiếp tục chạy được.
Tiếp theo
Xem nó được áp dụng ra sao
