Làm thế nào tôi có thể được trả tiền để giảm nợ kỹ thuật?


16

Tôi hiện đang làm việc cho một công ty nhỏ có ít sản phẩm phức tạp về mặt kỹ thuật. Tôi là nhà phát triển duy nhất và duy nhất cho một trong số họ. Khoảng một năm trước, tôi đã có phiên bản kế thừa của sản phẩm và bắt đầu "hỗ trợ" nó.

Khách hàng chỉ nói về tính năng mới, giá trị kinh doanh và những thứ khác. Vấn đề là, mặc dù mã nằm trong C #, nhưng nó khá thủ tục. Không có sự trừu tượng hóa, các lớp chỉ được sử dụng khi Visual Studio yêu cầu chúng - ví dụ: Biểu mẫu. Việc triển khai các lớp này thực sự khủng khiếp và mã thực sự khó duy trì.

Trong cả năm nay, tôi dành thời gian riêng cho việc tái cấu trúc. Trong phiên bản mới nhất, có khá trừu tượng và như vậy. Tôi đã phải thực hiện lại một số thành phần từ đầu và tôi thực sự cảm thấy rằng việc thêm tính năng mới hoặc thay đổi hành vi cho các thành phần này dễ dàng hơn nhiều so với các thành phần khác.

Vấn đề là, tôi dành thời gian của riêng mình. Tôi thực sự thích kết quả, nhưng tôi không thích làm việc 12 giờ mỗi ngày. Bạn đã bao giờ đến tình huống tương tự? Tôi nên thử cái gì? Tôi đã thử thảo luận về nó, nhưng vẫn không thành công.

Tôi chỉ sợ thời điểm chúng tôi quyết định triển khai tính năng mới đòi hỏi nhiều thay đổi đối với mã kế thừa. Điều đó chỉ có thể gây sốc cho khách hàng: tại sao bạn cần 8 giờ để thay đổi các biểu tượng này? Khách hàng không quan tâm rằng có 500 địa điểm trong mã mà tôi cần thay đổi. Và tôi cũng nên tìm tất cả 500 địa điểm này trước.

Có ý kiến ​​gì không?


3
Câu hỏi của bạn là gì? Nếu bạn là nhân viên, tại sao bạn có mã này và tại sao bạn lại tự sửa đổi nó? Bạn muốn gì? Để được bồi thường cho thời gian chưa trả tiền của bạn làm việc trên nó? Hay chỉ để làm việc ít giờ hơn? Nhà tuyển dụng của bạn có biết bạn đã cải thiện thời gian của mình không? Câu hỏi của bạn là không thể trả lời vì nó hiện đang được viết.
Robert Harvey

3
OK, vậy câu hỏi cụ thể của bạn là gì? Tại sao bạn muốn giữ nó theo thủ tục nếu kiến ​​trúc bạn phát triển theo thời gian của bạn tốt hơn?
Robert Harvey

8
Họ không nói ngôn ngữ của bạn, vì vậy bạn cần học ngôn ngữ của họ. Đây là cách nó rất OFTEN. Đây không phải là lý do để chạy trốn, vì nó giống như thế này ở hầu hết mọi nơi. Bạn cần một lý do nửa đúng nhưng hợp lý để đưa một lập trình viên TỐT khác lên máy bay, sau đó xây dựng thời gian bao thanh toán lại. Nếu không, hãy cố gắng hết sức để đưa ra ước tính của riêng bạn và thêm thời gian bao thanh toán lại cho bất kỳ dự án nào bạn làm Những người kinh doanh thường có một điểm mềm ở đâu đó. Một số nhiệm vụ lớn hơn những người khác trong mắt họ. Pad những cái "lớn". Ồ, và đừng quên viết bài kiểm tra :) Ngoài ra, hãy tiếp tục làm thêm giờ ngay bây giờ - invstmnt
Công việc

