Chuyên mục
High Quality Code Base

High Quality Code Base – Cơ sở mã chất lượng cao

Kỹ thuật tại CareMessage

Là một đội nhỏ, nhanh nhẹn, có một nền tảng mã chất lượng cao là chìa khóa để hoạt động hiệu quả.

Tại CareMessage, chúng tôi đang xây dựng một nền tảng giúp hàng triệu bệnh nhân không được phục vụ tốt cải thiện sức khỏe của họ với dịch vụ chăm sóc phòng ngừa và nhắc nhở cuộc hẹn, tài nguyên địa phương và huấn luyện sức khỏe thông qua tin nhắn văn bản. Với những ý nghĩa trong thế giới thực, việc viết mã chất lượng cao để chúng tôi có thể gửi nhanh chóng và bền vững là điều tối quan trọng. Bắt đầu với quy trình phỏng vấn kỹ thuật, chúng tôi yêu cầu các kỹ sư viết mã. Tương tự như vậy, chúng tôi mong đợi họ viết các bài kiểm tra để bao phủ mã của họ. Chúng tôi có độ phủ mã từ 95-100% trên các kho lưu trữ của mình và rất cẩn thận về cách chúng tôi duy trì nợ công nghệ, xem xét nó thường xuyên và tuân theo một quy trình xác định để trả nợ. Cuối cùng nhưng không kém phần quan trọng, chúng tôi sử dụng Ansible và Terraform để duy trì cơ sở hạ tầng của mình dưới dạng mã nhằm giảm thiểu các vấn đề cấu hình sai và có một đường dẫn xây dựng CI / CD chạy trong vòng chưa đầy 20 phút sau khi hợp nhất. Tất cả các kỹ sư tham gia vào lịch trình theo yêu cầu, nhưng vì chúng tôi có cơ sở mã chất lượng cao như vậy, điều đó có nghĩa là hiếm khi có vấn đề lớn.

Engineering at CareMessage.

Đội kỹ thuật tại Sibi

Mặc dù nợ công nghệ thường có ý nghĩa rất tiêu cực, nhưng chúng tôi chấp nhận nó.

Chúng tôi biết rằng chúng tôi có khả năng phù hợp với thị trường sản phẩm mạnh mẽ, vì vậy thay vì ném nhiều thứ vào tường để xem cái gì phù hợp, chúng tôi tập trung vào các giải pháp được kiến trúc tốt với chi phí hạn chế chức năng. Điều này có nghĩa là chúng tôi rất có chủ đích về các hoạt động của mình. Nhóm nghiên cứu không né tránh nợ công nghệ. Trên thực tế, chúng tôi tin rằng nếu chúng tôi sắp xếp thứ tự ưu tiên một cách hiệu quả và lặp đi lặp lại, thì sẽ có nợ. Chúng tôi theo dõi và chủ động thanh toán nó một cách chiến lược.

Để đảm bảo cơ sở mã chất lượng cao, chúng tôi thường xuyên có các bài đánh giá mã tập trung vào chức năng làm điểm xuất phát và kiến trúc. Chúng tôi cũng đầu tư rất nhiều vào việc rút ngắn vòng lặp phản hồi của mình, tập trung vào khả năng quan sát và quyền sở hữu miền.

Engineering Team at Sibi.

Kỹ thuật tại Modern Treasury

Hai trong số ba người sáng lập của chúng tôi là kỹ sư.

Thực tế thú vị: họ vẫn là những người đóng góp số 1 và số 2 cho chuyên mục của chúng tôi (tính đến thời điểm viết bài này) mặc dù họ đã phần lớn ngừng viết mã vào khoảng năm 2020. Nếu đặc tính hoạt động của Facebook là “Di chuyển nhanh và phá vỡ mọi thứ” thì của Modern Treasury là “Làm đúng ngay lần đầu tiên.” Trong thực tế, điều đó có nghĩa là chúng tôi không có văn hóa chạy theo thời hạn; chúng tôi sẵn sàng đánh đổi tốc độ vận chuyển để có được sự chính xác. Chúng tôi nhấn mạnh điểm này bởi vì chúng tôi được giao trọng trách giám sát và di chuyển tài sản quý giá nhất của khách hàng – tiền của họ. Họ tin tưởng chúng tôi là nhà cung cấp cơ sở hạ tầng, vì vậy chúng tôi không sẵn sàng thỏa hiệp về độ tin cậy và bảo mật.

