Cách dụ sếp để upgrade AngularJS lên Angular 11 trong 20 phút

Mình viết bài nay khi team mình vẫn đang trong giai đoạn 2 của trong quá trình nâng cấp phần mềm của công ty từ sử dụng AngularJS sang Angular 11. Nếu bạn chưa biết Angular là gì thì cũng đừng lo nha vì mình đã cố gắng viết bài này sao cho bạn nào không biết lập trình vẫn hình dung được việc này diễn ra như thế nào.

Còn nếu bạn đã biết AngularJS và Angular là gì thì kèo cao bạn là một lập trình viên. Nếu là đồng đạo với nhau thì mình tin rằng bạn sẽ đồng ý rằng việc này nói khó thì không khó lắm, dễ thì không dễ rồi và chắc chắn đây là một việc này sẽ tốn thời gian, công sức và phụ thuộc rất nhiều độ lớn của phần mềm đang phát triển trên nền tảng AngularJS.

Giải thích cho bạn nào ngoại đạo một chút thì AngularJS hay Angular v1, đây là một công cụ giúp người ta xây dựng website do Google chế ra từ năm 2010, tuy nhiên do vấn đề thiết kế có lỗ hổng thì sau một thời gian Google không còn phát triển AngularJS nữa mà họ phát hành ra một công cụ khác có cái tên na ná như là Angular (bỏ chữ JS đi), Angular hiện tại năm 2021 là phiên bản số 12.

Do Google chơi xấu, bỏ con giữa chợ dẫn tới việc thay đổi từ AngularJS lên Angular 11 có nhiều khó khăn. Một vài công ty trong nước mình biết, đã bỏ toàn bộ những gì có chữ Angular luôn rồi. Nói thêm là việc nâng cấp này tưởng chừng nghe đơn giản như cập nhật ứng dụng trên điện thoại nhưng thực tế thì theo mình là nó khó hơn nhiều lần. Bạn có thể hình dung việc này giống như việc bạn muốn duy chuyển cái nhà của bạn sang chung vách với nhà người yêu  để tối tối tâm sự. Nói một cách vi diệu là hô biến cái nhà trên cái móng cũ bay sang chỗ cái móng mới mà người trong nhà vẫn sinh hoạt bình thường. Chắc chỉ có Tôn Ngộ Không làm được...

Xàm xàm vậy được rồi, mình bắt đầu giới thiệu nhân vật chính ngày hôm nay là cái phần mềm (cái app) đang làm nha...

Giới thiệu cái phần mềm đang nâng cấp, có gì hot?

work
Photo by bruce mars / Unsplash

Phần mềm của mình có tên là paris-web (không liên quan tới thủ đô nước Pháp đâu nha mấy chế), đây là một "phần mềm lõi bảo hiểm" để giúp cho các công ty bảo hiểm có thể tối ưu hóa quy trình làm việc của công ty từ khâu nhận hợp đồng bảo hiểm tới thanh toán tiền bồi thường và gia hạn hàng năm. Sẽ có nhiều khách hàng dùng phần mềm này. Nó tựa tựa như cái Excel mà mọi người đang xài, Excel được mấy anh Mỹ viết một lần rồi in ra bán cho nhiều người xài. Quảng cáo tí cho công ty như hãng bia Heineken có một công ty con làm bảo hiểm cũng đang xài paris-web nha, và đây là đối tác mấy năm rồi nhưng mình vẫn không được uống beer miễn phí lần nào cả. Nói chung đây là phần mềm nhập liệu thôi nhưng có giá nhiều ngàn đô nha. Bạn nào tò mò có thể tham khảo bài Tại sao phần mềm chỉ có CRUD database lại có giá triệu đô? của mình để hiểu rõ hơn.

Nhắc lại lịch sử chút thì cái paris-web này được phát triển chắc hơn 8 năm rồi, từ lúc mình còn là sinh viên mới ra trường thì bắt tay vào làm món này luôn. Nói chung là có khá nhiều duyên phận với nó. Yêu có, hận có, tức có....đủ thứ cảm xúc trên đời này. Món paris-web này sử dụng AngularJS để làm phần giao diện người dùng, hay nói cụ thể hơn là làm ra mấy cái nút để mấy bạn nhấn, làm ra ô dữ liệu để người dùng có thể nhập dữ liệu vô, kiểu kiểu giống mấy cái tờ khai báo y tế mà mấy nay mọi người đang điền ấy. Ta không đi sâu vào kỹ thuật ha..bạn hiểu nó như là cái móng để bạn xây nhà trên đó là được rồi.