2
@Robert Harvey, người hỏi biết làm thế nào để làm mọi thứ đúng, nhưng bị mắc kẹt với những thứ nhảm nhí của người khác và là người duy nhất nhìn thấy nhiều rủi ro, là lỗi duy nhất của nó khi bị hỏng. Các doanh nghiệp nhỏ đang cố gắng để tồn tại và bán hàng / doanh thu - tích cực, nhưng nợ kỹ thuật gắn kết đang làm anh căng thẳng mà không có người khác nhận ra nó. Anh ta cần một lộ trình và lời khuyên cho cách thoát khỏi lỗ hổng này.
Công việc

1
Tôi đã thay đổi tiêu đề câu hỏi của bạn. Hy vọng tiêu đề mới phản ánh chính xác hơn ý định của bạn. Tôi không chắc bạn có thể phục hồi số giờ đã mất; Tôi sẽ làm những gì người khác đề xuất và thêm một số phần đệm vào một số ước tính của bạn để có một số tiền có sẵn để kết hợp các cải tiến của bạn.
Robert Harvey

Câu trả lời:


37

Bước 1: Ngừng làm việc ngoài giờ không được trả lương.

Bạn đã đào tạo khách hàng và người quản lý của mình trong một năm để tin rằng tốc độ phát triển hiện tại là điều nên được mong đợi. Đây là một phần lý do tại sao họ không hiểu tại sao một việc "đơn giản" có thể mất cả ngày để làm. Bạn không cần phải giữ chúng làm con tin và cố gắng làm tổn thương dự án. Nhưng bạn cần giải thích rằng kỳ vọng của họ quá cao và bạn cần một nhà phát triển khác hoặc nhiều thời gian hơn trước thời hạn. Đặt một điểm cần đề cập cụ thể đến người quản lý của bạn rằng bạn đã làm việc ngoài giờ không được trả lương và đang lên kế hoạch không làm việc đó nhiều như vậy. Ngay cả khi bạn cắt nó xuống còn 9 giờ, sự khác biệt sẽ được chú ý. Nếu người quản lý của bạn hỏi bạn tại sao bạn không hoàn thành công việc của mình, bạn có thể chỉ ra thực tế rằng bạn đã đưa ra một điểm để cảnh báo anh ta rằng đây sẽ là trường hợp.

Bước 2: Ghi chú

Chỉ vì bạn không có thời gian để thực hiện công việc, không có nghĩa là bạn không thể làm cho nó dễ dàng hơn khi công việc (hy vọng) được hoàn thành. Theo dõi các ý tưởng bạn có để sửa mã và đưa chúng vào các cuộc họp để những người khác nhận thức được mối quan tâm của bạn. Cuối cùng, bạn sẽ đạt được một bản vá chậm hoặc mọi người sẽ bắt đầu hiểu mối quan tâm của bạn có giá trị. Khi thời điểm này đến, bạn sẽ có một số ý tưởng cơ bản về những việc cần làm thay vì đến lúc khô ráo vì bạn đã không xem xét một phần mã trong một thời gian.


những gì bạn nói là những ý tưởng hoàn toàn tuyệt vời. Khoảng một tháng trước, tôi đã quyết định thêm các tác vụ trong trình theo dõi lỗi của chúng tôi. Tôi không quan tâm rằng nhiệm vụ này không được xác nhận, mỗi khi tôi thấy vấn đề tiềm ẩn, tôi thêm nhiệm vụ và thông báo cho khách hàng. Lần tới tôi sẽ phải sửa một cái gì đó mà tôi đã mong đợi càng sớm càng tốt, tôi chỉ nhắc nhở khách hàng về nhiệm vụ mà tôi đã tạo ra vài tháng trước. Mong rằng sẽ giúp.
Andrey Agibalov

17
"Ngừng làm việc ngoài giờ không được trả lương" nên áp dụng ngay cả khi bạn hoàn toàn yêu thích công việc. Bạn không được hưởng lợi từ giờ làm thêm của bạn; họ đang. Nếu bạn muốn dành thời gian trước máy tính, hãy làm điều đó cho các dự án của bạn, tại nhà của bạn.
Christopher Mahan

