”Mình thích nhất tính năng Task Caching của Nx. Cho dù bạn chạy cache trên máy của bạn, đồng nghiệp bạn chạy cloud có cache đó thì nó kéo về được.”
Chau Tran - Admin at Angular Vietnam & Senior Engineer at Nx.dev
Mình đang làm việc ở Nx.dev, một công ty chuyên về open source. Anh em nào build hệ thống bằng Angular hay React thì chắc cũng biết đến tool này. Đây là một build tool giúp các bạn có thể xây dựng một monorepo cho project của mình và doanh nghiệp, phù hợp để xử lý các quy trình công việc phức tạp với nhiều packages. Bạn có thể cấu hình tasks cho project bằng executor
và có thể thực thi các tasks này theo topological order. Các tasks này có thể là những one-off tasks như lint
, test
, và build
; hoặc có thể là những long-lived tasks như serve
.
Bên cạnh đó, Nx cũng có thể thực thi các tasks này song song (parallel). Ví dụ như việc chạy frontend và backend cùng lúc mà không cần mở hai terminal khác nhau, tương tự với những tools như concurrently
hoặc docker-compose
.
Điểm nổi bật nhất của Nx là tính năng Task Caching. Ví dụ bạn có 3 ứng dụng ABC, sử dụng chung 10 cái thư viện. Nx biết được là A đang sử dụng thư viện nào trong 10 thư viện này, build theo thứ tự nào và build đúng với thứ tự mà A cần (topological). Lần sau khi build lại A, Nx biết được A đã build cái gì và cái gì chưa thay đổi, cho nên có thể cache được những thư viện mà không thay đổi, thời gian build dự án sẽ nhanh hơn. Những cache này chỉ lưu ở local machine, nếu bạn chạy thì bạn có cache, đồng nghiệp của bạn chạy thì đồng nghiệp bạn có cache khác. Lúc này nảy sinh ra một concept khác, Remote Caching / Distributed Caching, nghĩa là caching trên cloud. Cho dù bạn chạy cache trên máy của bạn, nhưng Nx lấy cache đó put lên trên cloud, thì đồng nghiệp bạn chạy cloud có cache đó thì nó kéo về, tính năng này sẽ tiết kiệm được thời gian rất rất nhiều.
Tính năng mà tiết kiệm nhất thời gian nhất là đồng nghiệp của bạn có thể là 1 con agent chạy trên pipeline của mình, khi mà CI/CD chạy thì nó có thể tự động kéo cache về nếu như có cache. Khi mình build trên máy của mình và update cache đọc trên cloud, thì khi CI/CD chạy và đọc cache thì bảo đảm đc rằng cái mà mình build là cái mà CI/CD sẽ nhận được. Điều này làm giảm đi phần nào “độ chính xác” của một câu huyền thoại trong ngành tech: “It works on my machine”. Nx là sản phẩm Open-source và hoàn toàn miễn phí để sử dụng. Tuy nhiên, Remote Caching là sản phẩm mà bọn mình dùng để “kiếm revenue”, nhưng mà vẫn có free cho open source, hoặc non profit organization nha. Một trong những missions quan trọng nhất của Nx là việc bảo đảm độ chính xác của Cache; khi nào cần đọc từ cache; khi nào thì phải huỷ và tạo cache mới (Invalidate Cache). Đây là 1 trong 2 nghiệp vụ khó nhất trong lập trình: Naming Variable, Invalidate Cache, và Off-by-one Error 😅.
Thêm một điều nữa mình rất thích ở công ty đó là tính flexibility ở đây. Mình vào làm công ty từ 2021, làm các sản phẩm open source, chẳng liên quan gì đến viết web, Angular, những cái mà mình thích trước đó. Làm được 2 năm thì mình nói sếp, mình chán quá rồi, cho mình làm web được hông. Thế là sếp chuyển mình qua làm Nx Cloud (remote caching), ở đó nó có 1 dashboard làm web. Mình mới chuyển qua làm web được 3 4 tháng nay luôn. Văn hoá ở đây là “ơ mày muốn thử cái mới, muốn làm cái khác, tao cho mày đi”. Công ty mình rất thoải mái trong việc nhân viên được lựa chọn dự án phù hợp với họ mặc dù chẳng liên quan gì đến JD của người đó. Mình không có cảm giác bị kiềm hãm, công ty lắng nghe mình và muốn giữ mình để làm việc.
Mỗi năm công ty cho nhân viên 2500$ để mua sách, các khoá học, đi dự hội thảo… để nâng cao năng lực chuyên môn. CEO nói nếu tụi mày không xài hết 2500$ trong 1 năm thì trừ điểm. Được cho tiền xài, mà xài hông hết là có chuyện với sếp. Engineering team thì luôn có lunch-and-learn mỗi 2 tuần, chia sẻ những cái mà mọi người biết cho nhau. Ví dụ một bạn frontend như mình thì chẳng biết gì về Dev Ops cả, mình có thể request lên Simon, bạn làm Dev Ops trong công ty, “hey, in the next lunch-and-learn, can Simon introduce Kubenetes to the team?”. Đơn giản vậy thôi, thế là làm, Simon chia sẻ 1 tiếng đồng hồ về Dev Ops là xong.
Thế nên mình rất thích công ty hiện tại, à lương cũng rất tốt nữa hehe.