Rồi nếu bạn hỏi mình vì sao lúc đó lại chọn AngularJS chi, để rồi bây giờ la làng la xóm? Câu trả lời hợp lý nhất chính là không có sự lựa chọn khác. Cụ thể hơn là tại năm 2013 thì ngoại trừ AngularJS ra thì những thứ hay khác vẫn chưa ra đời..nên chỉ có thể chọn ẻm thôi. Dù sao thì đồ nhà Google trồng thì anh em lúc đó luôn tin rằng đó là đồ tốt, ăn vào bổ dưỡng không bị đau bụng.

Và rồi khi mình khi mình tin vào việc cứ ăn đồ của Google đi vì nó ngon bổ rẻ, thì khoản vài năm sau đó Google bảo là hàng xịn đó tụ anh không phát triển nữa, anh không nghĩ nó xịn như xưa. Mấy chú em tự bơi đi, bọn anh lên sao hỏa rồi... Con tim tan vỡ, niềm tin vào gã khổng lồ công nghệ "toang" luôn. Mình nhớ lúc đó ông nào bảo "đứng trên vai người khổng lồ" thì mình sẽ bảo là coi chừng "gã khổng lồ đi tắm rồi bạn trôi xuống cống chết chìm như chơi ha vì mấy gã khổng lồ chỉ tắm ở biển lớn thôi".

Dù Google có thương sót mấy em thơ dại, cũng ráng hỗ trợ nhiều năm, tuy nhiên chuyện gì đến rồi cũng đến, ảnh thông báo cuối năm 2021 chính thức là thời gian cuối cùng mà AngularJS còn được Google hỗ trợ. Và như bạn biết paris-web dựa trên AngularJS nên số phận cũng sẽ lận đận, lao đao..giờ chỉ có thể nói là "Xung quanh anh toàn là nước,  ay"...

Tại sao không bỏ AngularJS đi, chia tay khi còn cơ hội?

Happy Singles Awareness Day
Photo by Kelly Sikkema / Unsplash

Mọi quyết định cuộc đời này đều có một cái giá và quan trọng là cái giá đó mình trả nổi không. Riêng cho cái giá trả cho việc từ bỏ AngularJS đi thì hoàn toàn là không nhỏ. Một sản phẩm phát triển qua nhiều năm thì có bao nhiêu thứ, không thể bỏ được. Giống như ta việc xây một tòa nhà, nhóm mình phụ trách sẽ xây tường, đổ cột, đổ sàn..tuy nhiên chúng ta phải làm trên nền móng chính là AngularJS. Việc bỏ cái nền móng nó đi chẳng khác nào đập bỏ tòa nhà đó xây lại từ đầu cả..sẽ là một khoản chi phí không hề nhỏ. Mình tin chắc rằng việc đập đi xây lại sẽ là một quyết định không hề dễ dàng. Xứ mình có câu "cái gì khó quá thì bỏ" và mình đi tìm cái an toàn hơn để làm...

Mình có làm một vài con số nho nhỏ về những gì mà team mình đã làm trong suốt mấy năm qua. Nếu bạn không rành vụ lập trình thì có thể bỏ qua cái bảng bên dưới. Quan trọng là mình muốn diễn giải một điều là cái phần mềm mà mình đang nói đây do được xây nhiều năm nên khá nhiều thứ trong đó..theo mình thì nó giống như 1 tòa chung cư 80 tầng.

Thông số Giá trị
Số commits của paris-web 39807 commits
(@angular/core là 32388 commits!)
Số lượng Ng1 Components ~1200 components (components, directives)
Số lượng Ng1 Services ~ 500 (service, factory, provider)
Số lượng JS modules ~6000 JS modules

Tại sao phải thuyết phục sếp?

Photo by Jehyun Sung / Unsplash

Sau nhiều năm xây nhà cao tầng trên móng bằng tre nứa thì câu chuyện cũng dần chạm tới giới hạn. Phần mềm phát phát sinh lỗi nhiều hơn, team dần mất kiểm soát và mệt mỏi. Nói cho dễ hiểu là cháy nhà nên trộm cướp nó vô tùm lum.

Mình còn nhớ lúc đó Mavel mới ra phim Người Nhện Xa Nhà nên sau khi xem về, hình như mình bị nhiễm chút năng lực của anh nhện là dự đoán tương lai (cảm ơn Peter!). Mình cảm thấy thời điểm làm cách mạng đã đến, bằng niềm tin vào việc mang lại giá trị tốt đẹp cho mọi người nên mình muốn làm một cái gì đó, mình muốn thay đổi, đã tới lúc team mình cần dọn sang một tòa nhà mới, một không gian mới, đẹp hơn, rộng hơn....Dọn nhà thôi!

