Tại sao những quyết định nhàm chán lại là những quyết định tốt nhất của tôi

Tôi từng nghĩ rằng trở thành một lập trình viên giỏi nghĩa là phải viết những đoạn mã phức tạp.

Tôi đã lầm.

Trong khi thiết kế một MVP cho một phòng khám y tế mà sau này sẽ trở thành một SaaS multi-tenant, tôi đã học được một bài học xương máu. Viết code là phần dễ. Phần khó là quyết định xem cái gì KHÔNG nên xây dựng.

Sự cám dỗ là sử dụng microservices, events và Kubernetes. Chúng trông rất ấn tượng trong CV. Nhưng microservices đi kèm với chi phí cao. Bạn phải trả giá bằng các pipeline phức tạp, các vấn đề về versioning và việc debugging khó khăn.

Với một đội ngũ chỉ có ba người và ít người dùng, microservices chỉ là những công việc dư thừa. Bạn đang giải quyết những vấn đề mà mình thậm chí còn chưa gặp phải.

Thay vào đó, tôi đã chọn một kiến trúc phân lớp (layered architecture) đơn giản với .NET 8 và PostgreSQL. Chi phí chỉ khoảng 30 USD mỗi tháng.

Tôi tập trung vào những quyết định thông minh, ít tốn kém nhưng sẽ rất đắt đỏ nếu muốn thay đổi sau này:

• Thêm cột TenantId vào mọi bảng ngay từ ngày đầu tiên. • Sử dụng Docker ngay từ commit đầu tiên. • Tạo một interface cho nhà cung cấp WhatsApp.

Mỗi việc này chỉ mất một buổi chiều. Chúng giúp biến các đợt migration trong tương lai thành những thay đổi cấu hình đơn giản.

Tôi cũng học được cách điều chỉnh các pattern sao cho phù hợp với nhu cầu kinh doanh.

Ví dụ, tôi đã sử dụng Outbox pattern cho các thông báo qua WhatsApp. Việc đặt lịch hẹn phải nhanh chóng và đáng tin cậy. Việc gửi tin nhắn có thể diễn ra chậm hơn hai giây. Nếu WhatsApp bị chậm, việc đặt lịch vẫn diễn ra bình thường.

Tuy nhiên, tôi đã bác bỏ "eventual consistency" đối với hồ sơ y tế. Một chẩn đoán y khoa phải chính xác và tức thời. Trong lĩnh vực y tế, các yêu cầu về pháp lý thực chất chính là các yêu cầu về kiến trúc.

Tôi cũng xem xét các con số thực tế.

Một thiết lập Kubernetes (EKS) sẽ tốn từ 545 USD đến 615 USD mỗi tháng. Một thiết lập AWS Fargate tốn từ 350 USD đến 420 USD mỗi tháng.

Như vậy là tiết kiệm được hơn 150 USD mỗi tháng. Tôi chọn Fargate vì nó đơn giản và rẻ hơn so với quy mô hiện tại của chúng tôi.

Chiến lược của tôi rất đơn giản:

  1. Sử dụng kiến trúc phân lớp trước.
  2. Sử dụng events khi các phụ thuộc bên ngoài (như WhatsApp) bắt đầu ảnh hưởng đến hệ thống của bạn.
  3. Chỉ chuyển sang microservices khi lưu lượng truy cập và quy mô đội ngũ yêu cầu.

Đừng thiết kế cho 20 khách hàng mà bạn chưa có. Hãy xây dựng cho khách hàng đang trả tiền cho bạn ngay hôm nay.

Nguồn: https://dev.to/jose_confalonieri_3891172/lo-que-aprendi-disenando-un-saas-para-clinicas-por-que-la-decision-mas-importante-fue-la-mas-4iom