Điều gì xảy ra nếu một tính năng được sáp nhập vào phát triển bị quản lý hoãn lại?


53

Gần đây chúng tôi đã gặp sự cố khi một tính năng cho ứng dụng web của chúng tôi (đăng ký tự động) đã bị quản lý hoãn lại vì họ cảm thấy khởi đầu quá "lạnh" nhưng họ muốn tất cả các tính năng khác mà chúng tôi đang hoạt động để phát hành.

Vấn đề là chức năng này đã được hợp nhất để phát triển khi nó được hoàn thành cùng với tất cả các tính năng khác mà chúng tôi dự kiến ​​sẽ phát hành trực tiếp trên phiên bản tiếp theo để chúng tôi không thể hợp nhất dev -> test -> master như chúng ta thường làm.

Làm thế nào chúng ta có thể tránh được vấn đề này?


Tùy thuộc vào quan điểm của bạn về cách bạn muốn giải quyết vấn đề đó, câu hỏi này phù hợp hơn cho nơi làm việc, nếu bạn không tìm kiếm một giải pháp kỹ thuật.
Malavos

Câu trả lời:


74

Một cách tiếp cận là tính năng gắn cờ nó. Nó có thể sống trong cơ sở mã nhưng bị vô hiệu hóa bởi cấu hình.

Một tùy chọn khác để thực hiện một cam kết hoàn nguyên hoàn nguyên tính năng hợp nhất để nó không còn phát triển nữa. Một nhánh mới có thể được tạo ra để hoàn nguyên hoàn nguyên và được chờ xử lý để hợp nhất sau này. Nếu bạn đang sử dụng các yêu cầu kéo Github, bạn có thể thực hiện việc này một cách dễ dàng bằng nút "hoàn nguyên hợp nhất" trong yêu cầu kéo được hợp nhất.


9
Không gắn cờ cấu hình có nghĩa là tăng gấp đôi nỗ lực thử nghiệm cho mã đó? Bạn phải kiểm tra cả hai con đường.

16
Trong trường hợp này, vì bạn sẽ không bật cờ đó trong sản xuất, bạn có thể kiểm tra trường hợp tắt ngay bây giờ để phát hành, sau đó kiểm tra trường hợp khi nó sẵn sàng để đi đến sản phẩm. Đó phải là công việc tương tự như kiểm tra hoàn nguyên và khuyến nghị.
Alan Shutko

4
Thuật ngữ phổ biến là Chuyển đổi tính năng . Nếu có một "điểm vào tính năng" nhỏ, điều này có thể được thực hiện sau khi có quyết định quản lý. Nếu không, người ta cũng sẽ gặp vấn đề với phương pháp này cũng như với bất kỳ phương pháp nào.
Doc Brown

3
Chúng tôi có các tính năng đang được phát triển trong hơn 6 tháng bị ẩn đi Feature Toggling, như Doc Brown đã gọi nó. Điều này cũng cho phép chúng tôi kiểm tra tính năng (hoặc không có nó) trong các môi trường phi sản xuất. Đôi khi các tính năng này thêm vào các tính năng hiện có, trong trường hợp đó chúng ta nên có các bài kiểm tra đơn vị cho cả bộ tính năng cũ và mới. Mỗi bài kiểm tra đơn vị sẽ chỉ đặt cờ thành bất cứ điều gì nó cần để thực hiện bài kiểm tra hiện tại.
ps2goat

25

Làm thế nào chúng ta có thể tránh được vấn đề này?

Từ góc độ quá trình, tìm ra:

  • Ai là người ra quyết định bắt đầu công việc này?
  • Tại sao quyết định phát hành tính năng này thay đổi?
    • Bỏ lỡ kỳ vọng?
    • Hiểu lầm?
    • Hỗ trợ kinh doanh không đầy đủ?
    • Không có sự tham gia của khách hàng?

Nhiều khả năng đã có những giọt trong giao tiếp trên đường đi. Điều này rất quan trọng vì khi nó không hoạt động, quá trình phát triển của bạn sẽ dựa trên những hiểu biết sai và sai về các yêu cầu kinh doanh.


9
+10. Ngay khi ban quản lý bắt đầu nghi ngờ về việc phát hành tính năng này, họ nên thông báo cho các nhà phát triển, để có thể loại bỏ khả năng loại bỏ khi quyết định hợp nhất tính năng này để phát triển.
Bart van Ingen Schenau

14
Đây không phải là một câu trả lời mang tính xây dựng - đôi khi mọi thứ đi ngang vì mọi lý do. Chắc chắn, phát hiện ra rằng nó không nên được hợp nhất sớm hơn là muộn là điều quan trọng, nhưng điều đó không có nghĩa là cuối cùng một tính năng sẽ được kéo vào phút cuối. Có thể thay đổi hợp đồng, có thể khách hàng của bạn không trả tiền, có thể các vấn đề pháp lý xuất hiện .. bạn vẫn phải quản lý vấn đề thay vì chỉ tay đổ lỗi
gbjbaanb

