“Mình luôn muốn sang Nhật, Singapore hoặc Mỹ để làm việc. Hai thứ mình nghĩ đến đầu tiên là học tiếng Anh và coding skills phải tốt”
Dũng Ngọc Nguyễn - Software Engineer at Wolt/ DoorDash (Japan)
Hồi còn làm việc ở Việt Nam, mình luôn muốn sang Nhật, Singapore hoặc Mỹ để làm việc. Điều mình nghĩ tới đầu tiên là phải học tiếng Anh, thứ hai là coding skills phải tốt. Nếu cùng một level, hẳn nhiên công ty sẽ chọn người ở nước họ để không phải sponsor visa. Vậy thì mình phải giỏi vượt trội hơn cả về thuật toán để phỏng vấn và technical skill để trở thành người được chọn. Cân bằng hai thứ này khó lắm à. Hồi đó, buổi tối mình sẽ luyện LeetCode, thuật toán. Còn lại sẽ tận dụng thời gian cải thiện technical skill bằng cách làm side project, giải quyết những vấn đề mình gặp ở công việc chính. Những giải pháp đó thường có thể tổng quát hoá, và mình cũng public ra open-source dưới sự cho phép của công ty. Vì muốn làm ra 1 open-source chất lượng mà technical skills của mình cũng tăng đáng kể. Chính cái lúc mình đi research và tham khảo hàng ngàn best practices để áp dụng vào project nhỏ của mình, mình có được kinh nghiệm và hiểu ra tại sao họ làm như vậy. Khi mình hiểu được ngọn nguồn rồi thì “sướng” lắm!
Phần technical skill này ngoài build và research nhiều để lấy kinh nghiệm thì mình phải tò mò nữa. Đừng dừng lại ở việc làm xong phần của mình rồi thôi! Ví dụ như task đó có liên quan đến team khác, thì mình nên tìm hiểu thêm toàn bộ cái features này vận hành thế nào. Tại sao đầu API này lại liên quan đầu API kia, vân vân mây mây. Khi hiểu được rồi thì sẽ làm rất nhanh, vì mình tự hình thành được cái flow trong đầu rồi. Mình tin là dù làm ở công ty nào thì cũng cố gắng cày thật nhiều, học nhiều làm nhiều, đó là tiền đề để mình dễ dàng làm việc được trong các công ty lớn.
Suốt những năm làm việc ở Việt Nam, có thể nói thời gian ở Chợ Tốt đã giúp mình học, thử và làm được rất nhiều thứ. Lúc mới vào công ty, mình được xếp vào team khoảng 6 người với nhiệm vụ là rebuild lại Chợ Tốt web vì users có xu hướng dùng phiên bản mobile trên smartphone nhiều hơn. Mình nhớ rõ sản phẩm chính thức được release vào 9h tối, nhưng chỉ đến sáng hôm sau thôi thì server chịu không nổi. Team mình phải quay lại phiên bản cũ để tìm nguyên nhân mới phát hiện server chịu không nổi traffic lớn. Mà website về e-commerce thì server side render rất quan trọng vì nó quyết định kết quả SEO của công ty có hiệu quả không. Team mình đưa ra giải pháp tạm thời là tách ra 2 cái. Thường traffic của Google search engine có số lượng vào không nhiều, nên khi traffic đi vào mình sẽ kiểm tra xem nó là từ người dùng “organic” hay từ search engine. Nếu từ search engine sẽ “đá” qua server riêng nơi mà server side rendering chỉ hỗ trợ cho Google bot thôi, còn bên server support organic traffic thì tụi mình disable cái server side rendering đi. Phương án tạm thời cũng dùng được tới khoảng 1 năm.
Sau đó dự án thứ 2 là mình và sếp đưa vào thử nghiệm NextJS, lúc đó mới là version 3. Chợ Tốt chắc là công ty đầu tiên xài công nghệ này ở Việt Nam với traffic cao. Tụi mình thậm chí còn viết blog và contact với những developers bên team NextJS về những thứ cần fix. Sau khi làm dự án thứ 2 hoàn chỉnh thì mình còn viết 1 bài blog về quá trình phát triển bằng NextJS trên Twitter, bất ngờ được founder công ty tạo ra NextJS retweet. Tự nhiên qua 1 đêm có thêm rất nhiều người follow mình :D
Rồi mình cứ tiếp tục phát triển những dự án sau cho Chợ Tốt, trong đó dự án tạo được impact lớn nhất mình từng làm, dự án xây dựng dashboard cho team marketing để chuẩn bị content SEO. Mình thấy một vấn đề rất lớn là team marketing viết SEO content trên file JSON, mà lượng thông tin lại quá lớn nên thao tác rất chậm và khi họ mắc lỗi như duplicate content hay lỗi cú pháp thì không thể phát hiện được. Đến khi họ đưa file để engineer để integrate vào code base thì lại sinh ra rất nhiều lỗi nên lại phải mất nhiều thời gian để fix.
Không chịu nỗi những task thủ công như vầy, mình mới nói chuyện với anh CEO hiện giờ (Head of Business lúc đó) để mình tìm cách cải thiện và hứa hoàn thành trong 1 tháng. Mình hứa vậy chứ cũng không biết làm sao, cũng không có người hỗ trợ. Đầu tiên, mình cứ follow software development process, rồi qua team marketing hỏi về nhu cầu của họ. Sau khi đọc hiểu từng mục trong đó, mình phân tích để thiết kế database, rồi chạy qua chạy lại review để đảm bảo mình hiểu rõ requirement và đang đi đúng hướng. Chốt rồi mình mới nói chuyện với team infra để tạo database đó trên môi trường development and production, mình tự thiết kế và phát triển API. Rồi bắt đầu phát triển frontend, mình cũng tự design luôn cả UI, hỏi tới hỏi lui ý kiến team marketing xem UI này dễ dùng không. Làm xong nhìn ok, kết nối được với nhau chạy hết rồi thì mình đưa cho team marketing test trước, debug và fix tới mức xài được là ổn.
Thêm vấn đề mới phát sinh là content thì có cả ngàn keywords, không thể nào bắt họ nhập từng cái vào vì quá mất thời gian. Thế là mình lấy file JSON hiện có để viết 1 cái script, khi chạy sẽ đưa hết dữ liệu vào database rồi tự làm integration giữa SEO public API và product chính luôn. Sau khi mọi thứ chạy ngon lành, mình lại tự làm slide và set up 1 buổi training cho team marketing để train họ xài tool này. Tết năm đó là thời gian test thử. Sau 1 tuần, anh Head of Business gửi cho mình coi keyword của Chợ Tốt đã lên đầu search engine mà không phải chạy marketing campaign, traffic tăng đột biến lên tới 100.000 lượt visit chỉ trong 1 tuần. Đây là dự án mà mình rất tự hào vì đã cống hiến được cho công ty và giải quyết được vấn đề vận hành tồn đọng rất lâu năm của Chợ Tốt. Năm đó mình cũng được bonus rất nhiều, tới 3 tháng lương và dùng số tiền để đổi từ chiếc Dream 20 năm tuổi sang chiếc xe… số mới.
Tuy nhiên, khi mình chuyển qua Nhật làm việc ở Rakuten thì nó khác lắm, từ ngôn ngữ đến văn hoá. Không hẳn là vỡ mộng, nhưng mình phải gầy dựng lại từ đầu, phải làm quen và xây dựng uy tín trong năm đầu tiên. Tới năm thứ 2, sếp tin tưởng mình hơn nên giao cho mình một dự án lớn vì mình rành framework của công ty. Mình được nhận nhiệm vụ training, support họ xây dựng lại sản phẩm sử dụng framework của team web. Dự án rất thú vị vì người Việt và Âu Mỹ xài những giao diện đơn giản quen rồi nhưng ở Nhật thì lại khác. Đó là UI cho sellers nhập dữ liệu product để bán trên shop của họ. Thay vì 1 cái form thông thường thì họ làm thành table có khoảng 20 dòng x 20 cột = 400 ô. Mỗi ô là 1 form để nhập sản phẩm nên nó khá phức tạp. Nếu làm không tốt thì sẽ ảnh hưởng performance, ví dụ chỉ cần thay đổi chút xíu trên 1 form thôi là nó sẽ tự động render lại hết 400 ô còn lại mà không cần thiết. Thế là mình ngồi suy nghĩ, tìm hiểu cách nào để tối ưu cái này và cuối cùng mình cũng làm được. Mình nói chuyện với team backend rất thường xuyên mới đưa ra được format data để lưu dưới database. Còn về UI thì team UI build cho mình rồi, mình chỉ việc xử lý thêm cột, thêm hàng, xử lý form, dữ liệu như thế nào thôi. Dữ liệu của UI đưa ra mình convert thành 1 dạng dữ liệu đã được định nghĩa trước đó để back end lưu xuống database. Sau dự án đó thì sếp ghi nhận và đánh giá mình rất xuất sắc rồi tăng lương, tăng bonus.
Trong quá trình chuẩn bị phỏng vấn các công ty Mỹ, mình vô tình phát triển được một sản phẩm nhỏ để giúp mình control Spotify desktop hiệu quả hơn. Mình cũng không ngờ nó được nhiều bạn đón nhận như vậy, chi tiết quá trình phát triển check ở podcast này techwaves-lets-build-a-side-project.
Lúc mình chuyển qua làm ở DoorDash đến bây giờ. Lúc mới vào thì mình có làm cùng anh bạn một dự án optimize performance của trang discovery, mình nghiệm ra được rất nhiều điều hay ho nên quyết định viết một bài technical article về “improving performance on high-traffic web pages”. Thực ra mình viết technical article cũng không bỡ ngỡ lắm, vì từ hồi 2015 mình cũng có bài biết đầu tiên được đăng trên tạp chí kỹ thuật lớn của Úc. Mình vui lắm, không phải vì nhận được nhuận bút ($100), mà mình tự hào vì bài viết của mình đã được đăng cho cả thế giới cùng xem. Đây là tiền đề mà mình học được quy trình viết bài, cách viết technical articles ra sao, nên sau mình cũng viết nhiều bài trên blog cá nhân và cả công ty nữa.
Nhìn lại cả một chặng đường dài mình nghiệm ra được rất nhiều thứ. Mình tin là mỗi người nên đặt mục tiêu để làm kim chỉ nam cho mình, mỗi người sẽ có tốc độ đi khác nhau, nhưng mục tiêu đó sẽ giúp mình không bị lạc đường. Mỗi người cũng có con đường riêng, cứ tập trung phát triển bản thân, đừng so sánh với các bạn xung quanh rồi bị peer pressure. Cái gì mình kiểm soát được thì nên kiểm soát, còn không thì “let it go” cho đỡ đau đầu.