Duy trì hàng trăm chi nhánh tùy chỉnh trên chi nhánh chính


140

Hiện tại chúng tôi có một nhánh chính cho ứng dụng PHP của mình trong kho lưu trữ được chia sẻ. Chúng tôi có hơn 500 khách hàng là người đăng ký phần mềm của chúng tôi, hầu hết trong số họ có một số tùy chỉnh cho các mục đích khác nhau, mỗi người trong một chi nhánh riêng biệt. Tùy chỉnh có thể là một tên trường văn bản khác, một tính năng hoặc mô-đun hoàn toàn mới hoặc các bảng / cột mới trong cơ sở dữ liệu.

Thách thức chúng tôi gặp phải là khi chúng tôi duy trì hàng trăm chi nhánh tùy chỉnh này và phân phối cho khách hàng, thỉnh thoảng chúng tôi cung cấp tính năng mới và cập nhật chi nhánh chính của chúng tôi và chúng tôi muốn đẩy các thay đổi chi nhánh chính sang các chi nhánh tùy chỉnh để cập nhật chúng đến phiên bản mới nhất.

Thật không may, điều này thường dẫn đến nhiều xung đột trong mã tùy chỉnh và chúng tôi dành nhiều giờ để đi qua từng chi nhánh để giải quyết tất cả các xung đột. Điều này rất không hiệu quả và chúng tôi thấy rằng những sai lầm không phải là hiếm khi giải quyết những xung đột này.

Tôi đang tìm kiếm một cách hiệu quả hơn để giữ cho các chi nhánh phát hành khách hàng của chúng tôi được cập nhật với chi nhánh chính sẽ dẫn đến ít nỗ lực hơn trong quá trình hợp nhất.


11
Xin lỗi không đưa ra câu trả lời "bạn có thể sử dụng công cụ X", nhưng không có câu trả lời.
Các cuộc đua nhẹ nhàng trong quỹ đạo

3
Hoặc trong quá trình xây dựng (có lẽ phổ biến hơn). Chỉ cần .. không hoàn toàn riêng biệt các cơ sở mã.
Các cuộc đua nhẹ nhàng trong quỹ đạo

15
@FernandoTan - Triệu chứng có thể nhìn thấy của bạn có thể là mã, nhưng nguyên nhân gốc rễ của bệnh là do sự phân mảnh sản phẩm của bạn, việc chữa trị cần đến từ việc tập trung vào sản phẩm / lập bản đồ khả năng sản phẩm, không phải là mã sạch Tôi đã chi tiết hơn trong câu trả lời của mình - lập trình
Alex S

8
Đây cũng có thể là một vấn đề kinh tế. Bạn có thực sự kiếm tiền từ tất cả 500 khách hàng đó không? Nếu không, bạn phải lật đổ mô hình định giá của mình và từ chối các yêu cầu thay đổi nếu khách hàng không trả thêm phí.
Christian Strempfer

13
Điều này làm trái tim tôi tan vỡ chỉ một chút xíu. May mắn thay, những người khác đã hét lên câu trả lời đúng - đề nghị bổ sung duy nhất của tôi là bạn viết nó lên và gửi nó cho TheD DailyWTF.
zxq9

Câu trả lời:


314

Bạn đang lạm dụng hoàn toàn các chi nhánh! Bạn nên có tùy chỉnh được cung cấp bởi tính linh hoạt trong ứng dụng của bạn, chứ không phải tính linh hoạt trong kiểm soát phiên bản của bạn (mà như bạn đã phát hiện ra, không nhằm mục đích / được thiết kế cho loại sử dụng này).

Ví dụ: làm cho nhãn trường văn bản đến từ tệp văn bản, không được mã hóa cứng vào ứng dụng của bạn (đây là cách quốc tế hóa hoạt động). Nếu một số khách hàng có các tính năng khác nhau, hãy biến ứng dụng của bạn thành mô-đun , với các ranh giới nội bộ nghiêm ngặt được quản lý bởi các API nghiêm ngặt và ổn định, để các tính năng có thể được cắm vào khi cần.

Cơ sở hạ tầng cốt lõi và bất kỳ tính năng chia sẻ nào, sau đó chỉ cần được lưu trữ, bảo trì và kiểm tra một lần .