Ý tưởng dần được nung nấu từ đầu tháng giêng 2020, tuy nhiên tới tháng 7/2020 thì mình mới đề xuất việc này với team của mình và bắt đầu tìm hiểu các cách mà mình có thể triển khai được. Nói thêm là bữa dụ anh em làm trò này thì 6/7 người tỏ ra quan ngại, không chắc chắn dc...như nội chiến siêu anh hùng Marvel..

Sau đó mình mất thời gian đâu đó gần một tháng (mình dành 30% thời gian) để ra một bản nháp và có tích hợp công nghệ mới vào cái đang chạy được. Kiểu kiểu giống như việc người ta chế vaccine. Trước khi người ta đem vaccine ra chích đại trà thì phải chích trước cho vài trăm người trước coi coi có phản ửng phụ gì không...Mình đem bản nháp đó ra cho anh quản lý bên Norway (kiêm luôn là PO-Product Owner) coi thử thì anh nói 'OK', có vẻ sáng sủa. Rồi với khí thế hừng hực thì mình cố gắng có được V 1.0 đầu tiên để mang chính thức vào dự án. Và vấn đề xuất phát từ lúc này...

Việc mình đề xuất nâng cấp từ AngularJS lên Angular dù được team ủng hộ, PO ủng hộ nhưng có vẻ như việc này chưa được cấp trên mình họ thật sự quan tâm. Minh vẫn bị phân đi làm việc gì đó linh tinh và đó đó tư tưởng cũng bị phân tán, nên việc phát triển cứ bị gián đoạn liên tục. Hỏi anh quản lý dự án thì ảnh bảo đây chỉ là task nghiên cứu, nên vẫn phải làm những việc khác cho khách hàng hằng ngày. Mình cạn lời....(lúc đó định kêu Thanos búng ngon tay rồi!!! )

Một nguyên nhân khác ban đầu đó chính là mình tham công việc quá, mình đã sửa hơn 1 ngàn files và khi đem lên định xài thử thì không ai trong team dám lấy xài luôn (bao gồm cả mình).  Nói chung là mắc một cái sai lằm khá lớn đó chính là làm thay đổi quá nhiều, khối lượng quá lớn trong thời gian 2, 3 tháng là quá dài và rủi ro. Sự khởi đầu thất bại trong gang tất!

Cho bạn nào biết lập trình thì cái hình bên dưới là ảnh chụp cái commit mình đã làm. Mình viết tool để chuyển toàn bộ template từ files php sang files html  ...sửa có tí xíu!!

Ok, thua kèo này mình chơi kèo khác! Không gì phải sợ cả...Một số bài học mình rút ra được đó chính là muốn thay đổi lớn cho cái gì đó lâu đời thì ngoại trừ sự ủng hộ của anh em trong nhóm ra thì vẫn chưa đủ..mình cần sự ủng hộ nữa từ người quyền lực nhất  - CEO của công ty!! Như các bạn biết rồi đó công ty không phải là nơi làm nghiên cứu, công ty là nơi người ta làm kinh doanh bạn à, cái gì không phải kinh doanh, không kiếm ra được tiền thì khá là khó để thu xếp...

Change for Change
Photo by Katt Yukawa / Unsplash

Sau khi được một anh đồng nghiệp khác khai sáng (ổng tên Nam, như gió nam trong khi người ta cần gió đông) và ôn lại bài học triển khai dự án phần mềm cho cơ quan nhà nước thì mình xác định mực tiêu là Mình cần "sếp cuối" bật đèn xanh cho việc đổi từ AngularJS sang Angular 11 thuận lợi. Hình dung rằng mình cầm "thượng phương bảo kiếm" đi ra pháp trường....gặp ai không nghe thì xách manh ra năn nỉ trước nha (phải nhịn nhịn), cản đường nữa thì xxxx..

