Newton Protocol đang tạo ra những trải nghiệm gì cho developer?
Tối hôm qua, mình ngồi ăn với Oanh-một phú bà đang mở một nhà hàng hải sản. Oanh ấy kể rằng tuần nào cũng đổi một vài món trong menu. Mình khá ngạc nhiên. "Tần suất thay đổi thế này không sợ khách khó theo à?" Oanh lắc đầu. "Mình không đổi cả menu. Mình chỉ thử một món mới mỗi lần. Nếu khách không thích thì bỏ luôn. Chi phí của một lần thử đủ nhỏ nên mình chẳng có lý do gì để ngại thử tiếp." Câu nói đó làm mình nhớ đến phần Testing Policies & Oracles trong docs của Newton Protocol. Ban đầu, mình chỉ nghĩ đây là một quy trình testing được viết chi tiết hơn bình thường. Thay vì nói chung chung "test trước khi deploy", @NewtonProtocol tách thành nhiều bước rất rõ: Unit Test cho Rego Policy, test riêng từng WASM Oracle, rồi mới Simulation toàn bộ policy trước khi đưa lên mạng lưới. Nhưng càng đọc, mình càng thấy họ không chỉ đang sắp xếp lại quy trình testing. Mỗi lớp testing đều đưa feedback đến sớm hơn một chút. Sai ở Rego Policy được phát hiện khi policy còn đứng riêng. Sai ở WASM Oracle được phát hiện trước khi Oracle kết hợp với những thành phần khác. Chỉ khi từng mảnh đều hoạt động đúng, toàn bộ Decision mới được kiểm tra trong bước Simulation. Điều này khiến chi phí của mỗi lần thử thay đổi hoàn toàn. Nếu một Decision sai, developer không cần chờ đến lúc Deployment mới biết. Phần lớn sai sót đã được giữ lại ở lớp testing có chi phí thấp hơn nhiều. Một thay đổi nhỏ không còn kéo theo cả một vòng Deployment chỉ để nhận về kết luận rằng ý tưởng ban đầu chưa đúng. Khi chi phí của mỗi lần thử giảm xuống, hành vi của developer cũng bắt đầu thay đổi. Nếu mỗi ý tưởng mới đều đòi hỏi một vòng Deployment dài, mọi người sẽ có xu hướng chỉ chọn những phương án mà họ tin tưởng nhất. Nhưng khi feedback xuất hiện gần như ngay sau mỗi thay đổi, việc thử thêm một cách viết Rego Policy hay một Decision khác trở nên ít rủi ro hơn rất nhiều. Không phải vì xác suất thành công cao hơn, mà vì chi phí của thất bại đã thấp đi. Lúc đó mình mới nhận ra thứ Newton Protocol đang tạo ra không chỉ là một quy trình testing tốt hơn. Họ đang tạo ra nhiều Experimental Optionality hơn cho developer. Mỗi vòng feedback ngắn không chỉ giúp sửa bug nhanh hơn. Nó còn giữ lại nhiều lựa chọn hơn trong suốt quá trình phát triển. Một ý tưởng có thể bị loại bỏ rất sớm với chi phí rất nhỏ, trong khi một ý tưởng khác có thể được thử ngay sau đó mà gần như không làm chậm cả dự án. Có lẽ đây mới là điều mình thấy thú vị ở Newton Protocol. Phần lớn chúng ta thường đánh giá một quy trình testing bằng khả năng phát hiện lỗi. Mình lại thấy giá trị lớn hơn nằm ở số lượng lựa chọn mà quy trình đó giúp developer giữ lại. Khi mỗi lần thử đều trở nên rẻ hơn, hệ thống không chỉ phát triển nhanh hơn mà còn có nhiều cơ hội khám phá những Decision tốt hơn. Nếu nhìn theo góc đó, Experimental Optionality có lẽ mới là thứ Newton Protocol đang âm thầm tối ưu, chứ không đơn thuần là số lượng bài test hay tốc độ Deployment. $EVAA $NEWT #Newt
Trước khi deploy một policy, Newton Protocol yêu cầu đi qua ba bước: Unit Test cho Rego Policy, test riêng từng WASM Oracle, rồi mới simulate toàn bộ policy với real-world data. Ba bước này không đơn thuần kiểm tra từng thành phần riêng lẻ. Mà được sắp xếp để liên tục thu hẹp những điều còn chưa biết về một decision. Sau round validation, scope của những gì phải chờ đến deployment mới xác nhận lại ngày càng nhỏ đi. Thông thường, deployment là thời điểm quan trọng nhất để biết một decision có hoạt động như kỳ vọng hay không. Dù đã trải qua nhiều round testing, môi trường production vẫn là nơi nhiều đội ngũ chấp nhận học những điều họ chưa thể biết trước. Còn với Newton Protocol, phần lớn process đó diễn ra ngay trong development. Rego Policy, WASM Oracle và data được ghép lại để simulate toàn bộ decision trước khi deployment diễn ra. Điều đó khiến mình nghĩ Newton Protocol đang hướng tới kiến trúc Pre-validated Deployment. Lúc này, deployment chủ yếu trở thành bước release một decision đã được validated, thay vì là nơi hệ thống tiếp tục học xem decision đó đúng hay sai. Điều mình thấy đáng chú ý là Newton Protocol dường như đang thay đổi vai trò của Deployment. Khi Deployment không còn là nơi tạo ra Validation, nó cũng không còn là nơi hệ thống học xem một Decision đúng hay sai. Có lẽ đó mới là ý nghĩa của kiến trúc Pre-validated Deployment. Không phải một quy trình Testing đầy đủ hơn, mà là một architectural principle dịch chuyển hoạt động Validation khỏi Production. Mình khá tò mò liệu đây sẽ chỉ là một lựa chọn của Newton Protocol, hay sẽ dần trở thành cách nhiều hệ thống software được xây dựng trong tương lai? $EVAA $NEWT #Newt @NewtonProtocol