Một sản phẩm kết nối có thể trông như đã hoàn thiện rất lâu trước khi khâu kỹ thuật xung quanh nó được hoàn tất. Nguyên mẫu hoạt động ổn định, dữ liệu được tải lên đám mây, ứng dụng hiển thị các giá trị chính xác và lô thiết bị đầu tiên đã đến tay người dùng. Ở giai đoạn đó, phần phụ trợ vẫn có thể đủ đơn giản để nhóm kỹ sư biết gần như từng thiết bị riêng lẻ. Việc cấp phép có thể được xử lý bằng một tập lệnh, các thay đổi cấu hình có thể được thực hiện thủ công và nếu có lỗi xảy ra, kỹ sư thường có thể trực tiếp tìm ra vấn đề.

Sau đó, thiết bị phải bắt đầu hoạt động trong thế giới thực. Một phiên bản phần cứng cải tiến thứ hai xuất hiện. Một số khách hàng vẫn đang sử dụng phiên bản đầu tiên. Các phiên bản phần mềm bắt đầu khác biệt. Cần có cấu hình mới cho một khách hàng hoặc thị trường khác, trong khi các thiết bị cũ vẫn cần cập nhật và hỗ trợ.

Không có gì thực sự bị hỏng cả. Phần mềm đằng sau thiết bị đơn giản là đã bước vào vòng đời riêng của nó.

Quá trình chuyển đổi đó rất dễ bị bỏ qua vì nguyên mẫu vẫn có thể hoạt động hoàn hảo. Nhưng một khi nhiều phiên bản của cùng một sản phẩm vật lý phải cùng tồn tại trong thực tế, hệ thống phụ trợ không còn chỉ là cơ sở hạ tầng hỗ trợ phần cứng nữa. Nó trở thành một phần của kiến ​​trúc sản phẩm.

Một nguyên mẫu kết nối hoạt động được vẫn chưa phải là một sản phẩm có thể mở rộng quy mô.

Nguyên mẫu có một nhiệm vụ quan trọng: chứng minh rằng hệ thống hoạt động từ đầu đến cuối. Thiết bị thực hiện chức năng cốt lõi của nó, phần mềm giao tiếp với hệ thống phụ trợ, dữ liệu đo từ xa được gửi đến đúng nơi cần thiết, các lệnh được gửi ngược trở lại, và giao diện di động hoặc web cho phép người dùng sử dụng chức năng đó.

Điều mà nó thường không chứng minh được là hệ thống đó xử lý sự đa dạng tốt đến mức nào.

Hai mươi thiết bị đầu tiên có thể đều chạy cùng một phần mềm, được sản xuất theo cùng một phiên bản phần cứng và được cấu hình bởi cùng một nhóm kỹ sư. Ở giai đoạn đó, việc đăng ký thủ công, thay đổi cấu hình trực tiếp hoặc một đoạn mã thiết lập nhỏ hoàn toàn hợp lý. Việc xây dựng các công cụ cấp độ sản xuất trước khi sản phẩm được chứng minh là có thể là quá sớm.

Vấn đề thay đổi khi quy mô lớn hơn. Các thiết bị có thể ngoại tuyến, được thay thế, chạy các phần mềm khác nhau và yêu cầu cấu hình khác nhau từ phía khách hàng. Bộ phận hỗ trợ phải phân biệt giữa một thiết bị chưa được cấu hình đúng cách với một thiết bị bị cấu hình sai hoặc đơn giản là không thể truy cập được.

Nợ của nguyên mẫu thường bắt đầu như thế này: không phải bằng một quyết định tồi, mà bằng một quyết định tạm thời vẫn tồn tại ngay cả sau khi sản phẩm đã được phát triển. Và một trong những điều đầu tiên buộc quá trình chuyển đổi đó phải diễn ra chính là phần cứng. Một phiên bản mới không chỉ đơn thuần thay thế phiên bản cũ; nó phải cùng tồn tại với phiên bản cũ.