Chuyện nghe tưởng chừng đơn giản, nhưng không thể làm sơ sài được. Nâng cấp công nghệ không mang lại lợi ích tài chính tức thì. Do đó vấn đề ở đây là làm sao để sếp tin tưởng bạn, thuyết phục một người làm kinh doanh đồng ý làm một công việc mà tưởng chừng không mang lại lợi nhuận gì cho công ty cả và có thể ảnh hưởng tới chén cơm, manh áo người khác là rất dễ bị ngủm. Mình tin rằng sếp luôn hiểu việc nâng cấp là tốt, nhưng có cần thiết hay không và đúng thời điểm không lại là câu chuyện hoàn toàn khác nhe các bạn?  Phương tây họ thường nói chưa phải lúc, chứ ít khi người ta từ chối bạn!!! Ai biết là trong não của sếp năm nay hay năm sau người ta tính làm gì? Biết đâu người ta có việc gì đó ưu tiên cao hơn hay năm nay Covid-19 cắn bớt ngân sách rồi..không có tiền đâu mà đi đốt cho việc nâng cấp.

Theo mình, để cho sếp có thể "bật đèn xanh" cho mình làm thì ta cần chứng minh cho sếp thấy là việc này mang lại hiểu quả công ty một cách rõ ràng cụ thể và việc thay đổi không ảnh hưởng tới hoạt động bình thường của công ty. Một giải pháp ít rủi ro nhất, một giải pháp mà ta có thể đạt được mục tiêu kép tăng trưởng và thay đổi là chìa khóa ở đây.

Để giải bài toán đó thì mình chọn giải pháp là hybrid-app, có nghĩa là thay vì chúng ta bỏ đi hoàn toàn cái cũ thì chúng ta sẽ làm một cái mới song song với cái đang hiện có và cho chúng nó chạy chung với nhau. Kiểu kiểu giống như mấy chiếc xe lai của Toyota vừa chạy xăng và chạy điện vậy. Trong phần mềm, ta sẽ chọn một phần của sản phẩm rồi ở nhánh đó chúng ta triển khai công nghệ mới vào. Ví như ta kêu anh bạn Trung Quốc chế nguyên cái xe, rồi chừa phần động cơ lại để khi mang về ta lấy motor máy bơm nước gắn vô thành xe điện chạy xăng. Làm giàu không khó ha!

Nghe thì đơn giản, nhưng thật ra cái này mới là cái giải pháp khó làm nhất hiện tại. Tưởng tượng, trong một cái xe bạn để cái bình xăng kế bên ổ điện thì chuyện gì sẽ xảy ra, rồi đem ra cao tốc đạp 299Km/h...bạn biết chuyện gì sẽ xảy rồi đó. Một ví dụ khác dễ hình dung hơn là một cái nhà có 2 bà vợ...kết quả tự hiểu nha.

Vậy để truyền vào não của CEO cái giải pháp mình nghĩ là giải pháp tốt nhất thì theo mình cần trả lời 3 câu hỏi sau đây:

  1. Nâng cấp lên thì được lợi gì?
  2. Tại sao chọn giải pháp hybrid-app
  3. Triển khai cái này có ảnh hưởng tới hoạt động bình thường công ty không?

Mình xem CEO công ty ngoại trừ là người trả lương cho mình thì mình còn xem họ như khách hàng vậy. Mình bán cho họ một sản phẩm ngon, bổ, rẻ thì người ta sẽ mua hàng của bạn thôi..(với dk chọn thị trường cho đúng - hơi ngoài lề!). Triết lý của mình đó giờ vẫn là như vậy..

Ngoài lề chút, vụ thuyết phục này như một kèo xin cá mập đầu tư phiên bản mini. CEO ở đây đóng vai trò như vị cá mập đó, còn mình như là con cá lòng tong. Như một ai đã từng nói thì nguyên tắc đầu tư là "Phải có cách để thu hồi được vốn". Nói cho dễ hiểu hơn là sếp luôn muốn cái gì xịn nhất, ngon nhất, rẻ nhất, kiếm được lợi nhuận cao nhât và ngủ ngon nhất..đúng là "khôn như sếp quê em xxxx", đôi khi cũng muốn dịch câu này sang tiếng Anh lắm nha :)) Nhưng làm một việc có loại nhuận không dễ, sếp muốn như vậy cũng là việc đương nhiên thôi...

Vây nâng cấp AngularJS lên Angular thì ta được gì?

Đầu tiên là ai cũng biết cái gì ra sau luôn tốt hơn cái ra trước, nên mình không bàn sâu về kĩ thuật để nói lên mấy cái tốt đó như nó chạy nhanh hơn, bảo mật hơn, làm việc khoái hơn. Nâng cấp công nghệ đi lên sẽ có nhiều lợi thế công nghệ hơn đó là điều ai cũng biết nhưng làm tốn bao nhiêu tiền thì lại là câu chuyện khác. Do đó những cái tốt đó mình cẩn phải chừa lại để đem đi nói chuyện vói team mình, vói những người quan tâm nó.  Còn đối với sếp, công nghệ nào làm được việc đó là công nghệ tốt, đơn giản vậy thôi, việc này giống như việc "Mèo đen hay mèo trắng, mèo nào bắt được chuột là mèo tốt"