Bạn nên làm điều này từ đầu. Nếu bạn đã có năm trăm biến thể sản phẩm (!), Việc sửa lỗi này sẽ là một công việc rất lớn nhưng không hơn gì việc bảo trì liên tục.


142
+1 cho "Bạn nên làm điều này từ đầu". Mức nợ kỹ thuật này có thể phá hủy một công ty.
Daenyth

31
@Daenyth: Thành thật với năm trăm chi nhánh tùy chỉnh Tôi ngạc nhiên là nó chưa có. Ai cho phép mọi thứ trở nên tồi tệ này? lol
Cuộc đua nhẹ nhàng trong quỹ đạo

73
@FernandoTan Tôi là như vậy, vì vậy, rất tiếc cho bạn ...
enderland

20
@FernandoTan: Tôi cũng vậy. :( Có lẽ bạn nên hỏi nhiều câu hỏi hơn khi phỏng vấn?;) Để rõ ràng, "bạn" trong câu trả lời của tôi là tổ chức. Đó là một sự trừu tượng. Tôi không tìm cách đổ lỗi cho cá nhân.
Các cuộc đua nhẹ nhàng trong quỹ đạo

58
Trước tiên hãy hiểu rõ hơn: Hãy để các nhà phát triển tạo ra sự khác biệt giữa phiên bản hiện tại và chi nhánh tùy chỉnh. Vì vậy, bạn ít nhất biết những gì khác biệt có. Danh sách đó cho phép bạn xem nơi bạn có thể giành chiến thắng trong việc giảm chi nhánh nhanh nhất. Nếu 50 có tên trường tùy chỉnh chỉ cần tập trung vào đó và nó sẽ giúp bạn tiết kiệm 50 chi nhánh. Sau đó tìm kiếm tiếp theo. Bạn cũng có thể có một số thứ không đáng tin cậy, nhưng sau đó ít nhất số tiền sẽ thấp hơn và nó sẽ không tăng thêm khi bạn có thêm khách hàng.
Luc Franken

93

Có 500 khách hàng là một vấn đề tốt, nếu bạn đã dành thời gian để tránh vấn đề này với các chi nhánh, bạn có thể không bao giờ có thể duy trì giao dịch đủ lâu để có được bất kỳ khách hàng nào.

Đầu tiên, tôi hy vọng bạn tính phí cho khách hàng của mình đủ để chi trả TẤT CẢ chi phí duy trì các phiên bản tùy chỉnh của họ. Tôi giả định rằng khách hàng mong đợi nhận được các phiên bản mới mà không phải trả tiền cho các tùy chỉnh của họ sẽ được thực hiện lại. Tôi sẽ bắt đầu bằng cách tìm tất cả các tệp giống nhau trong 95% chi nhánh của bạn. 95% đó là phần ổn định trong ứng dụng của bạn.

Sau đó, tìm tất cả các tệp chỉ có một vài dòng khác nhau giữa các nhánh - cố gắng giới thiệu một hệ thống cấu hình sao cho những khác biệt này có thể được loại bỏ. Vì vậy, ví dụ, thay vì có 100 tệp có nhãn trường văn bản khác nhau, bạn có 1 tệp cấu hình có thể ghi đè bất kỳ nhãn văn bản nào. (Điều này không phải được thực hiện trong một lần, chỉ cần tạo nhãn trường văn bản có thể định cấu hình được trong lần đầu tiên khách hàng muốn thay đổi nó.)

Sau đó chuyển sang các vấn đề khó hơn bằng cách sử dụng mẫu Chiến lược, nội xạ phụ thuộc, v.v.

Cân nhắc việc lưu trữ json trong cơ sở dữ liệu thay vì thêm các cột cho các trường của khách hàng - điều này có thể phù hợp với bạn nếu bạn không cần tìm kiếm các trường này bằng SQL.

Mỗi khi bạn kiểm tra một tệp vào một nhánh, bạn PHẢI khuếch tán nó với chính và biện minh cho mọi thay đổi, bao gồm cả khoảng trắng. Rất nhiều thay đổi sẽ không cần thiết và có thể được gỡ bỏ trước khi đăng ký. Điều này có thể chỉ thuộc về một nhà phát triển có các cài đặt khác nhau trong trình chỉnh sửa của họ về cách mã được định dạng.