Mỗi phiên bản phần cứng đều tạo ra một vấn đề trong vòng đời phần mềm.

Phiên bản phần cứng mới hiếm khi thay thế hoàn toàn phiên bản cũ. Trên thực tế, cả hai phiên bản vẫn được sử dụng, đôi khi trong nhiều năm. Thêm vào đó là lô sản phẩm chuyển đổi, một vài nhánh phần mềm và cấu hình dành riêng cho khách hàng, và hệ thống sản phẩm nhanh chóng trở nên đa dạng hơn so với mô hình sản phẩm ban đầu.

Lớp phần mềm không thể tiếp tục coi mọi đơn vị như một "thiết bị" trừu tượng. Nó cần phải biết đơn vị cụ thể đó có khả năng làm được những gì.

Phiên bản bo mạch được sửa đổi có thể sử dụng cảm biến, mô-đun truyền thông hoặc bộ điều khiển khác. Một lệnh hợp lệ cho phiên bản mới nhất có thể không được hỗ trợ bởi phiên bản cũ hơn. Giá trị hiệu chuẩn có thể thay đổi. Giới hạn cấu hình có thể thay đổi. Gói phần mềm phù hợp với một thế hệ có thể không an toàn cho thế hệ khác.

Các kỹ sư sản phẩm vật lý đã làm việc theo cách này. Hai linh kiện trông gần như giống hệt nhau không thể thay thế cho nhau nếu phiên bản, dung sai hoặc thông số kỹ thuật của chúng khác nhau. Sản phẩm kết nối tạo ra vấn đề tương tự ở phía phần mềm: nền tảng cần một cách đáng tin cậy để hiểu nó đang giao tiếp với phiên bản nào của sản phẩm vật lý và những quy tắc nào áp dụng cho nó.

Hãy xem xét một sản phẩm mà phiên bản đầu tiên sử dụng một quy trình hiệu chuẩn, trong khi phiên bản thứ hai giới thiệu một cảm biến mới và một bộ thông số khác. Đối với khách hàng, cả hai phiên bản vẫn có thể là cùng một sản phẩm. Nhưng đối với nền tảng, chúng không thể là cùng một sản phẩm.

Nếu những khác biệt đó không được thể hiện rõ ràng, chúng có xu hướng lọt vào logic ứng dụng dưới dạng các trường hợp đặc biệt. Một quy trình kiểm tra phạm vi số sê-ri. Một quy trình khác sử dụng phiên bản phần mềm làm thước đo cho thế hệ phần cứng. Quy trình thứ ba chứa một ngoại lệ được thêm vào sau khi bộ phận hỗ trợ phát hiện ra một lô hàng cũ hoạt động khác biệt trong thực tế. Không có bản sửa lỗi nào trong số này có vẻ đặc biệt nguy hiểm khi đứng riêng lẻ, nhưng khi kết hợp lại, chúng khiến mọi thay đổi trong tương lai trở nên khó hiểu hơn.

Các thiết bị phần cứng cũ hiếm khi bị loại bỏ đúng thời hạn. Các nhóm phát triển sản phẩm thường tập trung vào phiên bản mới nhất, trong khi khách hàng thường giữ lại các phiên bản cũ hơn lâu hơn dự kiến. Do đó, nền tảng phải hỗ trợ nhiều thế hệ cùng một lúc thay vì giả định rằng toàn bộ thiết bị đã cài đặt sẽ hội tụ về một phiên bản hiện tại duy nhất.

Khi điều đó xảy ra, sự phát triển phần cứng và quản lý vòng đời phần mềm trở nên không thể tách rời. Nền tảng không chỉ cần biết thiết bị đang ở đâu và có trực tuyến hay không, mà còn cần biết thiết bị đó là gì, nó có thể chạy những gì, nó nên được cấu hình như thế nào và những thay đổi nào an toàn để áp dụng.

