Dịch bài của Tim Gorman viết trên www.simple-talk.com viết ngày 16/10/2006

Bài viết này tuy cách đây gần 10 năm. Nhưng tính thời sự vẫn còn nhiều vì sự thành hay bại khi thiết kế, phát triển, vận hành một hệ thống công nghệ tin rất mong manh. Tên trong bài viết đều đã được thay đổi để bảo mật thông tin. Tập đoàn trong bài không còn nữa.

Giới thiệu về Vision

Những anh em làm CNTT đều đã từng làm việc cho 1 dự án mà trong đó điều quan trọng nhất không phải là đúng hay sai. Chúng ta biết điều đó, hầu hết mọi người biết điều đó nhưng không ai có đủ khả  năng để chạm tay vào vấn đề theo cách thuyết phục nhất. Chúng ta  không thể có một lập luận thuyết phục vì hiện giờ chúng ta đang thiếu kinh nghiệm. Có một câu ngạn ngữ cổ : “Kinh nghiệm là những gì bạn nhận được ngay lập tức khi bạn cần nó”.

Đây là câu chuyện về 1 dự án IT đã thất bại đau đớn nhất mà tôi từng biết. Kết quả của dự án là việc giải tán hoàn toàn bộ phận IT, tiếp đó là việc biến mất của một công ty đang phát triển triển. Chúng ta sẽ gọi công ty đó là “Upstart” . Một công ty đã từng rất thành công và thu được lợi nhuận từ dịch vụ kinh doanh gói truyền hình. Upstart tại thời điểm đó là công ty con của một tập đoàn truyền thông khổng lồ mà chúng ta sẽ gọi là “BigMedia".

Học lập trình trực tuyến cơ bản đến nâng cao
Mô hình minh họa hệ thống CRM

Dự án bắt đầu vào đầu những năm 1990, dự án xây dựng một hệ thống quản lý đơn đặt hàng và ứng dụng hỗ trợ khách hàng, (hệ thống này tương tự với hệ quan hệ khách hàng CRM hiện nay).Các chức năng chính của hệ thống gồm có:

  • Nhập lệnh đặt hàng , hệ thống kho hàng.

  • Dịch vụ chăm sóc hỗ trợ khách hàng.

  • Hệ thống quản lý tài chính: sổ cái, thu, chi…

Ứng dụng này được gọi là “Vision” cái tên mang rất nhiều hi vọng của Upstart và cái gật đầu của kiến trúc sư hệ thống của họ. Ứng dụng kỳ vọng là rất sáng tạo, được xây dựng để đáp ứng mọi thay đổi trong tương lai. Không chỉ là những thay đổi trong tương lai gần về hoạt động kinh doanh và cả những thay đổi hoàn toàn về loại hình kinh doanh. Đây thực sự là một ý tưởng khá táo bạo và Vision sẽ là ứng dụng đầu tiên được xây dựng, Nó đạt được sự linh hoạt này bằng khả năng hướng dữ liệu (data driven: bảng dữ liệu kiểu gì, thì form nhập sẽ tự sinh kiểu đó), cung cấp khả năng trừu tượng hóa vô hạn và sử dụng các kỹ thuật lập trình hướng đối tượng tiên tiến nhất lúc đó.


Giống như rất nhiều dự án quan trọng khác, dự án được phát triển trong 2 năm dài hơn so với dữ định ban đầu hơn 1 năm. Việc kéo dài thời gian hoàn toàn có thể chấp nhận được vì đây là một ứng dụng có thể sử dụng mãi mãi, hứa hẹn đem về lợi nhuận trong tương lai rất lớn (ROI: Return of Investment). Khi ứng dụng hoạt động, hầu hết mọi người trong công ty đã đặt cược số phận của công ty cho sự thành công của nó.

