ฉันจะหลีกเลี่ยงฟีเจอร์คืบในโครงการเดี่ยวได้อย่างไร


12

ดังนั้นผมจึงมีโปรแกรมที่ผมทำงานเกี่ยวกับการกลับมาในปี 2011 และตลอดปี 2012 แต่การเปิดตัวล่าสุดคือในเดือนธันวาคม2011 ฉันทำงานอย่างแข็งขันกับมัน แต่ฟีเจอร์คืบคลานเข้ามาล่อหัวที่น่าเกลียดและตอนนี้มันเต็มไปด้วยฟีเจอร์ที่ยังไม่เสร็จ

ส่วนที่ร้ายก็คือว่าในขณะที่ฉันใช้คุณลักษณะใหม่ในครีพ. ฉันสามารถทำสิ่งที่หลีกเลี่ยงคุณลักษณะคืบในอนาคตเพื่อให้สามารถได้รับจริงปล่อยออกมาในกว่าปี ?

โครงการดังกล่าวใช้ iOS เป็นหลักและเคยมีการเผยแพร่รอบ ๆ การอัปเดต iOS แต่ละรุ่น แต่ล่าสุดนั้นกลับมาพร้อมกับ 5.1 (2011) ฉันต้องการที่จะได้รับรอบการเปิดตัวที่มั่นคงกลับมา แต่มันได้พิสูจน์แล้วว่ายากเกินไป


8
คุณอาจจะเฉพาะเจาะจงมากขึ้นใน WRT คำถามของคุณที่คุณสมบัติที่มาจากไหน? ใครเป็นผู้รับผิดชอบคุณสมบัติคืบ คุณ? นักวิเคราะห์ธุรกิจ ประธาน บริษัท ? ความต้องการของผู้ใช้? เป็นการยากที่จะให้คำแนะนำเกี่ยวกับวิธีการจัดการคุณสมบัติการคืบโดยไม่ทราบว่าแหล่งนั้นคืออะไร นอกจากนี้เพราะฉันชอบ Dilbert: search.dilbert.com/comic/Feature%20Creep ;)
FrustratedWithFormsDesigner

1
คุณเป็นผู้พัฒนาเพียงผู้เดียวในโครงการนี้หรือไม่? โครงการขนาดใหญ่ของทีมพบว่าจำเป็นอย่างยิ่งที่จะมีเป้าหมายสำคัญเพื่อให้กำหนดการส่งมอบสามารถจัดการได้ แต่พวกเราที่บินเดี่ยวก็สามารถได้รับประโยชน์จากวิธีการเช่นการพัฒนาคุณลักษณะที่ขับเคลื่อนด้วย
hardmath

@FrustratedWithFormsDesigner ฉันเป็นผู้พัฒนา แต่เพียงผู้เดียว
โคลจอห์นสัน

1
@FrustratedWithFormsDesigner no. ฉันอยู่คนเดียว. ถ้าคุณไม่นับแหล่งปลอมเป็นคนที่ทำงานในโครงการฉันเป็นคนเดียว
โคลจอห์นสัน

4
การจัดส่งเป็นคุณสมบัติเช่นกัน ... บางครั้งมันก็ช่วยให้จำได้ว่าเมื่อพิจารณา (ยัง) คุณสมบัติอื่น
Marjan Venema

คำตอบ:


21

จากประสบการณ์ของฉันมันง่ายที่สุดถ้าคุณมีการพัฒนาและปล่อยจังหวะที่ไม่เข้ากับสิ่งที่คุณต้องการจะทำ นี่คือวิธีที่ฉันทำ:

  1. เขียนคุณสมบัติลงและให้คะแนนซึ่งแสดงว่าคุณต้องการทำงานกับมันมากแค่ไหนและคุณคิดว่าจะเป็นประโยชน์ต่อผู้ใช้มากน้อยเพียงใด (อาจเป็นไปได้ที่จะดึงดูดผู้ใช้จริงสำหรับสิ่งนี้) จากนั้นเขียนตามลำดับ
  2. ก่อนที่คุณจะเช็คอิน / ผลักดันฟีเจอร์ให้แน่ใจว่าคุณมีบิลด์ที่มีความเสถียรและสามารถนำไปใช้งานได้ (พิจารณาระบบ CI อย่างยิ่งเพื่ออำนวยความสะดวก)

