Một cách hiệu quả để ghi lại các lý do đằng sau các quyết định thiết kế sản phẩm là gì?


30

Tại công ty chúng tôi, chúng tôi không sử dụng bất kỳ tài liệu thiết kế sản phẩm nào. Chúng tôi có tổng cộng ba nhân viên để tất cả các cuộc thảo luận thiết kế sản phẩm diễn ra trực tiếp hoặc trên Slack. (Chúng tôi cũng có trong gói Slack cơ bản chỉ cho phép xem các tin nhắn gần đây nhất.)

Sản phẩm của chúng tôi vẫn đang ở giai đoạn đầu và chúng tôi thường xem xét lại các yếu tố thiết kế đã được quyết định từ nhiều tháng trước.

Một vấn đề mà chúng ta phải đối mặt trên cơ sở thường xuyên đau khổ là quên đi lý do tại sao một quyết định thiết kế sản phẩm được đưa ra. Điều này dẫn đến việc hàng giờ lãng phí khi đọc lại cùng một mặt bằng.

Làm thế nào chúng ta có thể ghi lại một cách hiệu quả các lý do đằng sau các quyết định thiết kế?

Quy trình làm việc của chúng tôi dựa trên Pivotal Tracker. Một giải pháp xảy ra với tôi là ghi lại các lý do cho tất cả các quyết định thiết kế có liên quan như nhận xét về chính câu chuyện của người dùng, nhưng điều này có vẻ không đáng tin cậy.

Để rõ ràng 100%: Tôi không nói về thiết kế mã. Tôi đang nói về thiết kế của sản phẩm được nhận ra bởi mã. Nói cách khác, tôi không nói về các quyết định như "chúng ta có nên cấu trúc lớp này bằng cách sử dụng thành phần thay vì nhiều kế thừa không?"; Tôi đang nói về các quyết định như "chúng ta có nên yêu cầu người dùng xác nhận địa chỉ email của họ trước khi có thể đăng nhập không?".

Mục đích của tài liệu này là cho phép doanh nghiệp xem hồ sơ về lý do tại sao các quyết định được đưa ra, để hỗ trợ đưa ra các quyết định tiếp theo về cùng các chủ đề.


13
Nếu bạn cảm thấy bạn cần một hình thức tài liệu thiết kế thì tại sao không chỉ tạo một tài liệu thiết kế?
MetaFight

Tôi cho rằng các lý do sẽ được ghi lại dưới dạng văn xuôi, văn xuôi ở lần đoán đầu tiên. Ai là người đọc dự định cho những người?
Laurent LA RIZZA

Tại sao bạn nói rằng ghi lại điều này trên các câu chuyện của người dùng trên Pivotal dường như không đáng tin cậy? Tôi chưa bao giờ sử dụng phần mềm đó, nhưng thông thường một vé là một nơi tốt để ghi lại động lực tăng vé. Đừng chỉ nhập "Yêu cầu người dùng xác nhận địa chỉ email", hãy nhập "Yêu cầu người dùng xác nhận địa chỉ email. Điều này có ích vì ..." Bạn có nói rằng nó không đáng tin cậy vì bạn có thể không bận tâm đến việc đó (nghĩa là bạn muốn một quy trình bắt buộc bạn làm điều đúng đắn), hoặc không đáng tin cậy vì những câu chuyện Pivotal cũ biến mất vào một lỗ đen và bạn sẽ không tìm thấy chúng, hay còn một vấn đề nào khác?
Steve Jessop

Ai là tác giả và ai là người tiêu dùng của tài liệu này? Nghe có vẻ như "doanh nghiệp" là tác giả và mọi người là độc giả của nó? Điều đó có đúng không? (Tôi hiểu rằng bạn nhỏ bé ngay bây giờ, nhưng nếu bạn phát triển thì câu trả lời sẽ là gì?)
mlk

Tôi sẽ đề nghị "chúng ta có nên yêu cầu người dùng xác nhận địa chỉ email của họ trước khi có thể đăng nhập không?" loại quyết định nên đi theo tiêu chí chấp nhận.
kumards 22/2/2016

Câu trả lời:


26

Bạn ghi lại các lý do đằng sau các quyết định thiết kế bằng cách viết chúng xuống. Lý tưởng gần mục đó là đối tượng của quyết định (không phải là "câu chuyện người dùng" - câu chuyện của người dùng là những mô tả những gì phải được thực hiện, không phải như thế nào).