Một ví dụ đáng nhớ về điều này là cách Người đồng sáng lập và CTO của chúng tôi, Sam, đã dành vài tuần đầu tiên của công ty để mã hóa cấu hình AWS của chúng tôi trong các tệp YAML. Điều này cho phép chúng tôi sử dụng CloudFormation để cung cấp cơ sở hạ tầng của mình và đảm bảo mọi thay đổi đều được kiểm soát phiên bản và trải qua quá trình xem xét mã. Xem xét có bao nhiêu sự cố gây ra bởi những thay đổi ngẫu nhiên trong giao diện người dùng AWS, đây được chứng minh là một khoản đầu tư trả trước khôn ngoan. Chúng tôi đã có phạm vi phủ sóng 100% về cơ sở hạ tầng dưới dạng mã kể từ ngày đầu tiên, điều mà nhiều nhóm cơ sở hạ tầng của các công ty lớn hơn có thể dành nhiều năm để cố gắng đạt được.

Modern Treasury là một ví dụ tuyệt vời về “bí mật kiếm được”. Ở một khía cạnh nào đó, đó là một phép màu nhỏ khi công ty có thể bắt đầu thành công. Các ngân hàng là những đơn vị được quản lý chặt chẽ và có xu hướng cực kỳ chọn lọc khi hợp tác với các công ty công nghệ đã thành lập, chưa nói đến các công ty khởi nghiệp non trẻ. Vậy làm thế nào mà một Modern Treasury ban đầu chỉ gồm những người sáng lập lại thuyết phục một ngân hàng cấp cho họ quyền truy cập cả đọc và ghi vào tài khoản của khách hàng?

Đầu tiên, Sam, Dimitri và Matt đã làm việc cùng nhau tại LendingHome để xây dựng các ngân hàng tích hợp để xử lý khối lượng thế chấp hàng tỷ đô la. Ở đó, họ nhận ra rằng vấn đề tích hợp trực tiếp với các ngân hàng có thể ảnh hưởng đến bất kỳ công ty nào đang cố gắng chuyển tiền theo quy mô. Họ hiểu biết sâu sắc về các ngân hàng, từ cơ cấu khuyến khích đến kiến trúc kỹ thuật của họ. Các đối tác ngân hàng ban đầu như Ngân hàng Thung lũng Silicon thấy họ đáng tin cậy vì họ biết chính xác những gì cần yêu cầu và những người để yêu cầu.

Ngày nay, nhóm của chúng tôi đến từ các công ty như Stripe, Flexport, Affirm, Brex, Square, ClassPass, Segment, Microsoft và Twilio, cùng với một số nhà sáng lập YC. Shruthi, Trưởng bộ phận Kỹ thuật của chúng tôi, gần đây đã tham gia nhóm và mang lại nhiều kiến thức từ thời gian làm việc tại WhatsApp, nơi cô ấy lãnh đạo nhóm kỹ thuật thanh toán và xây dựng sản phẩm từ đầu.