ด้วยวิธีนี้คุณสามารถผลักดันการเปิดตัวหลังจากแต่ละฟีเจอร์ถ้าคุณต้องการ ... หรือรอการยกเลิกที่มีค่าที่คุณต้องการให้รีลีสมี

บันทึก:

  • ไม่สามารถให้ความสำคัญกับคุณลักษณะที่สูงกว่าสิ่งที่คุณกำลังทำอยู่ (หรือทำได้ แต่ไม่สามารถขัดขวางสิ่งที่คุณกำลังทำอยู่) มันสามารถมาต่อไปแต่ไม่เคยในขณะนี้ ซึ่งหมายความว่าเมื่อคุณไปจากนี้ไปยังถัดไปคุณจะมีโอกาสที่จะลดการสร้างหากคุณต้องการ

มีประโยชน์มาก! ฉันชอบความเข้มงวดของมันมาก
โคลจอห์นสัน

ฉันจะเพิ่ม: อย่าเริ่มคุณลักษณะใหม่ก่อนที่คุณจะสร้างใหม่ มิฉะนั้นคุณจะจบลงด้วยการวางรหัสฐานของการสิ้นสุดที่ไม่สามารถทำอะไรได้เลย
Tyanna

@Tyanna: นั่นคือสิ่งที่ฉันหมายถึงโดย "คุณสมบัติไม่สามารถให้ความสำคัญสูงกว่าที่คุณกำลังทำงานอยู่ ... มันไม่สามารถขัดขวางสิ่งที่คุณกำลังทำงาน ... "
Steven Evers

7

คำตอบนั้นซ้ำซากและเป็นไปไม่ได้บ่อย: ปฏิเสธที่จะเพิ่มคุณสมบัติเพิ่มเติม

ในเชิงลึกยิ่งขึ้นคำตอบนั้นมาจากสิ่งที่ทำให้คุณสมบัติใหม่ตกอยู่ในถังขยะ หากเราสมมติว่าคุณสมบัติที่คืบคือคุณสมบัติที่เพิ่มเข้าไปในโครงการแม้ว่าข้อเท็จจริงที่ว่าฟังก์ชั่นของพวกเขานั้นจะสัมผัสกับการใช้งานตามวัตถุประสงค์ของโครงการและคุณลักษณะการคืบคลานมีประโยชน์ไม่ใช่ฟุ่มเฟือยคำตอบคือการย้ายไปแยกต่างหาก แต่เครื่องมือที่เกี่ยวข้อง ใช้ปรัชญา Unix ในการสร้างเครื่องมือมุมฉากและติดกาวเข้าด้วยกัน

จากมุมมองของการบริหารโครงการคำตอบก็เปรียบได้ ตัดสินใจว่าคุณยินดีที่จะอุทิศเวลาในการปล่อยครั้งต่อไปและกำหนดเวลา ประเมินคุณสมบัติและตัดให้เพียงพอเพื่อให้ถึงกำหนด หากมีผู้มีส่วนเกี่ยวข้องอื่นนอกเหนือจากตัวคุณให้ตัดสินใจเลือกสิ่งที่สำคัญที่สุดสำหรับพวกเขา

ภาพรวมที่ดีเกี่ยวกับกำหนดการสามารถพบได้บน Joel บนซอฟต์แวร์:

http://www.joelonsoftware.com/articles/fog0000000245.html


9
เนื่องจากเขาอยู่คนเดียวในโครงการเขาอาจต้องจ้างงานจากการตบผู้ขอคุณสมบัติ
ฟิลิป

2

หนึ่งในบทเรียนที่สำคัญที่สุดในการพัฒนาคือการรู้ว่าถึงเวลาที่จะหยุด

สิ่งที่มักจะเกิดขึ้นคือนักพัฒนาเพิ่มฟีเจอร์ ในทางกลับกันเป็นแรงบันดาลใจความคิดเพิ่มเติม คุณสมบัติอื่น ๆ เพิ่มเข้ามา นั่นคืออย่างที่คุณพูดหนึ่งในวิธีที่โครงการกลายเป็นไอ นักพัฒนาไม่เคยเห็นโครงการเป็น 'เสร็จสิ้น' ดังนั้นจึงไม่เคยได้รับการปล่อยตัวออกมา