Tuy nhiên, ứng dụng bị trục trặc khi đang chạy trên hệ thống của công ty đa quốc gia. Điều này ảnh hưởng lớn đến việc kinh doanh của công ty trong thời khi bùng nổ của internet. Trong vòng 1 tháng từ khi hoạt động, nó được nhận ra là một cấu trúc thất bại.  Sau đây là tóm tắt thời gian phát triển dự án:

  • Mùa thu năm 1991: Dự án bắt đầu được phát triển, trong phiên họp quyết định mua hay xây dựng thì Upstart quyết định sẽ xây đựng một hệ thống CRM của riêng mình.

  • Tháng 9 năm 1993: Ứng dụng bắt đầu hoạt động với rất nhiều mong đợi và kỳ vọng.

  • Tháng 10 năm 1993: Ứng dụng thể hiện hiệu suất nghèo nàn và không có khả năng tạo báo cáo.

  • Tháng 11 năm 1993: Chán chường

  • Tháng 12 năm 1993: Tuyệt vọng và trưởng phòng IT xin từ chức.

  • Tháng 1 năm 1994: Sa thải, bộ phận IT bị giải tán.

  • Tháng 2 năm 1994:Tuyển dụng những gương mặt mới.

  • Tháng 3 năm 1994: Thay đổi hệ thống đã chọn, và trong phiên họp quyết định mua hay xây dựng, công ty chọn việc mua sau đó cấu trúc lại.

  • Tháng 11 năm 1994: Hệ thống mới hoạn động, Vision bị giải thể.

  • Tháng 3 năm 1995: BigMedia bán Upstart.

Sự sụp đổ hoàn toàn kéo dài trong 3 năm, từ khi thành lập đến khi công ty trở về với cát bụi, dự án đã tiêu tốn hết 10 triệu $. Các vụ việc tương tự lúc đó vẫn còn khá là hiếm cho đến khi bong bóng internet vỡ vào năm 2001.

Học lập trình trực tuyến chất lượng
Thống kế tỷ lệ thất bại của dự án CRM

Tìm hiểu về Vision

Vision được thiết kế và xây dựng bởi 1 người tên là Randy. Randy là một tín đồ của ngôn ngữ lập trình hướng đối tượng và lập trình module hóa Ada. Đi lên từ kỹ sư phát triển sản phẩm,Randy chuyển đến bộ phận tư vấn của Oracle nơi anh ấy được đánh giá là 1 người tài năng hay đùa cợt, độc đoán và thiếu kiên nhẫn. Rõ ràng đây là kế hoạch marketing khá ổn.

BigMedia chỉ định Randy tham gia giai đoạn đầu: xây dựng chiến lược Vision tại Upstart năm 1991. Không đợi quá lâu, Upstart nhận ra rằng họ có trong tay một kiến trúc sư hệ thống có thể trả lời được tất cả vấn đề. Với mỗi yêu cầu của họ Randy đều có một giải pháp:

Xây dựng dịch vụ khách hàng và quản lý đơn hàng tin học hóa mọi tương tác với khách hàng.

Upstart muốn một ứng dụng có giao diện tốt hơn cho các đại lý của họ. Họ cũng muốn hệ thống có khả năng thu tập thông tin khách hàng đầy đủ khi các đại lý tương tác với khách hàng. Những hệ thống như vậy hiện giờ rất phổ biến nhưng vào đầu những thập niên 90 thì khí quyết định mua hay xây dựng thì việc xây dựng vẫn được ưu tiên hơn. Randy hứa sẽ xây dựng một ứng dụng có thể làm được mọi việc.

Phải nhanh và đáng tin cậy

Upstart dành rất nhiều tiền cho cơ sở hạ tầng IT của họ. Họ những máy chủ lớn nhất, có độ tin cậy cao nhất và ứng dụng những công nghệ cơ sở dữ liệu tốt tân vào thời điểm đó (Oracle 7 ra mắt năm 1992 hỗ trở đảm bảo tính thông nhất giữa dữ liệu quan hệ, stored procedure and trigger). Theo như ý tưởng của họ, Vision sẽ hoạt động rất nhanh vì nó sử dụng hệ thống phần cứng và phần mềm tốt nhất.

Phải linh hoạt để có thể đáp ứng được mọi yêu cầu mới

Đây là yêu cầu khó nhất  và cũng chính là điều Randy đã gây ấn tượng mạnh đến với mọi người. Trong hệ thống máy tính, luôn có một mối quan hệ ràng buộc giữa ba yếu tố: tốc độ, độ tin cây và sự linh hoạt. Đó thực sự là tam giác quỷ với công nghệ thông tin (khó đạt được cả 3). Thông thường, người ta chấp nhận chọn 2 trong 3.