Bạn đang hướng tới mục tiêu đầu tiên là đi từ 500 chi nhánh với rất nhiều tệp khác nhau, đến hầu hết các chi nhánh chỉ có một vài tệp khác nhau. Trong khi vẫn kiếm đủ tiền để sống.

Bạn vẫn có thể có 500 chi nhánh trong nhiều năm, nhưng nếu chúng dễ quản lý hơn rất nhiều, thì bạn đã chiến thắng.


Dựa trên nhận xét của br3w5:

  • Bạn có thể học từng lớp khác nhau giữa các khách hàng
  • Tạo một xxx xxxbbececlass mà xác định tất cả các phương thức được gọi trong lớp từ bên ngoài nó
  • Đổi tên lớp để xxx được gọi là xxx_clientName (dưới dạng lớp con của xxx_baseclass)
  • Sử dụng phép nội xạ phụ thuộc để phiên bản chính xác của lớp được sử dụng cho mỗi máy khách
  • Và bây giờ cho cái nhìn sâu sắc thông minh br3w5 đã đưa ra! Sử dụng một công cụ phân tích mã tĩnh để tìm mã hiện được sao chép và di chuyển nó vào lớp cơ sở, v.v.

Chỉ làm như trên sau khi bạn đã có được hạt dễ dàng, và theo dõi nó với một vài lớp đầu tiên.


28
+1 khi cố gắng cung cấp cách tiếp cận cho vấn đề thực tế
Ian

35
Tôi thực sự lo lắng rằng bạn đã tự chúc mừng mình về câu trả lời của mình, cho đến khi tôi nhận ra bạn không giống @Ian đã viết câu trả lời.
Theron Luhn

2
Có lẽ họ nên sử dụng một công cụ phân tích mã tĩnh để thu hẹp những phần nào của mã được sao chép (sau khi xác định tất cả các tệp giống nhau)
br3w5

1
Đồng thời tạo các gói được phiên bản để giúp nhóm theo dõi khách hàng nào có phiên bản mã nào
br3w5

1
Nghe có vẻ như một cách nói dài dòng "chỉ cần cấu trúc lại mã của bạn"
Roland Tepp

40

Trong tương lai, hãy đặt câu hỏi kiểm tra Joel trong cuộc phỏng vấn của bạn. Bạn có nhiều khả năng không bước vào một con tàu đắm.


Đây là một, ah, làm thế nào chúng ta sẽ nói ... thực sự, thực sự có vấn đề xấu. "Lãi suất" đối với khoản nợ kỹ thuật này sẽ rất, rất cao. Nó có thể không phục hồi được ...

Làm thế nào tích hợp với "lõi" là những thay đổi tùy chỉnh? Bạn có thể biến chúng thành thư viện của riêng mình và có một "lõi" duy nhất và mỗi khách hàng cụ thể có "tiện ích bổ sung" riêng không?

Hoặc đây là tất cả các cấu hình rất nhỏ?

Tôi nghĩ rằng giải pháp là sự kết hợp của:

  • Thay đổi tất cả các thay đổi được mã hóa cứng thành các mục dựa trên cấu hình. Trong trường hợp này, mọi người đều có cùng một ứng dụng cốt lõi, nhưng người dùng (hoặc bạn) bật / tắt chức năng, đặt tên, v.v. nếu cần
  • Chuyển chức năng / mô-đun "cụ thể của khách hàng" sang các dự án riêng biệt, vì vậy thay vì có một "dự án", bạn có một "dự án cốt lõi" với các mô-đun bạn có thể thêm / xóa dễ dàng. Ngoài ra, bạn có thể thực hiện các tùy chọn cấu hình quá.

Sẽ không tầm thường như thể bạn đã kết thúc ở đây với hơn 500 khách hàng, bạn có thể không có sự khác biệt thực sự trong việc này. Tôi hy vọng những thay đổi của bạn trong việc tách biệt điều này sẽ là một nhiệm vụ rất tốn thời gian.

Tôi cũng nghi ngờ bạn sẽ gặp vấn đề nghiêm trọng trong việc dễ dàng tách ra và phân loại tất cả mã dành riêng cho khách hàng của bạn.