Từ góc độ công ty thì việc nâng cấp này lên có ý nghĩa giảm chi phí nhân sự cho công ty. Công ty phần mềm muốn mở rộng chỉ có thể thông qua việc tuyển thêm người vào làm, tuyển thêm kỹ sư. Tại thời điểm mình viết bài này là lễ Quốc Khánh năm 2021 thì số kỹ sư biết AngularJS không còn nhiều nữa. Để tuyển được kỹ sư biết dùng AngularJS sẽ thật sự khó hơn rất nhiều so với một người biết Angular 11...

Bạn cần phải nhớ rằng công nghệ càng cũ, số người biết nó ít, cung sẽ ít hơn cầu, chi phí nhân sự càng cao..và đặc biệt sếp không thể phát triển công ty lên 100 người  được..vì không có người để cho sếp tuyển! Không nâng cấp lên là sếp khó mở rộng quy mô công ty và hoạt động kinh doanh! Nghe tới đây chắc sếp trúng tim đen rồi...

Tại sao chọn giải pháp Hybrid App?

Nếu bạn đang phải thực hiện giãn cách xã hội thì mình tin rằng bạn sẽ đồng ý với mình là mọi sự thay đổi lớn và đột ngột đều dẫn tới bất ổn. Một công ty làm phần mềm ở một khía cạnh nào đó có thể xem là một xã hội thu nhỏ. Một sự thay đổi lớn và đột ngột có thể dẫn tới công ty mất ổn định.

Nhìn lại trong sản phẩm paris-web của công ty thì nó cũng mang tính chất như vậy. Mình có một ước lượng tương đối khối lượng công việc mà mình phải bỏ đi xây lại là khoản ít nhất 2 năm với team 5 người trở lên. Đây có thể xem là một khoản đầu tư không nhỏ đối với một công ty như bên mình.

Làm một ứng dụng hybrid giải quyết được vấn đề này, khi mà sự thay đổi diễn ra từ từ và liên tục trên một vùng nhỏ nhỏ trước, mọi người sẽ có thời gian để chuẩn bị và tiếp thu cái mới. Hiện tại tuổi trung bình của các thành viên trong team mình vào khoản 35. Khổng Tử ngày xưa có câu "tam thập nhi lập, tứ thập nhi bất hoặc". Do đó với cái độ tuổi như trên mà chúng ta muốn thay đổi kiểu "năm sau chúng ta sẽ lên mặt trăng", "tôi sẽ là triệu phú trước 30 tuổi" thì sẽ bị cho ăn gạch ngay lập tức. Ở tuổi này chúng ta cần sự chắc chắn, làm phát nào trúng phát đó, vì thời gian không cho phép quá nhiều sự sai sót. Làm từng bước nhỏ, nhanh, không nôn nóng, đều đặn là yếu tố then chốt dẫn tới thành Rome.

Một vấn đề thứ 2 nữa và cũng khá tế nhị, công việc càng khó thì đòi hỏi người càng có nhiều kỹ năng và sự hiểu biết. Rút ra những người này đi làm việc gì đó khác sẽ tạo nên những khoản trống và đâu đó sẽ ảnh hưởng tới hoạt động của công ty. Hybrid app sẽ giải quyết việc đó bằng cách chuyển đổi từng phần nhỏ, mỗi người trong team sẽ làm một phần đó, dù người đó ở bất kì trình độ nào. Kết quả là trường hợp bất kể phần người đó thất bại thì mình cũng chỉ mất một phần thôi, phần còn lại những người khác sẽ "bù lỗ" cho cái chưa hoàn hảo đó.

Mình tin chắc chắn rằng để làm một cái gì đó vượt năng lực xử lý một người thì việc chúng ta có thể chia nhỏ nó ra và phân cho từng người làm sẽ giúp chúng ta có thể thực hiện được những việc lớn hơn là chìa khóa ở đây (nhưng đừng giao thẻ tín dụng nhé).

Triển khai Hybrid App gặp rủi ro gì?