1
Sau hơn một thập kỷ trong ngành này, tôi vẫn chưa bao giờ "đạt được một bản vá chậm". Tôi đang làm gì sai?
sbi

@sbi Tôi nghĩ rằng đó có thể là "làm đúng" :)
Stephen

13

... Mã thực sự rất khó để duy trì.

Đây là cách của bạn trong quản lý. Chứng minh rằng chi phí "chỉ" sửa lỗi và thêm chức năng mới lớn hơn chi phí tái cấu trúc và viết lại mã.

Ví dụ: nếu với mã hiện tại, một tính năng mới sẽ mất 2 tuần để thêm và sau đó một lượng thời gian đáng kể để duy trì (ví dụ: 1 ngày một tuần), cho thấy rằng với việc tái cấu trúc trong một tuần, bạn có thể hoàn thành việc phát triển trong 1 1/2 tuần nhưng bạn sẽ cắt giảm bảo trì xuống còn 1 ngày một tháng (hoặc ít hơn). Những con số này sẽ cho thấy rằng những gì bạn đang làm là hiệu quả chi phí trong trung và dài hạn mặc dù có một chi phí ngắn hạn.

Mặc dù công ty có thể không thích tiêu tiền ngay bây giờ, nhưng họ sẽ thấy rằng lợi ích tiềm năng sẽ lớn hơn nhiều - tức là bạn sẽ làm việc hiệu quả hơn khi tạo ra nhiều mã hơn trong thời gian ngắn hơn và mã đó sẽ có chất lượng tốt hơn.


7

Áp dụng Quy tắc Hướng đạo Nam : Giữ mã gọn hơn một chút (nghĩa là có ít nợ kỹ thuật hơn) mỗi khi bạn chạm vào nó.

Dành thời gian để làm điều này trong tất cả các ước tính bạn đưa ra. Sau đó, kỳ diệu thay, theo thời gian, nợ kỹ thuật sẽ biến mất và bạn sẽ được trả tiền để làm điều đó.

Cách tiếp cận này là nhiều dễ dàng hơn một cách rõ ràng cố gắng để carve ra thời gian (và do đó thuyết phục khách hàng / quản lý được hưởng lương bổng) cho nợ kỹ thuật. Nó mang lại cho bạn cảm giác chuyên nghiệp hơn rất nhiều và "công việc được hoàn thành tốt". Và cuối cùng, khách hàng và người quản lý của bạn sẽ cảm ơn bạn vì điều đó trong thời gian dài, ngay cả khi họ không hiểu điều đó xảy ra như thế nào .....


Tuy nhiên, cách tiếp cận này sẽ khiến không thể thực hiện bất kỳ tái cấu trúc đáng kể nào nữa.
sbi

1
@sbi - bạn sẽ ngạc nhiên: nếu bạn có bài kiểm tra đơn vị tốt và SCM đàng hoàng cho việc khôi phục thì bạn có thể thực hiện một số lượng lớn trong các bước được kiểm soát, xác minh. Tôi đã từng thay đổi một hệ thống phân cấp thừa kế lớn (50+ lớp) thành một mô hình dựa trên nguyên mẫu trong một loạt các phép tái cấu trúc gia tăng, không có cái nào cần nhiều hơn một vài giờ làm việc.
mikera

@sbi: Một người không bao giờ thực sự nên thực hiện tái cấu trúc đáng kể - chỉ một lần thay đổi / tái cấu trúc tại một thời điểm. Các đơn vị công việc nhỏ, các thay đổi nhỏ và tất nhiên là chạy tất cả các bài kiểm tra và muốn thực hiện (chắc chắn) rằng bạn đã không phá vỡ bất cứ điều gì.
Cthulhu

@Cthulhu: Nếu bạn có các bài kiểm tra đơn vị tốt, bạn có thể loại bỏ và xây dựng lại gần như nhiều mã như bạn muốn, vì các bài kiểm tra sẽ bắt được hầu hết các lỗi.
sbi

4