Mặc dù chúng tôi rất khiêm tốn khi làm việc với những người thông minh, tài năng, nhưng chúng tôi không tìm tên công ty hoặc trường đại học nhất định trong sơ yếu lý lịch của bạn. Trên thực tế, một số kỹ sư như Ariel, có nền tảng phi truyền thống (trong trường hợp của Ariel, làm việc trong lĩnh vực CNTT trước khi trở thành kỹ sư phần mềm). Cuối cùng, chúng tôi đang tìm kiếm những người có động lực, làm việc chăm chỉ để tham gia vào nhóm của chúng tôi, những người mang lại trải nghiệm và quan điểm đa dạng. Đây cũng là thời điểm thú vị để tham gia, vì gần đây chúng tôi đã huy động được Series C trị giá 85 triệu đô la. Nếu bất kỳ điều nào trong số này nghe có vẻ thú vị, chúng tôi rất muốn nhận được phản hồi từ bạn!

Engineering at Modern Treasury.

Đội kỹ thuật tại Airtable

Airtable có một cái nhìn dài hạn.

Chúng tôi dự định xây dựng một công ty sẽ tồn tại hàng thập kỷ. Sản phẩm, nguồn vốn và vị trí thị trường của chúng tôi không chỉ tạo nên định hướng lâu dài cho đội ngũ kỹ sư của chúng tôi mà còn cần thiết. Thứ nhất, sản phẩm của chúng tôi có đủ độ phức tạp cơ bản đến mức việc tăng thêm độ phức tạp ngẫu nhiên bằng cách gánh quá nhiều nợ kỹ thuật sẽ làm tê liệt tốc độ của chúng tôi sớm hơn nhiều so với một công ty có sản phẩm mẫu điền đơn giản hơn.

Ngoài ra, chúng tôi có một sản phẩm nằm trong danh mục được phân biệt rõ ràng của riêng nó. Điều này mang lại cho chúng tôi cơ hội để xây dựng lợi thế cạnh tranh lâu dài bằng cách đổi mới, thay vì liên tục chạy đua để tạo ra lợi thế cận biên mỏng như dao cạo so với các sản phẩm cùng loại của đối thủ cạnh tranh. Sự tập trung của chúng tôi vào chất lượng mã phát triển từ nguồn gốc sâu xa trong bản chất kinh doanh của chúng tôi; nó không chỉ là mối bận tâm về thú cưng của một số kỹ sư trong nhóm của chúng tôi.

Để đạt được mục tiêu này, chúng tôi áp dụng các quy trình thực hành phát triển phần mềm chất lượng thông thường: xem xét mã, kiểm tra kiểu linting và tĩnh, kiểm tra đơn vị và tích hợp, tích hợp liên tục, QA thủ công và tự động, tự động hóa triển khai, theo dõi vấn đề và hướng dẫn văn phong kỹ lưỡng tập trung về các phương pháp giúp cải thiện độ rõ ràng của mã mà không bị xáo trộn quá nhiều. Những thực hành này không được thiết lập trong đá; chúng tôi luôn thảo luận về cách làm tốt hơn và ý tưởng có thể được đưa ra bởi bất kỳ ai từ người mới nhất đến CTO của chúng tôi.

Ở cấp độ cao hơn, chúng tôi có văn hóa lưu chuyển ý tưởng trong các tài liệu thiết kế trước khi thực hiện chúng. Khi được thực hiện đúng, quá trình xem xét thiết kế không làm chậm quá trình phát triển. Các đội giỏi luôn bùng nổ các ý tưởng. Nếu mọi người được khuyến khích chia sẻ những ý tưởng đó sớm thì các tính năng hoặc thay đổi có thể được đề xuất, thảo luận và tinh chỉnh rất lâu trước khi nhóm có băng thông để thực hiện chúng. Việc phản ánh các phương pháp tiếp cận thiết kế hoặc triển khai với tư cách là một nhóm dẫn đến sự đơn giản và rõ ràng hơn. Xây dựng những thứ đơn giản hơn, rõ ràng hơn gần như luôn dẫn đến tốc độ phát triển lớn hơn, ngay cả trong thời gian tương đối ngắn hạn.