Rủi ro đầu tiên có thể thấy được đó chính là với khối lượng công việc lớn cộng với hybrid-app là cách giải quyết phức tạp nhất so việc chúng ta bỏ đi xây lại hay tiếp tục sủ dụng công nghệ cũ thì công việc càng nhiều hơn. Nói thêm công việc này sẽ càng khó khăn hơn nếu ứng dụng của chúng ta có nhiều phiên bản, nhiều người dùng.  Nhưng cái này sếp lo được nha, tuyển thêm 500 anh em vô là được thôi!!

Một đặc thù của bên mình đó chính là một phần mềm sẽ bán cho nhiều công ty bảo hiểm khác nhau. Và điều quan trọng là mỗi công ty là một biến thể hoàn toàn khác so với bản gốc, công ty mình hiện có khoản 20 khách hàng như vậy. Điều này có nghĩa là bạn làm một tính năng nào đó thì có thể bạn phải làm khối lượng x20 lần so với làm bình thường.

Bây giờ mà mình triển khai thêm công nghệ mới và cũ đang xen vào nhau thì vô tình ta lại x2 khối lượng công việc, vậy tổng lại là x40 lần. Đương nhiên là chúng ta có những cách làm thông minh để né đi trường hợp xấu nhất đó. Ở đây mình chỉ muốn phân tích để cho chúng ta có được một bức tranh là coi chừng phải cày như trâu, việc sml như chơi...

Một rủi ro khác của cách làm này đó chính là việc làm theo kiểu "cuốn chiếu". Cách nào này dễ bị một vấn đề là con đường mình đi phía trước có thể gặp phải hố "boom" bất cứ lúc nào? Thực tế quá trình mình triển khai có thể nói là đôi khi muốn khóc luôn, vì cái gì xịn quá đôi khi lại không thể làm được những cái mà đồ cổ làm được. IPhone tuy xài tốt nhưng không thể trụ pin được một tuần. Làm phần mềm cũng tương tự như vậy.

Cuộc gọi 20 phút!