Và trước khi có thể trả lời bất kỳ câu hỏi nào một cách đáng tin cậy, mỗi thiết bị phải được đưa vào hệ thống theo một cách nhất quán.

Cấp phát tài nguyên là điểm mà kỹ thuật thủ công không thể mở rộng quy mô được nữa.

Việc cấp phép có vẻ đơn giản khi số lượng thiết bị ít: tạo bản ghi thiết bị, nhập số sê-ri, tạo thông tin đăng nhập, gán thiết bị cho khách hàng, áp dụng cấu hình và tiếp tục. Đối với vài chục thiết bị, việc xử lý một số thao tác này thủ công vẫn có thể là lựa chọn đúng đắn.

Tuy nhiên, ở quy mô sản xuất, việc cấp phép nằm ở giao điểm của nhận dạng thiết bị, thông tin xác thực, quyền sở hữu, cấu hình và trạng thái vòng đời. Một sai sót trong quá trình thiết lập ban đầu có thể ảnh hưởng đến cách vận hành và hỗ trợ thiết bị rất lâu sau khi nó rời khỏi nhà máy.

Bảng tính có thể không còn khớp với những gì thực sự đã được cài đặt. Thiết bị thay thế cần có sự liên kết khách hàng chính xác mà không kế thừa danh tính sai. Khôi phục cài đặt gốc tạo ra một quy trình khác. Người cài đặt có thể gán thiết bị cho tài khoản sai, khiến bộ phận hỗ trợ phải xác định xem thiết bị đó đang ngoại tuyến, được cấu hình không chính xác hay chỉ đơn giản là mang cấu hình sai.

Nếu việc trả lời những câu hỏi đó thường xuyên đòi hỏi nhà phát triển phải kiểm tra cơ sở dữ liệu hoặc chạy một đoạn mã nội bộ, thì quy trình này đã không còn khả năng mở rộng cùng với sản phẩm.

Việc trùng lặp là một dấu hiệu cảnh báo khác. Mỗi biến thể sản phẩm bắt đầu có kịch bản thiết lập ban đầu, công cụ cấu hình hoặc quy trình cài đặt riêng. Những khác biệt đó có vẻ nhỏ, nhưng trách nhiệm cơ bản vẫn giống nhau. Việc cung cấp tài nguyên đã trở thành cơ sở hạ tầng nền tảng có thể tái sử dụng chứ không phải là một nhiệm vụ thiết lập gắn liền với một thiết bị cụ thể.

Và đó hiếm khi là khả năng duy nhất cần được tái sử dụng.

Lớp nền tảng nên trở thành cơ sở hạ tầng có thể tái sử dụng.

Khi nhiều sản phẩm hoặc phiên bản phần cứng có chung các nhu cầu cơ bản, một số chức năng phần mềm sẽ không còn đặc thù cho từng sản phẩm nữa. Nhận dạng thiết bị, cấp phép, kết nối, đo lường từ xa, phân phối firmware, trạng thái vòng đời, khả năng hiển thị toàn hệ thống và chẩn đoán là những ví dụ điển hình. Việc xây dựng lại chúng cho mỗi biến thể mới sẽ tạo ra nhiều mã hơn và nhiều quy trình vận hành hơn cần bảo trì mà không làm cho bản thân sản phẩm trở nên khác biệt hơn.

Các nhóm hiếm khi chủ động tạo ra sự trùng lặp này. Những khác biệt nhỏ tích lũy xung quanh mỗi sản phẩm cho đến khi nhóm phải duy trì nhiều phiên bản khác nhau của cùng một trách nhiệm kỹ thuật.

Một ranh giới rõ ràng hơn là tách biệt lớp sản phẩm khỏi lớp nền tảng. Lớp sản phẩm chứa các hành vi, quy trình làm việc, giao diện, tích hợp và logic nghiệp vụ tạo nên giá trị của một thiết bị cụ thể. Lớp nền tảng xử lý các cơ chế cần được duy trì nhất quán ngay cả khi phần cứng thay đổi.