11
Nếu có những người trong tổ chức của bạn đủ mạnh mẽ để từ chối nhận lỗi và cũng đủ trẻ con để không muốn tránh lỗi, thì bạn vẫn nên xử lý các vấn đề hậu sự cho thông tin của chính mình. Bạn không muốn nói với họ (hoặc viết nó quá rõ ràng). Điều đó nói rằng, enderland không sử dụng từ "đổ lỗi" và nếu tổ chức diễn giải lời khuyên này là "tìm ra ai là người có lỗi" thì đó chính là vấn đề khiến tổ chức phải làm việc. Tất cả điều này nói là "hiểu lý do tại sao vấn đề xảy ra", đó là điều cần thiết để tránh nó trong tương lai.
Steve Jessop

2
Tôi hoàn toàn đồng ý, đây là một sự quản lý, không phải là một nhà phát triển.
durron597

3
@enderland quan điểm của tôi là bạn không thể tránh được một số vấn đề, vì vậy bạn phải xem xét cách sửa chữa tình huống. Hy vọng rằng bạn sẽ không nhận được điều đó rất thường xuyên, nhưng nó chắc chắn sẽ xảy ra sớm hay muộn để có kế hoạch phù hợp.
gbjbaanb

19

Hãy quên một chút vấn đề với quản lý của bạn và tưởng tượng bạn đã có "tính năng đăng ký tự động" đã có trong bản phát hành sản xuất mới nhất của bạn, được tích hợp sâu vào cơ sở mã của bạn. Bây giờ bạn có yêu cầu mới để thêm "tắt công tắc" cho "đăng ký tự động". Làm thế nào bạn sẽ xử lý điều này trong quy trình công việc Git của bạn?

Tôi đoán bạn sẽ tuyên bố "vô hiệu hóa đăng ký tự động theo cấu hình" chỉ đơn giản là một tính năng bổ sung (nó chỉ là một dạng Chuyển đổi tính năng ), vì vậy điều này sẽ tích hợp trơn tru vào quy trình làm việc của bạn. Bạn có thể ước tính nỗ lực, nếu bạn thích, bạn có thể sử dụng một nhánh tính năng cho nó (hoặc không, nếu bạn không sử dụng các nhánh tính năng cho các vấn đề đó). Và bạn chắc chắn có thể sử dụng luồng "hợp nhất dev -> test -> master" mà bạn đã mô tả.

Và đó thực sự là cách bạn có thể xử lý điều này trong tình huống hiện tại của bạn. Từ quan điểm của quy trình công việc git, sẽ không có vấn đề gì nếu yêu cầu thay đổi đến từ quản lý cho phiên bản 1.0 hoặc nếu yêu cầu thay đổi là một khách hàng mới muốn phát hành 2.0.


Fowler có một số đầu ra thực sự tốt, nhưng tôi không thể hỗ trợ phương pháp này để giới thiệu tính năng. Nỗ lực phối hợp cho các thiết bị chuyển mạch như vậy dường như là một gánh nặng không cần thiết. Tôi có thể hỗ trợ thêm tính năng bật tắt để xóa tính năng sau khi hợp nhất, nhưng việc xây dựng một công tắc như một phần của yêu cầu khiến tôi không thoải mái.
Gusdor

@Gusdor: xem chỉnh sửa của tôi.
Doc Brown

1

Đây là vấn đề chính xác mà tôi gặp phải với luồng gitflow và GitHub và dường như với các ứng dụng web, điều này xảy ra thường xuyên - hoặc giống như quy tắc hơn. Có vẻ như bạn sẽ giải quyết vấn đề này hồi tố (đã đề cập ở trên) hoặc chủ động (ví dụ bên dưới).

Tôi đã tạo 'các nhánh bó' ngoài các nhánh gitflow tiêu chuẩn. Gói này bao gồm tất cả các tính năng đã sẵn sàng cho uat / qa. Một danh sách các tính năng uat / qa được tạo ra. Chúng được hợp nhất vào gói tạm thời và gói đó được triển khai thành uat / qa. Bất kỳ sửa lỗi nào xảy ra trên nhánh tính năng gốc và được sửa lại thành gói và triển khai. Điều này phân tách bản phát hành sắp tới cũng như cho phép thử nghiệm các tính năng đó cùng nhau trước khi chúng tìm đường đến chi nhánh phát triển. Những nhánh được phê duyệt sẽ nhận được yêu cầu kéo vào phát triển - theo quy trình gitflow. Các tính năng sẵn sàng thử nghiệm có thể được thêm vào hoặc xóa khỏi nhánh gói tạm thời và triển khai lại.

  • Điều này giúp chủ luôn phản ánh trạng thái sẵn sàng sản xuất (có thể tự động hóa với hook)
  • Phát triển luôn phản ánh ứng cử viên phát hành tiếp theo được phân phối (và thử nghiệm)

Nhược điểm bao gồm quản lý danh sách gói và thêm loại chi nhánh khác; tuy nhiên, bên cạnh bản sửa lỗi retro mà tôi nghĩ là quá muộn, đây dường như là giải pháp khả thi hơn.

Với một addon GUI, có thể là tối ưu để đánh dấu các nhánh tính năng trên mỗi triển khai gói - với ý tưởng tự động hóa.

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.