Ok..bài khá dài rồi, mình xin được phép thuật lại nội dung cuộc họp với CEO công ty, bữa họp đó 5 người bao gồm cụ CEO, anh Product Owner (PO), anh Lead (Lead), anh Scrum Master (SM) vs mình (ricky, kiki, culi,...). (Mình là thằng thấp cổ nhất trong nhóm đó). Trong đó CEO và Product Owner là bên nước bạn, 3 người còn lại bên Việt Nam.  Lưu ý là trong 5 người thì CEO là chú ít biết công nghệ nhất nha, còn 4 người còn lại gốc kỹ sư đi lên.


  • SM: Như mọi người đã biết, chúng ta đã có những bước nghiên cứu chạy thử nâng cấp Angular, hôm nay mình sẽ bàn kĩ hơn về chuyện này. Ricky, chú em bắt đầu đi...(mình có timebox 30 phút thui nha, không nghe cắt ch**)

  • Me: Dạ, như mọi người đều biết là chúng ta đang bị vấn đề phải dùng AngularJS hơn 4 năm trước rồi và theo như Google thông báo thì họ sẽ không hỗ trợ AngularJS từ cuối năm 2021. Mấy năm gần đây công ty có thêm nhiều khách hàng và yêu cầu về chất lượng bảo mật đối với paris-web ngày càng cao như mấy tháng trước chúng ta phải giải quyết chuyện kiểm thử bảo mật của đối tác vì vậy dùng AngularJS sẽ mang nhiều rủi ro và gánh nặng cho công ty

  • Me: Em với anh Lead có bàn với nhau giả sử nếu mình viết lại nguyên cái app này cho dù bằng React hay VueJS thì mất ít nhất 2 năm cho team 5 người toàn thời gian, theo em thì việc này ảnh hưởng tới việc mở rộng công ty của chúng ta. Do đó em đề nghị một cách đó chính là mình sẽ làm app dạng hybrid, tức là mình sẽ phát triển những tính năng mới bằng Angular 11 và dùng lại những gì chúng ta đã phát triển 6 năm qua. Còn những gì cũ thì mình tiếp tục bảo trì, bảo dưỡng. Em tin chắc rằng việc này có xác suất thành công khoản 50% và hiện tại sau một vài lần thử nghiệm thì mình đã có vài kết quả nhất định như là đã chuyển sang dùng Webpack.

  • (Webpack, ReactJS, VueJS là tên mấy công nghệ phổ biến làm web hiện nay)

  • Me: Theo kế hoạch của em thì mình có thể làm nó thành 3 giai đoạn.

  • Me: Giai đoạn 0 là nghiên cứu là có mẫu chạy thử với chuyển sang dùng Webpack là mình đã hoàn thành 99%. Giai đoạn 1 là sẽ khởi chạy hybrid app cho 10 cái ứng dụng mình đang có và mất khoản 3 tháng. Giai đoạn 2 các thành viên khác của team sẽ join vào phát triển hybrid-app và hybrid-components. Giai đoạn 3 là sẽ dùng công nghệ mới cho module mới của hệ thống và xóa dần các module cũ.

  • (Nói thêm khúc này là mình có liệt kê cụ thể ra những gì cần làm rồi show số liệu abc các kiểu nha)

  • Me: Mục tiêu là tới tháng 8/2021 mình có thể phát triển tính năng mới với Angular 11. Em đảm bảo quá trình nâng cấp sẽ không ảnh hưởng tới năng suất hoạt động của team và công ty. Ai đang làm gì thì vẫn làm cái đó, cho tới tháng 8. Kế hoạch là như vậy thì theo bác CEO, anh PO mình có ý kiến gì không?

  • PO: Như kiki đã nói, việc upgrade là cần thiết vì nó mang lại nhiều giá trị cho công ty, việc sử dụng công nghệ cũ làm mọi người khó tuyển được người để mở rộng công ty. Và theo tôi thì đây là thời điểm thích hợp để mình có thể bắt đầu việc nâng cấp. Tuy nhiên tao không thể để mày làm 100% thời gian được (mình đã liệu được kèo này) vì mày cũng đang làm mấy cái quan trọng khác...

  • Lead: Như PO đã nói việc nâng cấp là cần thiết vì bây giờ khó kiếm được người biết AngularJS mà senior, vì nếu mình nâng cấp được lên Angular 11 thì sẽ có thể đảm bảo việc phát triển lâu dài cho ứng dụng. Và như kiki đã nêu trên, bây giờ viết lại mất khoản 3 năm ít nhất..tao tin là làm cái này có thể có lâu hơn dự tính nhưng vẫn có triển vọng thành công..

  • CEO (cụ giờ mới nói): Vậy tại sao mấy chú em lại chuyển Webpack để làm gì, bước 0 thì liên quan gì nâng cấp AngularJS? (Cụ hỏi xoáy)

  • Lead: Đổi qua Webpack để mình có thể tách front-end ra độc lập với PHP, nó là một bước đệm quan trọng để mình có thể nâng cấp lên Angular 11. Nếu không làm bước này thì không thể nâng cấp lên Angular 10 được.

  • Me: Đổi qua webpack là gần như bắt buộc, vì gần như cho dù mình xài ReactJS hay VueJS thì đều phải có webpack. Cho dù việc nâng cấp AngularJS này thất bại thì mình đổi qua Weback cũng sẽ làm được nhiều việc khác nữa. (lại chơi chiêu xấu nhất ta vẫn có lời nha sếp)

  • CEO: Giai đoạn 1 mất 4 tháng là cho cả team hay mấy người em? Team không tham gia được à?

  • Me: Giai đoạn 1 chủ yếu là làm khung xương nên em sẽ làm chính..sang giai đoạn 2 khi angular 11 Engine chạy được rồi thì team có thể tham vào hỗ trợ..Và như chú đã biết, em cũng dùng khoản 50% thời gian vào giai đoạn một mà thôi vì cái này khá khó và mới nên không thể làm cả ngày được vì rất tốn sức và không hiệu quả.

  • PO: Theo anh thấy ý tưởng hybrid app khá hay để dùng lại những gì mình đang có nhưng như em biết đó mình có vài thư viện khá phức tạp như cái date-picker chẳng hạn. Và 2 nền tảng gần như khác nhau hoàn toàn..theo anh việc dùng lại nó là rất khó thực hiện, trường hợp xấu nhất mình có thể viết mới nó hoàn toàn không?

  • Me: Trường hợp date-picker thì em không chắc có làm được không, nhưng em cũng đã chỉ ra rằng cho cái data-table thì mình dùng lại được, vậy là có thể dùng lại 30% những gì mình đang có. Còn trường hợp xấu nhất thì mình có thể viết mới hoàn toàn cái date-picker đó. Và như PO biết đó dù đây là gần như 2 nền tảng khác nhau, tuy nhiên bản chất những cái này vẫn là Javascript vẫn chạy trên Google Chrome, vẫn chung một cái nhà, kèo xấu nhất mình sẽ viết thêm lớp giao tiếp giữa hai nền tảng này với các pattern như Observable, Event, Factory...cái này thì mình làm được dù hơi tốn sức...

  • PO: Ok...(có vẻ vẫn ko tin tưởng lắm)

  • Me: Em xin bổ sung chổ này..có vài người trong team hỏi rằng, nỗi đau AngularJS thì ai cũng rõ..vậy giả sử 5 năm nữa Google bỏ luôn Angular thì sao?

  • Me: Không giống như AngularJS, thì Angular 11 đã được Google sử dụng trong rất nhiều sản phẩm của Google và cụ thể hơn như là Google Analyst đang chạy kiểu hybrid app. Một công ty dù lớn như Google cũng sẽ không rảnh mà thay bỏ đi tất cả các sản phẩm của mình mà viết lại thành một cái nền tảng khác. Mà cho dù họ có bỏ đi chăng nữa (đời không thể biết trước được) thì với một số lượng lớn các sản phẩm của Google thì việc này sẽ tốn thời gian hàng năm và chúng ta có thời gian để ứng phó.

  • Me: Còn nữa, ở việt nam thì có 1 một bạn là Google Expert mảng Angular, bạn đó nói với em là kèo này có thể thành công ạ.

  • CEO: Cảm ơn Kiki, việc nâng cấp AngularJS lên Angular là một bước ngoặc của cả công ty, chú mong đợi thấy được sự thay đổi trong năm nay, điều em làm có ý nghĩa quan trọng cho sự phát triển lâu dài của công ty..(xong, cụ đã bật đèn xanh kèm theo thời hạn làm xong!!)

  • Me: Ok..cảm ơn đại ca, em sẽ cố gắng mà em báo trước là 50% có thể thất bại và có thể kéo dài tới cuối năm vì cái này khá mới và không ai trong team có kinh nghiệm cả...

  • SM: Ok..vậy là chúng ta sẽ nâng cấp lên Angular 11 trong thời gian tới, lưu ý là nếu mình làm nhiều version thì phải tốn thời gian gấp đôi, vậy nền mình cần có một cuộc hợp khác với các quản lý dự án PO nha, để sấp xếp thời gian và chuẩn bị cho việc thay đổi..

  • PO: OK..cảm ơn mọi người..làm ơn gửi email cho tao ha..nhớ kêu chị nhân sự với quản lý dự án nữa..Cảm ơn mọi người..The storm is comming...