Khi các sản phẩm kết nối vượt qua giai đoạn phát hành ban đầu, việc cung cấp thiết bị, quản lý vòng đời thiết bị, quản lý đội ngũ thiết bị và công cụ hỗ trợ trở thành cơ sở hạ tầng dùng chung thay vì các chi tiết dự án riêng lẻ. Một nền tảng IoT PaaS dành cho doanh nghiệp có thể cung cấp lớp nền tảng có thể tái sử dụng đó trên nhiều sản phẩm hoặc biến thể sản phẩm, xử lý việc quản lý thiết bị và dữ liệu tiêu chuẩn thông qua các khối xây dựng có thể tái sử dụng, trong khi các nhóm kỹ thuật tập trung nỗ lực tùy chỉnh của họ vào phần cứng, quy trình làm việc và trải nghiệm người dùng.

Nền tảng chung vẫn cần chừa chỗ cho những khác biệt thực sự giữa các sản phẩm. Một thiết bị mới có thể cần mô hình dữ liệu, quy trình cấu hình, tích hợp hoặc logic điều khiển khác nhau, và những khác biệt đó cần phải dễ dàng được tích hợp. Mục tiêu đơn giản là tránh việc mỗi sự khác biệt lại kéo theo một hệ thống đăng ký thiết bị, đường dẫn truyền dữ liệu, cơ chế cung cấp hoặc bộ công cụ quản lý thiết bị khác.

Nền tảng này có thể trông giống như gánh nặng khi nhóm đang xây dựng sản phẩm đầu tiên và trở thành một tài sản khi đến sản phẩm thứ hai hoặc thứ ba. Khi các cơ chế vận hành chung đã được thiết lập, một phiên bản mới có thể kế thừa nền tảng hoạt động sẵn có thay vì phải xây dựng một hệ thống phụ trợ khác mà nhóm sẽ phải bảo trì trong suốt vòng đời của sản phẩm đó.

Hãy tiếp tục thực hiện các tùy chỉnh kỹ thuật ở những điểm mà sản phẩm thực sự khác biệt.

Một nền tảng có thể tái sử dụng không nên làm cho các sản phẩm kết nối trở nên chung chung hơn. Nhiệm vụ của nó là loại bỏ việc thiết kế lặp đi lặp lại ở những phần không tạo ra sự khác biệt.

Việc tùy chỉnh vẫn cần tập trung vào hành vi của thiết bị, logic chuyên biệt theo từng lĩnh vực, quy trình làm việc, trải nghiệm người dùng, tích hợp chuyên dụng và cách một sản phẩm cụ thể tương tác với thế giới vật lý. Đó chính là những lĩnh vực mà các lựa chọn kỹ thuật có thể làm cho một sản phẩm tốt hơn đáng kể so với sản phẩm khác.

Điều hiếm khi nhận được sự đối xử tương tự là hệ thống vận hành xung quanh. Một phiên bản cơ bản và một phiên bản công nghiệp của cùng một loại máy có thể cần các cảm biến, bộ điều khiển và giao diện khác nhau, nhưng chúng không nên yêu cầu các phương thức riêng biệt để nhận dạng thiết bị, theo dõi phiên bản phần mềm hoặc quản lý toàn bộ hệ thống.

Tôi thà thấy các kỹ sư dành thời gian đó để tinh chỉnh cách sản phẩm hoạt động trong thực tế hơn là xây dựng lại các cơ chế mà nhóm đã có sẵn cho một sản phẩm khác. Một nền tảng chung không làm giảm phạm vi kỹ thuật tùy chỉnh; nó bảo vệ nỗ lực đó khỏi bị tiêu hao bởi cơ sở hạ tầng.

Thử thách thực sự sẽ đến khi nhóm bắt đầu sản phẩm thứ hai.

Một nền tảng tốt sẽ giúp việc phát triển sản phẩm tiếp theo dễ dàng hơn sản phẩm đầu tiên.