Nếu hầu hết các thay đổi của bạn là khác biệt về từ ngữ, tôi khuyên bạn nên đọc các câu hỏi như thế này về nội địa hóa ngôn ngữ. Cho dù bạn đang làm nhiều ngôn ngữ hoàn toàn hay chỉ là một tập hợp con, giải pháp là như nhau. Điều này đặc biệt là PHP và bản địa hóa.


1
Ngoài ra, vì đây sẽ là một nhiệm vụ rất lớn (phải nói là ít nhất), nó sẽ là một thách thức đáng kể để thậm chí thuyết phục các nhà quản lý của bạn ném một lượng lớn thời gian và tiền bạc vào vấn đề này. @FernandoTan Có thể có câu hỏi + câu trả lời trên trang web này có thể giúp giải quyết vấn đề cụ thể này.
Radu Murzea

10
Câu hỏi nào về bài kiểm tra joel sẽ nói với bạn rằng công ty đang lạm dụng các chi nhánh?
SpaceTrucker

2
@SpaceTrucker: Chà, "Bạn có xây dựng hàng ngày không?" có thể đã giúp Với 500 chi nhánh, có lẽ họ không có chúng, hoặc có thể đã đề cập rằng họ chỉ làm điều đó cho một số chi nhánh.
sleske

17

Đây là một trong những kiểu chống tệ hại nhất mà bạn có thể gặp với bất kỳ VCS nào.

Cách tiếp cận đúng ở đây là biến mã tùy chỉnh thành thứ gì đó được điều khiển bởi cấu hình và sau đó mỗi khách hàng có thể có cấu hình riêng, được mã hóa cứng trong tệp cấu hình hoặc trong cơ sở dữ liệu hoặc một số vị trí khác. Bạn có thể bật hoặc tắt toàn bộ tính năng, tùy chỉnh giao diện, v.v.

Điều này cho phép bạn giữ một nhánh chính với mã sản xuất của bạn.


3
Nếu bạn làm điều này, hãy tự mình làm và cố gắng sử dụng mẫu Chiến lược càng nhiều càng tốt. Điều này sẽ giúp việc duy trì mã của bạn dễ dàng hơn nhiều so với việc bạn đơn giản sử dụng if(getFeature(FEATURE_X).isEnabled())trong suốt.
TMN

13

Mục đích của các nhánh là khám phá một con đường phát triển có thể có mà không có nguy cơ phá vỡ sự ổn định của nhánh chính. Cuối cùng, chúng nên được hợp nhất trở lại vào một thời điểm thích hợp, hoặc bị loại bỏ nếu chúng dẫn đến ngõ cụt. Những gì bạn có không phải là nhiều chi nhánh, mà là hơn 500 nhánh của cùng một dự án và cố gắng áp dụng các thay đổi quan trọng cho tất cả chúng là một nhiệm vụ khó khăn.

Thay vào đó, những gì bạn nên làm là để mã lõi của bạn sống trong kho lưu trữ của riêng nó, với các điểm nhập cần thiết để sửa đổi hành vi thông qua cấu hình và thực hiện hành vi như được cho phép bởi các phụ thuộc đảo ngược .

Các thiết lập khác nhau mà bạn có cho các máy khách sau đó có thể chỉ phân biệt nhau bằng một số trạng thái được cấu hình bên ngoài (ví dụ: cơ sở dữ liệu) hoặc nếu cần sống dưới dạng các kho riêng biệt, thêm lõi làm mô hình con.


6
Bạn đã quên về các nhánh bảo trì, về cơ bản là đối lập với các nhánh bạn mô tả trong câu trả lời của bạn. :)
Các cuộc đua nhẹ nhàng trong quỹ đạo

7

Tất cả những điều quan trọng đã được đề xuất bởi câu trả lời tốt ở đây. Tôi muốn thêm năm xu của tôi làm đề xuất quy trình.

Tôi muốn đề nghị bạn giải quyết vấn đề này trong một phạm vi dài hoặc trung hạn và áp dụng chính sách của bạn, cách bạn phát triển mã. Hãy cố gắng để trở thành một nhóm học tập linh hoạt. Nếu ai đó được phép có 500 repos thay vì làm cho phần mềm có thể định cấu hình, thì đã đến lúc bạn nên tự hỏi mình đã làm việc như thế nào và bạn sẽ làm gì kể từ bây giờ.

