Thông thường, trước khi bắt đầu một dự án mới, các bạn Dev thường không chuẩn bị một cách kỹ lưỡng. Bạn có thể ở trong nhóm dự án từ những ngày đầu tiên, thế nhưng lịch trình chạy dự án thì lại kín mít, dày đặc và bạn không có đủ thời gian để chuẩn bị. Tệ hơn là bạn sẽ thường bỏ qua một số bước và chúng có thể gây ra hậu quả không đáng có sau này. Bên cạnh đó, khi bắt đầu một dự án, nếu bạn đi sai hướng, việc quay trở lại và sửa lỗi sai hay fix bugs sẽ trở nên khó khăn hơn khi bạn đã đi được đến một giai đoạn nhất định nào đó của dự án rồi. Trong trường hợp đó thì có những nhóm dự án không thể sửa lỗi được mà phải bắt đầu dự án lại từ đầu. Vì vậy nên việc chuẩn bị kỹ càng trước khi bắt đầu dự án là điều rất qua trọng. Theo những số liệu của Projects Smart mình tìm hiểu được thì có đến hơn 30% các dự án phải hủy hay có đến 52.7% dự án trở nên tốn kém hơn gấp đôi so với dự kiến ban đầu vì không làm tốt bước chuẩn bị từ trước khi bắt đầu làm dự án. Do đó, trong bài viết này, mình sẽ chia sẻ cho các bạn về những bước quan trọng để khởi động một dự án thành công dành cho các lập trình viên nhé.
1. Thiết lập yêu cầu một cách rõ ràng.
Theo mình thì đầu tiên, các thành viên trong một nhóm dự án phát triển phần mềm cần có một cái nhìn rõ ràng về sản phẩm cuối cùng mình làm ra trước khi chuyển tới khách hàng. Càng hiểu kỹ về sản phẩm thì việc lên kế hoạch càng dễ dàng và phù hợp hơn. Để làm được điều đó thì việc hiểu nhu cầu của khách hàng là điều cần thiết. Nhìn chung thì nhóm dự án nên giúp khách hàng hiểu được những điều họ cần. Mục đích khách hàng muốn làm ra phần mềm / ứng dụng này là gì? Dựa vào những yêu cầu của khách hàng mà nhóm phát triển phần mềm sẽ tự đặt ra những tính năng mà phần mềm đó phải có và làm thế nào để đạt được những tính năng ấy. Bên cạnh đó thì việc ước tính chi phí của dự án ngay từ đầu cũng rất quan trọng. Nhóm dự án nên cùng hợp tác với khách hàng của mình để thảo luận ra được chi phí hay ngân sách cần thiết cho dự án.
Bạn sẽ không bao giờ có thể đặt ra các yêu cầu rõ ràng mà không có sự tham gia của khách hàng. Chỉ có sự hợp tác chặt chẽ với khách hàng mới cho phép bạn phát triển nền tảng dự án, vì ý tưởng rõ ràng về giải pháp giúp nhóm xác định được mục tiêu. Có các mục tiêu rõ ràng cho phép bạn lập kế hoạch và sắp xếp công việc phù hợp: ghi lại nó, chia nó thành các hệ thống con, phân công các chuyên gia về vấn đề và nhiều hơn nữa.
2. Xác định được những điều nên làm và không nên làm.
Khi dự án bắt đầu, mình khuyên các bạn Dev đừng nên nhảy vào code luôn. Nếu bạn làm vậy thì mình nghĩ khả năng cao là code của bạn sẽ trở nên lộn xộn và có nhiều bugs. Vì vậy, bạn nên học hỏi và rút kinh nghiệm từ những dự án bạn từng làm trong quá khứ, nhận biết được những gì mình làm tốt và những gì bạn còn thấy thiếu sót. Việc rút kinh nghiệm cho bản thân mình là rất quan trọng cho việc bạn muốn ở dự án này, bạn sẽ không lặp lại những sai sót giống như ở dự án trước nữa. Hãy cùng ngồi lại với team của mình và đưa ra những quy ước dành cho dự án mới, bao gồm những điều nên làm và không nên làm. Điều đó sẽ giúp dự án sắp tới của bạn tránh được những sai sót trước đây và trở nên hoàn hảo hơn.
3. Xác định được quy trình và vai trò của mỗi người.
Quyết định process sử dụng trong dự án. Thông thường mọi người sẽ lựa chọn Agile, phân chia chu kỳ phát triển với độ dài khoảng 1 tuần hoặc 2 tuần. Sau khi quyết định chu kỳ phát triển thì xác định công việc của mỗi người trong 1 chu kỳ như sau:
- Ai là project owner?
- Khi nào cần hoàn thành việc phát triển?
- Khi nào thì bắt đầu test? Khi nào test xong?
- Khi nào thì gửi kết quả công việc cho khách xác nhận? …
4. Xác định rõ được DOD (Definition of Done).
Các lập trình viên thường cho rằng một tính năng đã hoạt động một khi chúng chạy thành công trên thiết bị cá nhân của họ. Tuy nhiên thì việc hoàn thành chu trình phát triển phần mềm chứa đựng nhiều thứ hơn thế. Tính năng đó có thể chỉ chạy trên máy của bạn nên bạn cần phải test nó trên các thiết bị khác để có thể chắc chắn rằng tính năng thực sự đã hoạt động. Sau đó bạn cũng nên nhờ đồng nghiệp của mình review code hộ nữa. Điều này sẽ giúp đảm bảo được chất lượng công việc của bạn đã đáp ứng được những tiêu chí hoàn thành. Hãy luôn nhớ rằng, 99% vẫn chưa phải là hoàn thành, cho nên việc xác định rõ DOD trong từng task nhỏ sẽ giúp bạn hiểu rõ được mình phải làm đến bước nào mới được coi là hoàn thành. DOD ở đây có thể được thiết lập dưới dạng checklist những tiêu chí cần hoàn thành trước khi chuyển sang bước tiếp theo, hoặc có thể sử dụng công cụ 5W2H để xác định những bước cụ thể cần làm cho mỗi đầu công việc. Việc xác định rõ DOD sẽ giúp bạn đỡ cảm thấy mông lung hơn khi không biết mình làm thế này đã được tính là xong chưa, vì nhiều lúc mình coi là xong nhưng thực tế còn có những bước phía sau cần hoàn thành nữa.
5. Lựa chọn hệ thống tích hợp liên tục phù hợp.
Hệ thống tích hợp liên tục là thứ quan trọng đối với mỗi một dự án nếu bạn muốn có thể hoàn thành sản phẩm thành công mà không cần tốn quá nhiều công sức. Thật may mắn là có rất nhiều sự lựa chọn cho các Dev, ví dụ như Jenkins hay TeamCity. Tuy nhiên trước khi lựa chọn những hệ thống này thì bạn cần lưu ý vài điều.Thứ nhất là sự ưu tiên của các thành viên trong team. Bạn nên lựa chọn hệ thống mà các thành viên trong team đã sử dụng trước đó rồi và họ cảm thấy phù hợp với hệ thống đó. Mọi người cũng đã quen với hệ thống mình đã từng tiếp xúc rồi hơn nên không cần tốn quá nhiều công sức để học cách sử dụng một hệ thống mới. Bên cạnh đó thì vấn đề giá cả cũng cần cân nhắc kỹ khi lựa chọn một hệ thống tích hợp liên tục. Nếu hệ thống đó tốn khá nhiều tiền thì có thể những nhà tài trợ cho dự án sẽ không muốn bỏ tiền ra. Thực tế là cũng có nhiều hệ thống tốt mà vẫn miễn phí. Bạn chỉ cần dành thời gian để test chúng và lựa chọn một hệ thống phù hợp nhất cho dự án của mình.
6. Lựa chọn công cụ và ứng dụng thích hợp.
Theo mình thì bạn không nên sử dụng quá nhiều công cụ cho cùng một mục đích. Mình sẽ lấy ví dụ trường hợp nếu nhóm bạn cần phát triển một REST API.
Một trong số những Fresher Developer trong nhóm của bạn, John, cần sự trợ giúp từ các thành viên khác trong team để test endpoint đối với user creation. John nhờ sự trợ giúp từ Alex, nhưng Alex nhận ra rằng John lại đang sử dụng SOAP API để test endpoint của anh ấy. Alex thì lại là một fan bự của Postman, nên Alex tốn kha khá thời gian để hiểu cách hoạt động của tool mà John đang sử dụng. Sau vài lần thử thì Alex đành bỏ cuộc nên John chuyển sang “cầu cứu” Taylor – một Senior Developer. Taylor lại thường dùng những câu lệnh hơn nên Taylor bảo John viết lại API của anh ấy để Taylor có thể sử dụng cURL để test.
Như bạn cũng thấy rằng trong một team, việc sử dụng nhiều tool cho cùng một mục đích là rất tốn thời gian. Mình biết rằng các Dev luôn muốn được tự do trong việc sử dụng các công cụ mà mình cảm thấy quen thuộc. Thế nhưng để tiết kiệm thời gian sau này, các thành viên trong team nên lựa chọn một loại công cụ duy nhất dành cho riêng từng mục đích nhất định. Hãy cùng các thành viên thảo luận và lựa chọn công cụ phù hợp nhất.
7. Tránh việc sử dụng nhiều hệ thống quản lý tài liệu.
Một trong những điều khó chịu nhất là khi bạn cần tìm một mẩu thông tin và bạn không biết phải tìm nó ở đâu. Điều này thường xảy ra khi có quá nhiều nơi mà bạn có thể tìm chúng. Khi anh chàng DevOps muốn tìm IP của máy chủ QA, anh ấy chỉ muốn tìm ở một nơi duy nhất. Để thực hiện điều này, bạn nên chọn một hệ thống quản lý tài liệu tốt và chỉ sử dụng hệ thống đó mà thôi. Hãy sắp xếp thông tin một cách có tổ chức trong một hệ thống nhất định và bạn sẽ thấy những lợi ích mà nó đem lại.
8. Xác định được môi trường cần thiết.
Chúng ta đều biết là các Dev hay Tester đều không nên sử dụng chung một môi trường. Thế nhưng khía cạnh này thường xuyên bị bỏ qua ở những giai đoạn đầu của một dự án. Bạn nên bắt đầu xem xét những môi trường cần thiết cho các dự án của bạn sớm. Có được sự chấp thuận và thiết lập chúng có thể mất một thời gian, vì vậy, tốt hơn hết là nên bắt đầu càng sớm càng tốt.
Theo nguyên tắc, bạn nên có ít nhất bốn môi trường: phát triển, thử nghiệm (development), chấp nhận người dùng (UAT), dàn dựng (staging) và sản xuất (production). Tuy nhiên thì bạn cũng cần xác nhận lại với khách hàng là việc xây dựng các môi trường sẽ do bên nào đảm nhiệm, sử dụng môi trường gì và vẽ sơ đồ môi trường, estimate cost,…
9. Chuẩn bị codebase và cấu trúc của dự án.
Một codebase được tổ chức tốt sẽ giúp bạn đi một chặng đường dài. Bạn nên xác định các mô-đun chính của dự án, cấu trúc cơ sở mã, quy ước đặt tên tệp, quy tắc đóng gói, v.v. Làm cho nó trực quan nhất có thể, để mọi người dễ dàng tìm thấy những thứ họ đang tìm kiếm. Ngoài ra, hãy nhìn lại bài học rút ra từ các dự án trước đó và chắc chắn rằng bạn không lặp lại những sai lầm tương tự.
Trên đây là những điều mà mình cảm thấy cần thiết phải làm trước khi bắt đầu một dự án mới. Nếu bạn chuẩn bị khởi động một dự án mà không có những bước chuẩn bị kỹ lưỡng thì hãy theo những gợi ý của mình trong bài viết này nhé.