Xong rồi đó, chuyện này xảy ra cũng gần năm rồi, bây giờ mới dám kể lại cho anh em nghe chơi. Câu chuyện nó dài hơn như vậy và cũng chi tiết hơn. Hai anh Lead vs SM cũng đỡ đòn cho mình nhiều lắm.  Sau đó là 4 tháng mình ôm cái hành đó và có bản tích hợp hoàn chỉnh 90% vào đầu tháng 8/2021. Lưu ý là trong đó có cái đoạn chỉ làm 50% thời gian có vẻ như là bị ép, cái này mình cũng ko chắc lắm chỉ là cho dù PO không nói vậy thì mình cũng không làm 100% thời gian. Đơn giản lý do rất dễ hiểu là lỡ như mình thất bại thì lúc review lương sẽ không thuận lợi cho mình, dù sao còn 50% kia coi như là chừa rủi ro trong trường hợp xấu.

Lời kết

Việc nâng cấp vẫn diễn ra và chưa hoàn thành, mình hi vọng rằng quá trình này sẽ kết thúc sớm và chúng ta lại bắt đầu làm những thứ thú vị hơn. Đâu đó mình chỉ muốn nói là công việc tưởng chừng vấn đề công nghệ là cái gì đó then chốt thì thực ra yếu tố về hoàn cảnh, về cách mình triển khai lại là thứ ảnh hưởng nhiều nhất tới thành quả. Quá trình mình đàm phán với sếp mình chưa từng nói hoặc nói rất ít những thứ liên quan tới công nghệ và kỹ thuật. Không đao to búa lớn, chịu khó lắng nghe anh em team mình cần gì, sếp mình cần gì, khách hàng cần gì, chịu khó một chút, chịu thiệt một chút, lương ít một chút đôi khi lại có gì đó hay hay.

Hi vọng đọc tới đây anh em nào có nỗi khổ chung giống mình, có thể kết bạn chia sẽ kinh nghiệm, công ty nào đang gặp vấn đề với AngularJS có thể kết nối, biết đâu cùng nhau chúng ta lại tìm được vài con đường ngắn hơn thì cuộc đời sẽ hạnh phúc biết bao.

Chúc anh em nghỉ lễ vui, an toàn, chích ngừa đầy đủ...

Ricky Nguyễn

Ricky Nguyễn

HCM