Nghĩa là:

  1. Làm rõ trách nhiệm quản lý thay đổi: nếu khách hàng cần một số sự thích nghi, ai đang bán chúng, ai cho phép họ và ai quyết định cách thay đổi mã? Các ốc vít để xoay ở đâu nếu một số thứ phải thay đổi?
  2. Làm rõ vai trò, ai trong nhóm của bạn được phép tạo repos mới, còn ai không.
  3. Cố gắng đảm bảo rằng mọi người trong nhóm của bạn đều thấy sự cần thiết của các mẫu cho phép linh hoạt với phần mềm.
  4. Làm rõ công cụ quản lý của bạn: làm thế nào để bạn nhanh chóng biết khách hàng có những gì áp dụng mã. Tôi biết, một số "danh sách 500" nghe có vẻ khó chịu, nhưng đây là một số "nền kinh tế cảm xúc", nếu bạn muốn. Nếu bạn không thể nói thay đổi của khách hàng trong một thời gian nhanh chóng, bạn sẽ cảm thấy lạc lõng hơn và bị lôi cuốn như thể bạn phải bắt đầu một danh sách. Sau đó, sử dụng danh sách đó để nhóm các tính năng theo cách câu trả lời của người khác ở đây đã cho bạn thấy:
    • nhóm khách hàng theo những thay đổi nhỏ / lớn
    • nhóm theo những thay đổi liên quan đến chủ đề
    • nhóm theo thay đổi dễ hợp nhất và thay đổi khó hợp nhất
    • tìm các nhóm thay đổi bằng nhau được thực hiện cho một số repos (ồ vâng, sẽ có một số).
    • có lẽ là quan trọng nhất để nói chuyện với người quản lý / nhà đầu tư của bạn: nhóm theo các thay đổi đắt tiền và thay đổi giá rẻ .

Điều này không có nghĩa là tạo ra một bầu không khí áp lực xấu trong đội của bạn. Tôi muốn đề nghị bạn làm rõ những điểm này trước tiên cho chính mình và bất cứ nơi nào bạn cảm thấy sự hỗ trợ, hãy tổ chức việc này cùng với nhóm của bạn. Mời mọi người thân thiện vào bàn để cải thiện tất cả trải nghiệm của bạn.

Sau đó, cố gắng thiết lập một cửa sổ thời gian dài, nơi bạn nấu thứ này trên một ngọn lửa nhỏ. Đề xuất: cố gắng hợp nhất ít nhất hai repos mỗi tuần và do đó loại bỏ ít nhất một repos . Bạn có thể học được điều đó thường xuyên, bạn có thể hợp nhất nhiều hơn hai chi nhánh, khi bạn có thói quen và giám sát. Bằng cách đó, trong một năm bạn có thể xử lý các nhánh tồi tệ nhất (đắt nhất?) Và trong hai năm bạn có thể giảm vấn đề này để có một phần mềm rõ ràng tốt hơn. Nhưng đừng mong đợi nhiều hơn, vì cuối cùng sẽ không có ai "có thời gian" cho việc này, nhưng bạn là người sẽ không cho phép điều này lâu hơn nữa vì bạn là kiến ​​trúc sư phần mềm.

Đây là cách tôi sẽ cố gắng xử lý nếu tôi ở vị trí của bạn. Tuy nhiên tôi không biết nhóm của bạn sẽ chấp nhận những điều như thế nào, phần mềm thực sự cho phép điều này như thế nào, bạn được hỗ trợ như thế nào và cả những gì bạn vẫn phải học. Bạn là kiến ​​trúc sư phần mềm - chỉ cần đi cho nó :-)


2
Những điểm tốt về việc nhấn mạnh các vấn đề xã hội / tổ chức ẩn đằng sau các vấn đề kỹ thuật. Điều này là quá thường xuyên bị bỏ qua.
sleske

5

Đối lập với tất cả những người nói nay, hãy giả sử nhu cầu kinh doanh thực sự.

(ví dụ: phân phối là mã nguồn, khách hàng đến từ cùng một ngành kinh doanh và do đó là đối thủ cạnh tranh với nhau và mô hình kinh doanh của bạn hứa sẽ giữ bí mật của họ)

