Phần mềm chất lượng đến từ môi trường làm việc

Phần mềm chất lượng đến từ môi trường làm việc
Photo by StartupStockPhotos from Pixabay

Dạo này tôi có nhiều suy nghĩ lung tung về nghề nghiệp, về công việc. Và thời điểm này, tôi nghĩ đến vấn đề chất lượng phần mềm. Có lẽ do gần đây tôi gặp nhiều trường hợp tự khoe công ty mình “làm ra sản phẩm chất lượng cao”. Nghe những câu như vậy tôi thầm nghĩ: “các ông nói mà không biết ngượng mồm”. Vì những người nói ra mấy câu đó thậm chỉ còn chẳng biết “sản phẩm” tròn méo ra sao.

Khái niệm “chất lượng phần mềm” sẽ có sự khác biệt, tùy vào góc nhìn của từng người. Với tư cách là một lập trình viên, tôi cho rằng, chất lượng phần mềm bao gồm 2 yếu tố:

  • Chất lượng chức năng: phần mềm hoạt động đúng dựa trên các yêu cầu và thiết kế, đáp ứng nhu cầu sử dụng của người dùng. Yếu tố này thường tương đối dễ đánh giá, dựa trên quá trình test cũng như ghi nhận đóng góp từ người dùng.
  • Chất lượng code: hiệu suất cao, code dễ đọc, để hiểu và dễ thay đổi. Đây là yếu tố có phần trừu tượng hơn, khó đong đếm hơn.

Chất lượng phần mềm không phải là thứ mà một vài cá nhân có thể tạo ra được. Một (hoặc một vài) cánh én nhỏ không thể làm nên mùa xuân, chất lượng phần mềm phải là công sức làm việc của cả một tập thể. Sau nhiều năm làm việc, tôi nhận ra rằng, không phải cứ pro mới làm ra được phần mềm chất lượng. Những kỹ sư với trình độ trung bình cũng có thể làm được việc đó, thậm chí có thể tốt hơn. Nhưng vấn đề là họ cần phải có môi trường làm việc tốt để tạo ra những phần mềm chất lượng.

Lại nói về môi trường làm việc, “môi trường làm việc tốt” cũng là một khái niệm rất mông lung. Mỗi người sẽ có những tiêu chí khác nhau về một môi trường làm việc tốt. Với tôi, một môi trường làm việc tốt (để tạo ra phần mềm chất lượng) bao gồm những yếu tố kiểu như thế này:

  • Có đầy đủ công cụ (máy tính, phần mềm, thiết bị test) để phát triển phần mềm. Việc phát triển phần mềm cũng như mọi ngành nghề khác, phải có công cụ chất lượng mới tạo ra được sản phẩm chất lượng. Không thể đòi hỏi một người sử dụng máy tính cấu hình đời Tống với những phần mềm thiếu hết tính năng này đến tính năng khác có thể viết ra những dòng code hay những bài test chất lượng cao được.
  • Văn hóa làm việc khuyến khích việc viết test có chất lượng. Test chất lượng sẽ tìm ra lỗi ở những giai đoạn rất sớm, trước khi nó trở thành vấn đề. Văn hóa làm việc này nghe có vẻ như là chuyện đương nhiên, ở đâu chẳng như thế nhưng thực ra không phải vậy. Test chất lượng không phải tự nhiên mà có. Nó là kết quả của một quá trình làm việc cẩn trọng, tỉ mỉ và cần nhiều thời gian để hoàn thành. Vì vậy, điểm quan trọng nhất trong văn hóa làm việc mà tôi muốn nói là việc các kỹ sư phải cảm thấy thoải mái khi yêu cầu thêm thời gian để hoàn thành công việc. Những ước lượng về thời gian hoàn thành công việc hoàn toàn có thể sai (thế mới là ước lượng) và không nên mang nó ra để đánh giá hay ép buộc (vì thường sẽ không mang lại kết quả).
  • Các môi trường dev, staging luôn sẵn sàng, dễ sử dụng và việc deploy có thể thực hiện dễ dàng. Rõ ràng, nhìn thấy sản phẩm mình làm ra như thế nào cực kỳ quan trọng, nhìn thấy nó khiến mọi người dễ dàng đánh giá được chất lượng của nó từng ngày, từng giờ.
  • Văn hóa làm việc khuyến khích viết code có cấu trúc tốt, có tài liệu rõ ràng, comment những chỗ cần thiết. Cũng tương tự như việc viết test, code chất lượng cao cũng không tự nhiên mà có, các kỹ sư lập trình phải có đầy đủ công cụ để làm việc và môi trường, văn hóa làm việc phải cho các kỹ sư thời gian và không gian để làm những việc này. Deadline là do con người đặt ra, dựa vào ước lượng thời gian. Nó hoàn toàn có thể sai, và khi nó sai thì việc cần làm là sửa lại (dời deadline), chứ không phải tìm mọi cách để biến sai thành đúng. Làm việc với áp lực làm cho xong, cho kịp thì thường sẽ không có chất lượng, mà chỉ ở mức làm đối phó, làm cho có mà thôi.
  • Môi trường làm việc cởi mở và thân thiện. Mọi người dễ dàng nêu khó khăn của bản thân và tìm kiếm sự giúp đỡ từ đồng nghiệp. Môi trường làm việc đó cũng khuyến khích mọi người làm thử và chấp nhận sai lầm. Những dòng code chất lượng cao không phải viết một lần là được ngay, sẽ phải thử đi thử lại rất nhiều lần. Có nhiều tình huống sẽ phải đập đi làm lại những gì trước đó, có thể gây ra lỗi cho những phần đã làm. Văn hóa làm việc phải khiến các kỹ sư cảm thấy thoải mái trong việc thử nghiệm những ý tưởng mới, kể cả nó có thể gây ra lỗi mới có thể tạo ra những sản phẩm chất lượng cao. Cứ giữ khư khư đống code cũ cốt sao cho chạy đúng vì ai cũng sợ trách nhiệm, sợ nọ sợ kia sẽ chỉ tạo ra một đống hổ lốn mà thôi.
  • Khi xảy ra vấn đề, không đổ lỗi cho cá nhân, không phạt và cũng không có những lời chế nhạo kiểu sao mày “ngờ u” thế. Quy trình làm việc cần được cải thiện để phòng tránh những vấn đề tương tự sẽ xảy ra trong tương lai.