นิสัยที่คุณต้องการเข้าไปคือหยุดคิดในแง่ของรุ่น / รุ่นว่าเป็นโครงการ 'เสร็จสิ้น' ค่อนข้างมองการพัฒนาเป็นกระบวนการระยะยาว คิดว่าการเผยแพร่เป็นเหตุการณ์สำคัญตามเส้นทางสู่สิ่งที่คุณหวังว่าสักวันหนึ่งโปรแกรมจะเป็น ดังนั้นรุ่น / รุ่นจึงเป็นเพียงแค่สแนปชอตของตำแหน่งที่คุณอยู่ในกระบวนการระยะยาว ... สแนปชอตที่ผ่านการทดสอบแล้ว

สิ่งที่คุณสามารถทำได้ในทางปฏิบัติคือการนั่งลงและระบุรุ่นถัดไปของคุณ มันไม่จำเป็นต้องถี่ถ้วนมากนัก เขียนฟังก์ชันหลักๆ 3-5 ชิ้นที่คุณเชื่อว่าจำเป็นสำหรับการเปิดตัวครั้งต่อไป ( จำนวนคุณสมบัติที่แท้จริงอาจแตกต่างกันไปขึ้นอยู่กับประเภทของแอพที่ไม่นับการแก้ไขข้อบกพร่องหรือการเปลี่ยนแปลง gui เล็กน้อย ) ทำงานกับสิ่งเหล่านั้น หากคุณคิดไอเดียอื่น ๆ เอาล่ะ ... แค่จดบันทึกและนำไปใช้ในรีลีสต่อไปนี้ เมื่อคุณทำไอเท็มเหล่านี้เสร็จแล้ว 3-5 รายการรีลีสของคุณก็พร้อมแล้วสำหรับเบต้า

เมื่อฉันเริ่มแอปพลิเคชันใหม่ฉันมักจะคิดถึง 'วิสัยทัศน์' สุดท้ายของแอพ สำหรับฉันนั่นเป็นสิ่งที่ฉันต้องการในแอปเวอร์ชัน 3 ด้วยมาตรฐานที่ฉันมีความคิดในสิ่งที่จะทำให้รุ่นที่เป็นของแข็ง 1 - เพียงพื้นฐาน

สรุป:

แต่ละรุ่นไม่จำเป็นต้องเป็น 'วิสัยทัศน์' ของโครงการ เพียงก้าวไปสู่วิสัยทัศน์นั้น


2

ใช้ระบบควบคุมเวอร์ชันที่มีราคาถูกในการสร้างสาขาสำหรับแนวคิดบางอย่างและป้องกันไม่ให้ออกจากเส้นทางการเปิดตัวของคุณ ตัวอย่างเช่นในgitคุณสามารถ "คืบคลาน" แนวคิดบางอย่างแล้วgit stashปล่อยมันไป ในภายหลังคุณสามารถตรวจสอบการหยุดชะงักเหล่านี้และเชอร์รี่เลือกพวกเขาในลำดับที่น่าสนใจ

สำหรับฟีเจอร์ที่ใหญ่กว่าสร้างสาขาจริง (เพื่อให้คุณสามารถทำได้หลายอย่าง) ตรงประเด็น: เมื่อฉันต้องการเพิ่มการสนับสนุน generational ให้กับตัวเก็บขยะฉันทำสาขา หยุดชะงักจับสิ่งเล็ก ๆ น้อย ๆ ที่น่าสนใจได้เป็นอย่างดี ฟีเจอร์ขนาดใหญ่สามารถเริ่มต้นเป็น stashes จากนั้นเปลี่ยนเป็นสาขาและจากนั้นก็รวมเข้าด้วยกันเมื่อพร้อม

ด้วย stashes และ branch คุณสามารถเก็บความคิดของคุณจัดลำดับความสำคัญและสร้างขอบเขตสำหรับการเผยแพร่โครงการเดี่ยวของคุณเช่นเดียวกับโครงการทีมที่จัดการ

ดูสิเมื่อคุณมีความคิดมันต้องไปที่ไหนซักแห่งและที่ที่ดีที่สุดคือรหัส : repo คุณสมบัติการคืบคลานนั้นดีกว่าการลืมความคิดที่ดี แต่แน่นอนว่าถ้าคุณคืบหน้าฟีเจอร์ทั้งหมดของคุณไปที่การฉีดเดียวกันมันจะทำการหน่วงเวลาการปล่อยจนกว่าคุณจะตัดการเผยแพร่ที่ไม่เรียบร้อยซึ่งเต็มไปด้วยสิ่งที่ทำไม่เสร็จซึ่งผู้ใช้จะต้องถูกเตือนไม่ให้ใช้

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.