Hơn nữa, giả sử rằng công ty của bạn có các công cụ để duy trì tất cả các chi nhánh, đó là nhân lực (giả sử 100 nhà phát triển dành riêng cho việc hợp nhất, giả sử trì hoãn phát hành 5 ngày hoặc 10 nhà phát triển giả định độ trễ phát hành 50 ngày là OK) hoặc thử nghiệm tự động tuyệt vời như vậy mà việc hợp nhất tự động thực sự được thử nghiệm cả thông số kỹ thuật cốt lõithông số mở rộng trong mỗi chi nhánh và do đó, chỉ những thay đổi không hợp nhất "sạch" cần có sự can thiệp của con người. Nếu khách hàng của bạn trả tiền không chỉ cho các tùy chỉnh mà còn để bảo trì, đây có thể là một mô hình kinh doanh hợp lệ.

Câu hỏi của tôi (và nay-sayers) là, bạn có một người tận tâm chịu trách nhiệm giao hàng cho từng khách hàng không? Nếu bạn là một công ty 10.000 người thì có thể là như vậy.

Điều này có thể được xử lý bởi kiến trúc plugin trong một số trường hợp, giả sử lõi của bạn là thân cây, plugin có thể được giữ trong thân cây hoặc nhánh và cấu hình cho mỗi khách hàng là một tệp có tên duy nhất hoặc được giữ trong nhánh khách hàng.

Các plugin có thể được tải trong thời gian chạy hoặc được tích hợp vào thời gian biên dịch.

Thực sự nhiều dự án được thực hiện như thế này, về cơ bản vẫn có một vấn đề tương tự - những thay đổi cốt lõi đơn giản là không đáng kể để tích hợp, những thay đổi xung đột phải được khôi phục hoặc cần thay đổi đối với nhiều plugin.

Có những trường hợp khi các plugin không đủ tốt, đó là khi rất nhiều phần bên trong lõi phải được điều chỉnh mà số giao diện plugin trở nên quá lớn để xử lý.

Lý tưởng nhất là việc này sẽ được xử lý bằng lập trình hướng theo khía cạnh , trong đó trung kế là mã lõi và các nhánh là các khía cạnh (đó là mã bổ sung và hướng dẫn cách kết nối bổ sung với lõi)

Một ví dụ đơn giản, bạn có thể chỉ định rằng tùy chỉnh foođược chạy trước hoặc sau lõi klass.foohoặc nó thay thế nó, hoặc nó bao bọc nó và có thể thay đổi đầu vào hoặc đầu ra.

Có rất nhiều thư viện cho điều đó, tuy nhiên vấn đề xung đột hợp nhất không biến mất - việc hợp nhất sạch sẽ được xử lý bởi AOP và xung đột vẫn cần sự can thiệp của con người.

Cuối cùng, việc kinh doanh như vậy thực sự phải quan tâm đến việc bảo trì chi nhánh , cụ thể là tính năng dành riêng cho khách hàng X phổ biến đến mức rẻ hơn khi chuyển nó thành cốt lõi, mặc dù không phải tất cả khách hàng đều trả tiền cho nó?


3

Bạn không giải quyết được nguyên nhân gốc rễ của bệnh bằng cách nhìn vào triệu chứng. Sử dụng phương pháp 'quản lý mã' là có triệu chứng, nhưng sẽ không giải quyết được vấn đề cho bạn lâu dài. Nguyên nhân sâu xa là thiếu khả năng, tính năng của sản phẩm 'được quản lý tốt' và các tiện ích mở rộng và biến thể của chúng.

Mã 'tùy chỉnh' của bạn không đại diện cho điều gì ngoài các phần mở rộng của các tính năng & khả năng của sản phẩm và thay đổi trường dữ liệu ở những người khác.

Các tính năng tùy chỉnh mở rộng như thế nào, khác nhau như thế nào, có giống nhau theo ngữ cảnh hay không sẽ đóng vai trò rất lớn trong việc 'vệ sinh' cơ sở mã sản phẩm của bạn.

Hơn cả cách bạn viết mã và phiên bản, đây là nơi quản lý sản phẩm, kiến ​​trúc sản phẩm và kiến ​​trúc dữ liệu phát huy tác dụng. Nghiêm túc.

Bởi vì, vào cuối ngày, mã không là gì ngoài việc bạn cung cấp các tính năng / dịch vụ kinh doanh và sản phẩm cho khách hàng của bạn. Đó là những gì công ty của bạn đang được trả tiền cho.