Nhà cung cấp nào cũng hứa với Upstart  rằng sản phẩm của họ có thể đáp ứng được các yêu cầu hiện tại, tốc độ, độ tin cậy. Thế còn sự thay đổi thì sao ?  Những yêu cầu trong tương lai ?. Vấn đề bắt đầu nảy sinh. Các nhà cung cấp thừa nhận với mức độ tin tưởng nào đó rằng cần có một giao diện lập trình ứng dụng hoặc API cho phép chỉnh sửa và tùy chỉnh các ứng dụng. Làm thế nào để nó có thể dễ dàng sửa đổi ? Đấy là mục tiêu mà nhà cung cấp dịch vụ cũng hướng đến !

Randy đề xuất xây dựng từ đầu một ứng dụng hoàn toàn theo hướng dữ liệu. Hầu hết các ứng dụng cơ sử dữ liệu được viết bằng các mã sử dụng các ngôn ngữ lập trình để truy vấn dữ liệu. Mã nguồn phải sửa rất mất công khi cấu trúc dữ liệu, hay nghiệp vụ thay đổi.

Khoảng năm 1992 - 1995, lúc này Visual Basic là ngôn ngữ lập trình rất phổ biến được ưa chuộng. Để một ứng dụng Visual Basic nối vào cơ sở dữ liệu Oracle. Lập trình viên sẽ phải thiết kế form Visual Basic, viết mã, mã sẽ gọi hàm ODBC.  Rồi hàm ODBC gọi tiếp xuống ODBC driver, driver kết nối vào máy chủ Oracle. Lệnh truy vấn SQL hay lệnh gọi Stored Procedure sẽ được phân tích và biên dịch trước trong Oracle để tối ưu tốc độ cho lần gọi tiếp theo.  Nếu bảng trong CSDL Oracle đổi thì lệnh SQL phải thay đổi, mã Visual Basic cũng phải đổi, rồi form giao diện cũng phải đổi nốt. Ứng dụng desktop mà thay đổi thì phải biên dịch, cài đặt lại trên tất cả máy trạm.

Học lập trình kiếm việc làm
Tạo kết nối ODBC trong Windows 3.1 đến Oracle 7.x

Ý tưởng của Randy là tất cả các biểu mẫu nhập liệu, báo cáo và cả những hàm hệ thống sẽ được lưu như một metadata (thông tin định nghĩa cấu trúc). Và sẽ chỉ cần lập trình “động cơ” để có thể xử lý cả metadata và data. Ví dụ, thay vì định nghĩa một bảng chỉ lưu trữ thông tin đặt hàng trực tuyến, tại sao không lưu trữ cả những logic kinh doanh như thêm, sửa, xóa thông tin đặt hàng trong bảng cũng như chi tiết về cấu trúc của một đơn đặt hàng trực tuyến. Một khi “động cơ“ được xây dựng thì sẽ không cần phải lập trình thêm nữa, quá tuyệt vời. Sau đó, “động cơ" này sẽ xử lý metadata và data từ mọi form, báo cáo, chương trình được tạo ra. Khi thêm tính năng mới hoặc sửa đổi bạn chỉ cần phải thay đổi metadata không cần phải thay đổi mã.

Về mặt lý thuyết, điều này cho phép thay đổi nhanh chóng vì trong khi thay đổi mã lập trình cần thời gian biện dịch lại và triển khai, cài đặt lại, còn việc thay đổi metadata không cần làm như vậy.

Thực ra ý tưởng của Randy rất hay. Tập đoạn SAP của Đức cũng xây dựng công nghệ kiểu như Randy cho hệ thống ERP. Phần core xử lý rất phức tạp - tinh tế thì họ đóng mã. Lập trình viên ứng dụng (application developer) chỉ viết mã kịch bản hoặc cấu hình nghiệp vụ thôi.  Ở Việt nam, cũng có một công ty xây dựng phần mềm kế toán với cơ chế hết sức động người phân tích nghiệp vụ có thể kéo thả , định nghĩa cột trong bảng, chọn các tập luật để kiểm tra dữ liệu (validation rule), ứng dụng sẽ tự động thích ứng. Cái hay là người phân tích nghiệp vụ sẽ không phải biết code, không xem được code. Nhưng đó là công nghệ của năm 2010-2011. 

Randy đã hiện thực hóa được các lời hứa đó như thế nào chờ phần hai. Giờ đội mình phải code kiếm cơm đã.

Học lập trình xin việc làm
Thiết kế form bằng kéo thả trong Visual Basic 4, OS Win95 thần thánh