Điều này ít nhiều là thực tế đáng buồn của lập trình bảo trì. Bạn bị mắc kẹt với những gì bạn được chỉ định duy trì và nếu người trả các hóa đơn không muốn trả cho những gì anh ta coi là thay đổi mà không có lợi ích, thì những thay đổi đó có xu hướng không được thực hiện.

Nếu bạn muốn thực hiện trường hợp nhận được các thay đổi này được tài trợ, thì hãy ghi nhật ký tất cả các địa điểm mà bạn phải thay đổi để cập nhật ngay cả đơn giản nhất. Sau một vài thay đổi, thảo luận về nhật ký đó với người quản lý của bạn. Nếu bạn có thể ghi lại nó, có một cơ hội (mặc dù rất mỏng) rằng người có chuỗi ví sẽ nhận ra rằng nó thực sự rẻ hơn trong thời gian dài để làm sạch mã ngay bây giờ vì nó sẽ làm thay đổi trong tương lai rẻ hơn.

Cơ hội bán hàng của bạn tăng lên càng lâu sản phẩm này dự kiến ​​sẽ được sử dụng. Tỷ lệ cược cũng tăng nếu một thất bại trong sản phẩm có khả năng gây ra vấn đề quan hệ công chúng cho khách hàng hoặc làm mất tiền của khách hàng.

Chặn điều đó, tìm hiểu những gì bạn có thể và chuyển sang một vị trí khác với ít bảo trì hơn.


3

Bạn cần cho quản lý của bạn thấy việc tái cấu trúc và cải thiện sản phẩm sẽ mang lại lợi ích gì cho công ty.

Khách hàng sẽ không quan tâm mã đó đẹp hay xấu miễn là nó hoạt động và quản lý sẽ không sẵn lòng giải thích cho khách hàng rằng những gì họ đã trả tiền được thiết kế kém và được triển khai kém. Đồng thời, ban quản lý sẽ không muốn ăn chi phí thời gian phát triển mà không cải thiện sản phẩm theo một cách có thể nhìn thấy (có thể xuất hóa đơn).

Vì vậy, ... bạn phải thuyết phục ban quản lý rằng những thay đổi bạn đề xuất sẽ giúp công ty:

  • Cho họ thấy rằng một kiến ​​trúc tốt hơn sẽ cho phép bạn thêm các tính năng mới nhanh hơn.
  • Giải thích rằng bằng cách tiếp tục đi dọc theo con đường hiện tại, họ sẽ vẽ mình vào một góc.
  • Cho ví dụ về các thay đổi rất tốn kém để thực hiện trong hệ thống hiện tại, nhưng sẽ đơn giản và rẻ tiền với thiết kế tốt hơn.
  • Theo dõi thời gian dành cho việc duy trì mã kế thừa so với việc thêm các tính năng có thể bán được. - Giúp họ giải thích cho khách hàng hiện tại và tương lai rằng mặc dù hệ thống hiện tại khá tốt, kiến ​​trúc mới, hiện đại hóa sẽ cho phép nhiều cải tiến mới tuyệt vời, độ tin cậy tốt hơn, v.v.
  • Giảm thiểu rủi ro liên quan đến những thay đổi bạn đề xuất. Các nhà quản lý không thích rủi ro và việc quét các thay đổi đối với một hệ thống hiện có dường như có rủi ro.
    • Ưu tiên hiện đại hóa các thành phần khác nhau theo chi phí và lợi ích, và đảm bảo rằng quản lý đồng ý với các ưu tiên của bạn.
    • Sử dụng thử nghiệm đơn vị để giúp đảm bảo rằng các thành phần được hiện đại hóa sẽ tương thích với mã kế thừa còn lại.
  • Theo dõi tiến trình của nỗ lực hiện đại hóa. Hiển thị lợi ích ngay khi bạn có thể hợp lý, nhưng nhắc nhở tất cả các bên rằng có nhiều việc phải làm.

3

Bạn có thể không nhận ra điều đó, nhưng Johnny Cash đã dự đoán phong trào tái cấu trúc và viết một bài hát về cách tốt nhất để tái cấu trúc một cơ sở mã lớn hiện có.