Để xử lý tốt hơn về vấn đề này phải xuất phát từ quan điểm 'khả năng' chứ không phải quan điểm mã.

Bạn, công ty và sản phẩm của bạn không thể là tất cả đối với mọi người. Bây giờ bạn có một cơ sở doanh thu kha khá gồm 500 khách hàng, đã đến lúc sản xuất những gì bạn dự định trở thành.

Và nếu bạn đang cung cấp một số thứ, sẽ rất hợp lý khi mô đun hóa khả năng sản phẩm của bạn theo cách có tổ chức.

Làm thế nào rộng và sâu sản phẩm của bạn sẽ đi? Hoặc nếu không, điều này sẽ dẫn đến 'các vấn đề về chất lượng dịch vụ' và 'sự pha loãng và phân mảnh sản phẩm' khi bạn đi xuống.

Bạn sẽ là một CRM hoặc ERP hoặc xử lý đơn hàng / công văn hoặc Microsoft Excel?

Các tiện ích mở rộng hiện tại của bạn cần cuộn lại và hài hòa, cách mà một phần mềm lớn kéo vàohợp nhất các sản phẩm có được từ khi khởi động.

Bạn sẽ cần phải có một người quản lý sản phẩm và kiến ​​trúc dữ liệu mạnh mẽ lập bản đồ như sau:

  • Chi nhánh chính, khả năng sản phẩm và tính năng cơ sở
  • Các tính năng mở rộng tùy chỉnh, loại và biến thể
  • Ý nghĩa và sự thay đổi của 'trường tùy chỉnh'

.. để tạo lộ trình đồng hóa và hài hòa tất cả các chủ đề / chi nhánh sản phẩm lỏng lẻo này trong bối cảnh lớn của ứng dụng cốt lõi của bạn.

PS: Kết nối với tôi, tôi biết một người có thể giúp bạn khắc phục điều này :)


-5

Tôi có thể liên quan đến điều này. Tôi đã thực hiện nhiều dự án trên. Trên thực tế, 90% công việc phát triển của chúng tôi là sửa chữa những thứ như vậy. Không phải ai cũng hoàn hảo, vì vậy tôi khuyên bạn nên sử dụng kiểm soát phiên bản theo cách chính xác và nơi bạn ở, nếu có thể bạn có thể làm như sau.

  • Từ giờ trở đi, khi khách hàng yêu cầu cập nhật, hãy chuyển chúng vào kho lưu trữ mới.
  • Nếu bạn muốn hợp nhất chúng để làm chủ, hãy làm điều đầu tiên và giải quyết xung đột.
  • Sau đó, quản lý các vấn đề và chạy nước rút của họ với kho lưu trữ của họ và giữ những vấn đề chính mà bạn muốn khởi chạy trong tổng thể. Điều này có thể gây căng thẳng hơn cho các chu kỳ phát hành, nhưng điều đó sẽ giúp bạn tiết kiệm theo thời gian.
  • Duy trì một nhánh chính của kho lưu trữ chính cho khách hàng mới và kho lưu trữ chính chỉ nên có những nhánh bạn đang làm việc cho các công cụ trong tương lai. Các nhánh kế thừa sau đó có thể bị xóa sau khi chúng được di chuyển đến kho của khách hàng.

Cá nhân tôi đã nhập một kho lưu trữ từ GitHub với 40 chi nhánh vào Bitbucket và tạo ra 40 kho lưu trữ. Chỉ mất bốn giờ. Đây là biến thể chủ đề WordPress nên đẩy và kéo rất nhanh.

Có nhiều lý do cho việc "không làm điều đó ngay lần đầu tiên" và tôi nghĩ rằng những người chấp nhận chúng nhanh chóng và chuyển sang "làm điều đó ngay lúc này" sẽ luôn thành công.


16
Làm thế nào nhiều kho lưu trữ làm cho bảo trì dễ dàng hơn?
Toán học

Trong một số trường hợp như của chúng tôi, khách hàng cần có quyền truy cập vào từng repo và quản lý các vấn đề của riêng họ khi nó trở thành giải pháp tùy chỉnh để họ có repo riêng giúp quản lý dễ dàng hơn và như tôi đã nói đây là các biến thể chủ đề wordpress, nó hoạt động tốt. Nó có thể không hoạt động trong nhiều trường hợp.
Farrukh Subhani
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.