Có thể còn rất nhiều yếu tố khác nữa để tạo nên một môi trường làm việc tốt, môi trường mà có thể tạo ra những phần mềm chất lượng. Nhưng tạm thời tôi không thể kể hết ra được, những ý trên là những gì nảy ra trong đầu tôi ngay lúc này. Những yếu tố này lại có sự tương tác với nhau, bổ sung cho nhau.

Hơi dài dòng, nhưng có thể diễn đạt đơn giản thế này: nếu tôi không viết được những dòng code chất lượng cao, không phải là vì tôi không làm được hay không muốn làm, mà là môi trường làm việc không cho phép tôi làm điều đó. Tôi tin rằng, ai cũng muốn làm ra một thứ hoàn hảo, hoặc ít nhất những người mà tôi biết đều như vậy. Chất lượng phần mềm cũng không phải vấn đề liên quan đến trình độ. Trình cao thì làm trong 1 ngày, trình thấp thì làm 1 tuần, ai cũng có thể làm ra những sản phẩm chất lượng.

Đây là một điều đơn giản, nhưng nhiều người làm quản lý không chịu hiểu. Cá nhân tôi cũng đã từng làm việc với nhiều người như thế. Khi có lỗi, người ta hay đặt những câu hỏi kiểu như tại sao không làm việc A, tại sao không làm việc B. Tôi thường không trả lời, mà cũng không trả lời được. Tôi hay hỏi lại rằng tôi sẽ làm những việc đó “vào lúc nào”. Người ta làm như những việc đó chỉ cần 1~2 phút là xong vậy. Có lẽ với những kỹ sư thuộc loại top thế giới thì chỉ cần vài phút thật, nhưng tôi không phải họ, và tôi cũng có được trả lương như họ đâu 😁.

Tóm lại, “môi trường làm việc” có ảnh hưởng rất lớn đến “chất lượng phần mềm” (và ảnh hưởng đến nhiều thứ khác). Muốn biết công ty có thể làm ra sản phẩm chất lượng cao hay không, cứ nhìn môi trường là việc là đánh giá được. Mấy câu quảng cáo mà không có căn cứ gì thì giá trị coi như = 0. (Còn làm ra phần mềm chất lượng trong bao lâu lại là một câu chuyện khác.)

Mà tôi thấy nhiều công ty khá lạ đời. Những bài đăng trên mạng xã hội của họ mang lại cảm giác chuyện làm ngoài giờ (OT – overtime) cho kịp deadline là chuyện đương nhiên, ai cũng thế. Họ lại rất thích ca ngợi những người OT không biết mệt mỏi. Có nơi lại đưa những bí quyết (không biết cóp nhặt ở đâu về) quản lý deadline (mà nhân viên của họ ai cũng deadline ngập đầu thì phải 🤔) mà tôi chắc đến 99.99% là vô dụng. Tôi cho rằng, văn hóa làm việc như thế là có vấn đề nghiêm trọng.

Như tôi đã nói ở trên, mà thực ra chính tôi cũng gặp nhiều, làm việc với áp lực đến ngày N giờ G phải xong trong khi thời hạn đó sai lè lè thì đúng là chỉ làm cho có mà thôi. Khái niệm “làm xong” trong trường hợp này không phải xong thật, chỉ là đối phó rằng task đã code xong còn vấn đề gì thì tính sau. Cái “tính sau” đó thường lại mất thời gian gấp dăm ba lần thời gian làm task ban đầu. Thế tại sao không làm cẩn thận ngay từ đầu? Dự là không làm “xong” thì lại không có gì báo cáo với cấp trên, báo cáo với khách hàng.

Cũng từ trải nghiệm cá nhân, với tư cách là một người làm công ăn lương, tôi nhận ra rằng, rất khó để thay đổi hay “cải tạo” môi trường làm việc có sẵn. Cách tốt nhất là đi tìm môi trường mới tốt hơn (nhảy việc) hoặc tự tạo ra môi trường làm việc mới (start up). Đó là những biện pháp đơn giản nhưng luôn luôn hiệu quả.

Tôi xin lỗi nếu bài viết có bất kỳ typo nào. Nếu bạn nhận thấy điều gì bất thường, xin hãy cho tôi biết.

Nếu có bất điều gì muốn nói, bạn có thể liên hệ với tôi qua các mạng xã hội, tạo discussion hoặc report issue trên Github.