Đó là đặc biệt những gì các bình luận được tạo ra - để ghi lại lý do tại sao một đoạn mã hoặc cấu trúc cụ thể trông giống như vậy (và tôi không nói riêng về các bình luận mã). Nếu chủ đề của thiết kế của bạn là một chức năng, hãy đưa ra nhận xét giới thiệu về chức năng đó. Nếu đó là một lớp học, hãy đưa ra nhận xét ở đầu một lớp về lý do căn bản. Nếu bạn có một nhóm các lớp nên theo cùng một cấu trúc, hãy thêm một tài liệu thiết kế riêng (như tệp "readme") vào gói chứa các lớp đó. Nếu chủ đề của thiết kế của bạn là sơ đồ UML, hãy thêm nhận xét vào phần mô tả của sơ đồ.

Tài liệu thiết kế IMHO có thể có giá trị của chúng, nhưng nếu chúng mô tả những thứ quá "xa" với vật phẩm mà chúng mô tả, chúng có xu hướng trở nên không nhất quán rất nhanh. Vì vậy, đề nghị của tôi là đặt bất kỳ tài liệu thiết kế nào càng gần với mục được thiết kế càng tốt.

Chỉ sử dụng các tài liệu riêng biệt khi bạn muốn ghi lại các quyết định thiết kế có ảnh hưởng đến nhiều vị trí khác nhau của mã theo cách xuyên suốt. Khi bạn sử dụng chúng, hãy cố gắng biến chúng thành một phần của cơ sở mã của bạn và đặt chúng ở mức phân cấp tương ứng của đối tượng được thiết kế (vì vậy nếu bạn đưa ra quyết định thiết kế cho một mô-đun bao gồm nhiều tệp mã nguồn, hãy đặt mô tả thiết kế " bên trong "mô-đun đó, nhưng không phải trong một tệp lớp, không phải trên" mô tả cấp cao nhất "hợp lệ cho các mô-đun khác và chắc chắn không có trong một Wiki riêng bên ngoài SCCS của bạn. Nếu bạn muốn ghi lại một số" mức cao ", sản phẩm quyết định thiết kế rộng, sau đó một tài liệu cấp cao nhất có thể là nơi tốt nhất, nhưng hãy chắc chắn rằng tài liệu này vẫn ở mức độ trừu tượng đó.


Về ý kiến: bạn sẽ không nói rằng mục đích của bình luận là để mô tả mã? Bởi vì loại vấn đề tôi đang nói đến là vấn đề thiết kế, như: người dùng có nên cấp quyền X cho cài đặt tài khoản Y không? Mục đích của mã là để cho phép thiết kế, vì vậy tôi không nghĩ rằng nơi thích hợp để thảo luận về thiết kế là trong mã.
henrebotha

5
@henrebotha: Bạn dường như có một ý tưởng khác với tôi về thiết kế là gì, có thể hoặc nên như thế nào. Mã là thiết kế. Cấu trúc của mã là thiết kế. Cấu trúc của giao diện người dùng là thiết kế. Cấu trúc meta của mã hoặc các lớp là thiết kế. Một câu hỏi như "người dùng có nên cấp quyền X cho cài đặt tài khoản Y" đối với tôi giống như một thứ gì đó mà bạn không muốn buộc dây ở bất cứ đâu vào phần mềm của bạn - nghe giống như một yêu cầu có thể định cấu hình. Cách bạn thực hiện yêu cầu đó trong mã có thể là một quyết định thiết kế, vì vậy bạn có thể nhận xét nó ở đâu đó trong mã của mình.
Doc Brown

2
@henrebotha: nếu bạn cứng cáp cấp phép X cho cài đặt tài khoản Y, mã sẽ bị ảnh hưởng từ quyết định đó. Một số mã kiểm soát các quyền, một số mã quản lý cài đặt tài khoản, một số mã UI, một số mã điều khiển. Vì vậy, cần có một nhận xét trong mã ở tất cả những nơi đó. Tất nhiên, để tránh sự lặp lại, tất cả các ý kiến ​​có thể đề cập đến một tài liệu thiết kế riêng biệt, nếu có một lý do đằng sau nó ảnh hưởng đến nhiều nơi khác nhau (như tôi đã nói trong câu trả lời của tôi) ..
Doc Brown

1
Tôi không tranh luận rằng các quyết định thiết kế ảnh hưởng đến mã. Tất nhiên các quyết định thiết kế ảnh hưởng đến mã. Điều đó vẫn không có nghĩa là ý kiến ​​là nơi thích hợp để ghi lại các quyết định thiết kế sản phẩm.
henrebotha

1
@henrebotha: nó phụ thuộc vào ý của bạn trong "Quyết định thiết kế sản phẩm". Các quyết định thiết kế "rộng sản phẩm" có thể thuộc về một tài liệu ở "cấp cao nhất" của tài liệu sản phẩm của bạn. Nếu bạn có nghĩa là bất kỳ loại "quyết định thiết kế nào bên trong sản phẩm của bạn", một số trong số chúng thuộc về nhận xét mã, thì một số khác thì không. Nhưng tôi không chỉ nói về các bình luận mã, xem chỉnh sửa của tôi. Tôi đang nói về bất kỳ hình thức bình luận nào (bên trong mã hoặc trong các tài liệu riêng biệt) mà bạn tạo ra một phần của cơ sở mã của bạn.
Doc Brown

8

Hãy xem xét một cách tiếp cận nhanh. Ý tôi là, nếu bạn có tài nguyên thời gian và kỹ năng viết tuyệt vời để viết ra mọi quyết định thiết kế mà các bạn đưa ra cùng với lý lẽ của họ, chỉ cần ghi chép lại mọi thứ. Nói một cách thực tế, tôi cho rằng bạn không ở vị trí như vậy. Một cách tiếp cận nhanh có thể giúp với một thách thức chính đối với tài liệu về các lý do: bạn thường không biết những lý do nào là quan trọng cho đến sau này.

Hãy tiếp cận vấn đề từ quan điểm toàn diện. Các bạn có lý do cho quyết định của bạn. Họ bị mắc kẹt trong squishyware ngay bây giờ, bộ não của đội. Mặc dù số lượng tài liệu tín dụng nhận được, việc lưu trữ hợp lý trong sqishyware không phải là quá tệ. Chúng ta thực sự rất giỏi trong việc ghi nhớ những điều quan trọng. Đó là lý do tại sao mọi tập đoàn lớn đều có "kiến thức bộ lạc", ngay cả khi những tập đoàn đó tìm cách ghi lại tất cả những kiến ​​thức của bộ lạc đó.

Bây giờ bạn có một vấn đề. Bạn đang thấy rằng sqiushyware không giữ được các lý do đủ tốt. Tốt cho bạn để nhận ra có một vấn đề, và xác định rằng nó cần phải được giải quyết! Đó không phải lúc nào cũng là một bước dễ dàng! Vì vậy, chúng tôi khá chắc chắn rằng giải pháp là giảm tải một số lý do đó vào tài liệu. Tuy nhiên, điều đó là không đủ. Chúng tôi không bao giờ có thể quên nửa sau của câu đố, đó là tải lại lý do vào squishyware khi bạn cần đưa ra quyết định. Tôi đã thấy rất nhiều đội làm tài liệu cho mọi thứ như điên, nhưng nội dung thực sự không được tổ chức để giúp đưa ra quyết định tốt, vì vậy cuối cùng họ quên mất những lý do mặc dù họ đã viết ra .

Vì vậy, bạn có một quá trình hai bước. Bạn cần lấy lý do ra khỏi squishyware và vào tài liệu. Sau đó, bạn cần đảm bảo rằng tài liệu được tổ chức đủ tốt để đưa hợp lý trở lại vào squishyware khi bạn cần nó! Bây giờ tôi nghĩ rằng chúng ta có đủ một tuyên bố vấn đề để nhận ra những thách thức sẽ như thế nào. Khi bạn đang ghi chép tài liệu, bạn thường không biết ai sẽ xem xét nó sau này, hoặc những gì họ đang tìm kiếm. Tương tự như vậy, khi bạn nhìn lại tài liệu, bạn thường không biết bạn đang tìm kiếm điều gì (tốt nhất bạn có thể biết khi nào).

Vì vậy, một công ty lớn có thể cố gắng xử lý việc này trong hai khối lớn. Đầu tiên họ có thể phát triển các yêu cầu dựa trên những gì mọi người cần khi họ nghiên cứu tài liệu. Sau đó, họ sử dụng những yêu cầu đó để xây dựng một quy trình phát triển tài liệu nói trên. Và, nếu tôi dám nói như vậy, thì mọi người đều phàn nàn vì hầu như không ai biết chính xác tài liệu sẽ trông như thế nào vào ngày đầu tiên. Tài liệu này luôn không đầy đủ và các nhà phát triển luôn phàn nàn rằng quy trình này quá nặng nề.

Thời gian để đi nhanh nhẹn.

Lời khuyên của tôi sẽ là bắt đầu một nỗ lực nhanh nhẹn để cải thiện quy trình tài liệu của bạn: toàn bộ chín thước từ squishyware đến tài liệu và trở lại squishyware. Nhận ra rằng bạn sẽ mất một số thông tin vì quy trình của bạn không hoàn hảo, nhưng điều đó không sao vì bạn vẫn đang cố gắng tìm ra quy trình! Bạn sẽ bỏ lỡ nhiều hơn nếu bạn cố gắng tạo một kích thước phù hợp với tất cả các giải pháp.

Một vài thông tin cụ thể mà tôi muốn xem: * Khám phá tài liệu không chính thức. Tài liệu chính thức là tuyệt vời, nhưng tốn thời gian của nó. Một trong những mục đích của tài liệu là phát hành thông tin từ squishyware của nhà phát triển và đưa nó lên giấy. Tài liệu không chính thức giữ cho chi phí làm việc ở mức tối thiểu.

  • Chấp nhận các định dạng tài liệu không đáng tin cậy. Không có gì sẽ đúng ngay lần đầu tiên. Tốt hơn là lấy dữ liệu và tìm ra cách làm cho nó đáng tin cậy sau này. Ví dụ: bạn có thể ghi lại các lý do của mình trong một khối <rationale> </ rationale> hoặc một cái gì đó tương tự, điều này sẽ giúp bạn dễ dàng thu thập dữ liệu đó sau này. Lưu trữ các lý do trong một câu chuyện người dùng, bây giờ, là tốt!
  • Không bao giờ quên giá trị của tổ chức. Tìm hiểu làm thế nào bạn, với tư cách là một nhóm, muốn tìm kiếm các lý do trong tài liệu và cố gắng ghi lại điều đó. Mỗi đội sẽ có một quy trình khác nhau. Ở một trong những đội của tôi, chúng tôi không bao giờ có thể tìm thấy chiếc vé có lý do trên đó ngay lập tức. Những gì chúng ta có thể làm là tìm thấy một dòng mã mà quan trọng, làm một svn blameđể tìm hiểu khi nó thay đổi và lý do tại sao, sau đó đi xem vé. Khi chúng tôi đã ở đó, chúng tôi thường đặt tất cả các lý do chúng tôi cần ngay trên vé. Điều đó chỉ làm việc cho chúng tôi, tìm ra những gì làm việc cho bạn.
  • Tài liệu hữu cơ có thể phát triển theo thời gian. Rất hiếm khi các nhà phát triển biết được những lý do nào là quan trọng nhất vào ngày họ cần để viết nó. Chúng ta thường tìm ra cái nào quan trọng sau này. Nếu bạn có một quy trình chải chuốt cho tài liệu cho phép các nhà phát triển quản lý khu vườn hợp lý nhỏ của riêng họ, thì những tài liệu quan trọng sẽ nổi lên trên bề mặt. Thậm chí quan trọng hơn, lý trí có thể thay đổi. Bạn có thể nhận ra rằng hai thay đổi khác nhau, với hai lý do khác nhau, thực sự được mô tả tốt nhất bởi một lý do duy nhất phù hợp với cả hai. Bây giờ có ít nội dung hơn giữa bạn và các quyết định!

0

Tôi khuyên bạn nên thiết lập một phiên bản riêng của MediaWiki hoặc một số phần mềm wiki tương tự. Thật dễ dàng để tổ chức và sắp xếp lại nội dung ở đó, và bạn có thể sao chép và dán các cuộc thảo luận mới trực tiếp vào tab thảo luận của (các) bài viết wiki có liên quan. Chúng tôi đã sử dụng MediaWiki trong công việc cuối cùng của tôi cho tất cả các tài liệu kiến ​​trúc và API của chúng tôi và đó là một cứu cánh.


2
Kiến trúc & quyết định cấp cao - có thể ổn. Tài liệu API - KHÔNG! Một số người trong tổ chức của chúng tôi đã thử điều này trong quá khứ, nó luôn giống nhau - các tài liệu cấp thấp không đồng bộ với mã. Wikis không tương tác tốt với VCS, mọi người quên hoặc không dành thời gian để cập nhật nó, v.v. Tài liệu API thuộc về , trước các chức năng mà họ mô tả. Nếu bạn cảm thấy bạn cần chúng trong mạng nội bộ của mình, hãy sử dụng trình tạo HTML như doxygen để trích xuất chúng từ đó. Nhưng hãy tạo cho mình một đặc ân và đừng duy trì chúng một cách riêng biệt, thủ công, trong Wiki.
Doc Brown

3
Tôi tin chắc rằng tất cả các lý do thiết kế nên được ghi lại trong kho mã nguồn. Bất kỳ nơi nào khác, và họ không chỉ không đồng bộ, họ cũng sẽ không nhớ lịch sử của họ.
cmaster

Hạ cấp một giải pháp hoạt động ... Wow. Được rồi
zerobandference 22/2/2016

0

Hãy suy nghĩ về nó từ quan điểm của lập trình viên sẽ được yêu cầu thay đổi nó trong thời gian 12 tháng.

Nếu bạn thêm quy tắc kinh doanh này dưới dạng thử nghiệm tự động thì thay đổi sẽ được thực hiện VÀ THÌ bạn sẽ nhận được từ thử nghiệm thất bại yêu cầu mâu thuẫn (và hy vọng bạn nắm bắt được người liên quan đến yêu cầu ban đầu và lý do của họ để chỉ định nó).

Tôi coi tài liệu thiết kế (nơi bạn đặt sơ đồ BPMN, sơ đồ giao dịch, thậm chí là ảnh của bảng trắng, v.v.) giống như mã, chỉ là một hình thức không thể thực thi ... có nghĩa là những gì bạn đang cố gắng bản ghi gần giống với một nhận xét mã, nhưng một yêu cầu (có thể kiểm tra) được chỉ định từ trước trong thiết kế. Có lẽ nếu bạn là một cửa hàng nhanh nhẹn mà bạn vẫn thiết kế mã của mình, bạn chỉ cần làm điều đó vào phút cuối trước khi viết nó. Giữ điều này trong cơ sở mã với tất cả các tài liệu dự án khác.

Dù bạn làm gì, hãy đảm bảo rằng nó được lưu trữ theo cách có thể tìm kiếm được (ví dụ bạn có thể muốn đưa ra tất cả các quy tắc kinh doanh liên quan đến "xác thực" khi chỉ định các thay đổi mới).


0

Như mọi khi bạn viết một cái gì đó, bạn phải tự hỏi ai là đối tượng dự định. Tôi tin tưởng mạnh mẽ rằng các tài liệu thiết kế dành cho các nhà phát triển ngang hàng của tôi, những người hiện tại hoặc tương lai. Tài liệu này giúp họ hiểu những gì tôi đang xây dựng hoặc những gì đã được xây dựng (tổng quan cấp cao) và quan trọng hơn là tại sao. Đó là một nơi để ghi lại các lựa chọn thay thế mà bạn đã xem xét, ưu và nhược điểm của từng loại.

Nói rằng một số thiết kế sống trong bộ não của mọi người sẽ khiến các nhà phát triển tiếp tục và tìm các công việc khác nhau, mang theo thông tin có giá trị đó.

Có mã của bạn là tài liệu thiết kế duy nhất giống như tìm đường quanh thị trấn bằng kính lúp. Bản đồ hữu ích hơn rất nhiều (tiếc là không có GPS tương đương với mã nguồn).

Tôi đồng ý rằng tài liệu thiết kế thối thậm chí còn nhanh hơn mã. Và vì không thể xác nhận giữa hai người, điều duy nhất bạn có thể làm là giữ họ gần nhau. IMO, một tài liệu thiết kế ngày vẫn cung cấp thông tin có giá trị.

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.