Giống như rất nhiều câu hỏi trong số này, tôi nghĩ câu trả lời là:
Nó phụ thuộc
Có lý do để tin rằng việc đảm nhận vị trí mà mọi lập trình viên nên biết mọi dòng mã là sai lầm.
Nếu chúng ta giả định rằng một người nào đó có hiểu biết sâu sắc về một đoạn mã sẽ thực hiện thay đổi nhanh hơn 5 lần so với người không biết gì về nó (không phải là một bước nhảy vọt về kinh nghiệm của tôi) và mất khoảng một tháng về kinh nghiệm mã hóa để có được sự hiểu biết thực sự tốt về một mô-đun có kích thước đáng kể (cũng không phải là không hợp lý), sau đó chúng ta có thể chạy một số số (hoàn toàn không có thật và hư cấu):
- Lập trình viên A: có hiểu biết sâu sắc
- Lập trình viên B: không có
Hãy nói rằng lập trình viên A nhận được 1 đơn vị công việc được thực hiện mỗi ngày. Trong 4 tuần của 5 ngày làm việc, anh ấy / cô ấy có thể hoàn thành 20 đơn vị công việc.
Vì vậy, lập trình viên B, bắt đầu với 0,2 đơn vị công việc mỗi ngày và kết thúc với 0,96 đơn vị công việc vào ngày thứ 20 của mình (vào ngày 21, họ cũng giỏi như lập trình viên A), sẽ hoàn thành 11,6 đơn vị công việc trong cùng một Thời hạn 20 ngày. Trong tháng đó, lập trình viên B đã đạt được hiệu quả 58% so với lập trình viên A. Tuy nhiên, bây giờ bạn có một lập trình viên khác biết mô-đun đó cũng như mô-đun đầu tiên.
Tất nhiên, trong một dự án có quy mô khá, bạn có thể có ... 50 mô-đun? Vì vậy, làm quen với tất cả trong số họ mất khoảng 4 năm và điều đó có nghĩa là trung bình, lập trình viên học tập, làm việc với hiệu suất 58% so với lập trình viên A ... hmmm.
Vì vậy, hãy xem xét kịch bản này: cùng các lập trình viên, cùng một dự án (A biết tất cả và B không biết gì về nó.) Hãy nói rằng có 250 ngày làm việc trong năm. Giả sử rằng khối lượng công việc được phân phối ngẫu nhiên trên 50 mô-đun. Nếu chúng ta chia đều cả hai lập trình viên, cả A và B đều có 5 ngày làm việc trên mỗi mô-đun. A có thể thực hiện 5 đơn vị công việc trên mỗi mô-đun, nhưng B chỉ nhận được, theo mô phỏng Excel nhỏ của tôi, 1,4 đơn vị công việc được thực hiện trên mỗi mô-đun. Tổng (A + B) là 6,4 đơn vị công việc trên mỗi mô-đun. Đó là bởi vì B dành phần lớn thời gian của họ mà không có bất kỳ kỹ năng nào với mô-đun họ đang làm việc.
Trong tình huống này, sẽ tối ưu hơn khi B tập trung vào một tập hợp con mô-đun nhỏ hơn. Nếu B chỉ tập trung vào 25 mô-đun, họ nhận được 10 ngày cho mỗi mô-đun, tổng cộng 3,8 đơn vị công việc trên mỗi mô-đun. Lập trình viên A sau đó có thể dành 7 ngày cho mỗi mô-đun mà B không hoạt động và 3 ngày mỗi mô-đun làm việc trên cùng một mô-đun B. Tổng năng suất dao động từ 6,8 đến 7 đơn vị trên mỗi mô-đun, trung bình 6,9 và cao hơn đáng kể hơn 6,4 đơn vị trên mỗi mô-đun, chúng tôi đã hoàn thành khi A và B trải đều công việc.
Khi chúng tôi thu hẹp phạm vi của các mô-đun mà B hoạt động, chúng tôi thậm chí còn đạt được hiệu quả cao hơn (tới một điểm).
Đào tạo
Tôi cũng sẽ tranh luận rằng ai đó không biết nhiều về một mô-đun sẽ làm gián đoạn người làm nhiều hơn một người có nhiều kinh nghiệm hơn. Vì vậy, những con số trên không tính đến việc B càng dành nhiều thời gian cho mã mà họ không hiểu, họ càng mất nhiều thời gian hơn bằng cách đặt câu hỏi và đôi khi A phải giúp khắc phục hoặc khắc phục những gì B đã làm. Đào tạo ai đó lên là một hoạt động tốn thời gian.
Giải pháp tối ưu
Đó là lý do tại sao tôi nghĩ rằng giải pháp tối ưu phải dựa trên các câu hỏi như:
- Đội của bạn lớn cỡ nào? Liệu có ý nghĩa khi tất cả mọi người được đào tạo chéo trên mỗi phần, hoặc nếu chúng tôi có một nhóm 10 người, chúng tôi có thể đảm bảo mỗi mô-đun được ít nhất 3 người biết đến không? (Với 10 lập trình viên và 50 mô-đun, mỗi lập trình viên phải biết 15 mô-đun để có phạm vi bao phủ 3x.)
- Doanh thu nhân viên của bạn thế nào? Nếu bạn chuyển qua nhân viên trung bình 3 năm một lần và mất nhiều thời gian hơn để thực sự biết mọi ngóc ngách của hệ thống, thì họ sẽ không đủ thời gian để đào tạo tự hoàn vốn.
- Bạn có thực sự cần một chuyên gia để chẩn đoán một vấn đề? Rất nhiều người sử dụng cái cớ, "nếu người đó đi nghỉ", nhưng tôi đã được gọi nhiều lần để chẩn đoán vấn đề trong một hệ thống mà tôi không có kinh nghiệm. Có thể đúng là người có kinh nghiệm có thể tìm thấy nó nhanh hơn rất nhiều, nhưng điều đó không có nghĩa là bạn không thể sống thiếu họ trong một hoặc hai tuần. Rất ít hệ thống phần mềm có nhiệm vụ quan trọng đến mức vấn đề phải được chẩn đoán trong 1 giờ thay vì 5 giờ nếu không thế giới sẽ kết thúc. Bạn phải cân nhắc những rủi ro này.
Đó là lý do tại sao tôi nghĩ rằng "nó phụ thuộc". Bạn không muốn phân chia 20 mô-đun giữa hai lập trình viên ở giữa (10 mỗi mô-đun), vì sau đó bạn không có sự linh hoạt, nhưng bạn cũng không muốn đào tạo 10 lập trình viên trên tất cả 50 mô-đun vì bạn mất rất nhiều hiệu quả và bạn không cần nhiều dư thừa đó.