Nếu sản phẩm thứ hai yêu cầu gần như cùng một nền tảng công việc như sản phẩm thứ nhất, thì thực tế là rất ít thành phần đã được tái sử dụng.

Một phiên bản mới cần kế thừa những phần của mô hình vận hành không thay đổi: quy trình cung cấp, định danh, cơ chế vòng đời, công cụ quản lý đội ngũ, quy trình phần mềm, khả năng hiển thị hỗ trợ và các tích hợp chung. Nỗ lực kỹ thuật sau đó sẽ tập trung vào những điểm khác biệt — có thể là một gói cảm biến mới, một quy trình điều khiển khác hoặc một tích hợp dành riêng cho khách hàng — thay vì xây dựng lại nền tảng.

Thế hệ phần cứng mới đặt ra nhiều áp lực hơn cho ý tưởng tương tự. Khả năng của nó có thể thay đổi đáng kể trong khi các thiết bị cũ vẫn đang hoạt động. Một nền tảng hoàn thiện có thể hỗ trợ cả hai mà không buộc nhóm phải duy trì hai nền tảng riêng biệt cho những gì khách hàng vẫn coi là một dòng sản phẩm duy nhất.

Tất cả những điều này không nhất thiết phải có một hệ thống backend duy nhất. Các sản phẩm khác nhau vẫn có thể cần ranh giới kiến ​​trúc rõ ràng. Điều quan trọng là tránh việc triển khai lại cùng một trách nhiệm kỹ thuật mà không có lý do chính đáng.

Đó là khi nền tảng trở thành một tài sản chứ không phải là gánh nặng chi phí tích lũy. Bộ phận hỗ trợ có ít công cụ song song hơn để phải hiểu, các bản phát hành tuân theo lộ trình nhất quán hơn, và việc thêm một sản phẩm khác trở thành một sự mở rộng được kiểm soát thay vì một hệ thống phụ trợ khác mà công ty phải thừa kế vô thời hạn.

Hãy coi nền tảng như một phần của kiến ​​trúc sản phẩm.

Các sản phẩm vật lý được thiết kế với mục tiêu sửa đổi, bảo trì, sản xuất và đáp ứng những thay đổi trong tương lai. Các sản phẩm kết nối cần có cùng nguyên tắc đó ở khía cạnh phần mềm.

Hệ thống phụ trợ đầu tiên có thể chỉ là tạm thời. Tương tự, tập lệnh cấu hình ban đầu hoặc công cụ hỗ trợ cũng vậy. Về bản chất, không có gì sai với điều đó. Vấn đề bắt đầu khi những cơ chế tạm thời đó âm thầm trở thành kiến ​​trúc cố định trong khi bản thân sản phẩm vẫn tiếp tục phát triển.

Đến lúc đó, sản phẩm kết nối không chỉ đơn thuần là phần cứng, phần mềm và ứng dụng. Nó còn phụ thuộc vào cơ sở hạ tầng giúp nhận diện từng thiết bị, hiểu rõ khả năng của thiết bị, áp dụng cấu hình phù hợp, hỗ trợ cập nhật và giúp các nhóm kỹ thuật chẩn đoán sự cố nhiều năm sau khi xuất xưởng.

Khi lớp đó được coi là kiến ​​trúc sản phẩm, sự phân chia trở nên rõ ràng hơn: các cơ chế tiêu chuẩn vẫn có thể tái sử dụng, trong khi công việc tùy chỉnh tập trung vào những gì thực sự tạo nên sự khác biệt giữa sản phẩm này hoặc dòng sản phẩm này với sản phẩm khác.

Nền tảng mạnh nhất không chỉ đơn thuần là nền tảng cho phép tạo ra sản phẩm kết nối đầu tiên. Đó là nền tảng cho phép đội ngũ kỹ thuật xây dựng sản phẩm thứ hai, thứ ba và thứ tư mà không cần phải kế thừa một hệ thống phụ trợ mới mỗi lần.

Tác giả