Tất nhiên, anh ta phải bọc nó trong một phép ẩn dụ ô tô để khán giả của anh ta có thể liên quan đến nó.

"One Piece tại một thời điểm" - Johnny Cash


2

Có vẻ như bạn có thể tính phí cho khách hàng trong thời gian thay đổi "nên" thực hiện và vẫn đưa ra CÁCH trước mắt trong thời gian dài.

Nếu bạn thích làm sạch mã (và có vẻ như bạn làm ít nhất một chút) thì hãy tiếp tục và tiếp tục làm nhưng đừng tự làm hỏng nó. Điều đó không làm bạn, công ty của bạn, hoặc khách hàng khác của bạn bất kỳ tốt.

Đảm bảo rằng quản lý của bạn và bất kỳ ai làm việc với khách hàng đều biết rằng mã không ở trạng thái tốt nhất để họ có thể đưa ra quyết định sáng suốt - chỉ vì bạn sở hữu mã đó không có nghĩa là bạn nên đưa ra quyết định kinh doanh về nó, nếu họ không nhận thức được các vấn đề với mã thì họ không thể thực hiện công việc của mình.


1
@robertharvey: vâng, anh ấy tự mình làm sạch mã để khách hàng sẽ được lập hóa đơn để cập nhật không phải trả nhiều tiền hơn nếu mã được viết tốt. Tôi nghĩ rằng công ty của anh ta cần phải ăn phần lớn chi phí (nếu chúng xảy ra). Thật hợp lý khi khách hàng trả một số thời gian, nhưng nếu bạn trả quá nhiều vì mã đó là một cách tốt để đánh mất thiện chí và kinh doanh trong tương lai.
DKnight

2

Mặc dù ứng dụng của khách hàng có một số nợ kỹ thuật, nhưng đừng quên, có lẽ họ đã bị tính phí với mức chiết khấu nhẹ. Họ có thể không nhận thức được điều này, nhưng đó là những gì xảy ra khi bạn trả giá thấp nhất.

Họ cần quyết định xem họ có muốn trả giá đầy đủ cho các thay đổi tính năng hoặc thực hiện mà không có chúng. Đó là sự lựa chọn của họ. Bạn có thể để họ đưa ra quyết định hoặc tiếp tục làm việc miễn phí. Bạn có thể thử và đề cập đến công việc dọn dẹp bạn đã làm và giảm giá nhẹ cho công việc đã hoàn thành. Một lần nữa, đó là sự lựa chọn của họ.


1

Cách tôi sẽ tiếp cận điều này là bắt đầu với việc giải thích khái niệm nợ kỹ thuật cho các ông chủ của bạn để đảm bảo họ có được nó. Tiếp cận nó từ một dòng dưới cùng, quan điểm kinh doanh. Mỗi lần họ yêu cầu một tính năng mới, khoản nợ kỹ thuật tích hợp trong sản phẩm sẽ ảnh hưởng đến hiệu quả của bạn và do đó, mỗi tính năng sẽ phải trả thêm một chút do khoản nợ này.

Khi họ hiểu bạn đang nói về điều gì, hãy cố gắng thương lượng một chút thời gian của bạn để giảm bớt nợ kỹ thuật. Tại công ty của tôi, chúng tôi đã thành công một cách hợp lý với việc kiến ​​nghị 10% thời gian của mỗi nhà phát triển để làm việc giảm nợ kỹ thuật.

Khi bạn đã dành thời gian để giải quyết vấn đề này, hãy đảm bảo rằng bạn thực sự sử dụng nó (và đừng chỉ làm thêm 10% để làm việc đó - hãy kiên trì với súng của bạn). Tạo một danh mục các khoản nợ kỹ thuật và ưu tiên chúng và bắt đầu khắc phục. Bạn phải ăn một con voi một lúc.


1

Và đừng quên yếu tố trong các công cụ tốt hơn. Resharper là một công cụ tái cấu trúc tuyệt vời cắm vào Visual Studio.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.