Điều đó nói rằng, chúng tôi nhận ra rằng có những thời điểm bắt buộc phải quay vòng nhanh. Đôi khi một lỗi ảnh hưởng đến người dùng phải được khắc phục khẩn cấp và cách khắc phục rõ ràng và trong những trường hợp như vậy, chúng tôi ưu tiên một cách thích hợp. Và đôi khi cách tốt nhất để cung cấp chất lượng về lâu dài là đưa các tính năng lặp lại sớm tiếp xúc với người dùng để chúng tôi có thể học hỏi từ phản hồi của họ. Trong những trường hợp này, chúng tôi triển khai một cách chiến lược các khoản nợ kỹ thuật được kiểm soát chặt chẽ. (Một chiến thuật để chứa nợ trong những tình huống này là đảm bảo rằng các quyết định được đưa ra trong chế độ này có khả năng đảo ngược cao. Ví dụ: việc hiển thị một tính năng đằng sau một lá cờ cho một đối tượng nhỏ sẽ hạn chế sự phát triển trong tương lai ít hơn nhiều so với giao diện người dùng hoặc API công khai trong sản phẩm cốt lõi.)

Engineering Team at Airtable.

Kỹ thuật / Sản phẩm tại Reduct

Chúng tôi tránh chuyển hướng.

Chúng tôi coi trọng chất lượng hơn tốc độ – chúng tôi sẽ không vội vàng khắc phục sự cố mà dành thời gian để làm đúng. Ví dụ: chúng tôi đã chọn viết trên cơ sở dữ liệu cộng tác thời gian thực nội bộ của chúng tôi thay vì chỉ sử dụng một giải pháp có sẵn. Trong khi ngữ nghĩa và hoạt động của nó vẫn đang được phát triển ba năm sau, nó nhấn mạnh mong muốn của chúng tôi là hiểu điều gì đang xảy ra khi bất kỳ nút nào được nhấn và tin tưởng vào công việc của chính chúng tôi thay vì nhập các thư viện kém phù hợp với đặc điểm nhu cầu của chúng tôi: chúng tôi có một nền văn hóa phản đối mạnh mẽ việc thỏa hiệp chất lượng của sản phẩm để thuận tiện cho việc thực hiện với các bộ phận làm sẵn.

Chúng tôi cố gắng giữ cho mã của mình đơn giản, mạch lạc và dễ hiểu nhất có thể, điều này cho phép chúng tôi ghép nối dễ dàng hơn và có ngữ cảnh chung. Bằng cách duy trì một “viên ngọc quý” của hệ thống, chúng tôi có thể nắm giữ toàn bộ thiết kế kỹ thuật trong đầu và thực hiện những thay đổi cơ bản một cách nhanh chóng.

Engineering/Product at Reduct.

Đội ngũ kỹ thuật tại ReadMe

Tất cả các mã mới phải có thử nghiệm.

Tăng chất lượng mã là ưu tiên hàng đầu của chúng tôi. Chúng tôi có khả năng làm mọi thứ đúng đắn, ngay cả khi phải mất nhiều thời gian hơn. Mọi thứ đều là sự đánh đổi: nếu chúng tôi có thể dành một tuần để sửa các khoản nợ kỹ thuật ngay bây giờ để tiết kiệm thời gian cho chúng tôi trong tương lai, thì chúng tôi sẽ làm điều đó.

Bằng cách sử dụng cờ tính năng bên trong sản phẩm, chúng tôi có thể đảm bảo rằng khách hàng mới sử dụng các tính năng mới nhất và tuyệt vời nhất, đồng thời để khách hàng cũ có cơ sở ổn định mà không cần thay đổi mọi thứ. Nhóm Trải nghiệm sản phẩm của chúng tôi tích cực làm việc để chuyển khách hàng sang phiên bản mới nhất của các tính năng để họ có thể không dùng nữa và xóa khỏi mã. Trước đây, chúng tôi đã thực hiện việc này khi triển khai trình phân tích cú pháp Markdown mới, Cloudflare SSL và một trong những dự án lớn nhất, thiết kế tài liệu dựa trên React mới của chúng tôi.

Engineering Team at ReadMe.

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *