ทำไมเราทำอะไรไม่สำเร็จ?


9

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

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

สิ่งที่ฉันสามารถระบุได้ว่าเป็นปัญหารวมถึง:

  • รายละเอียดของงานในมือมีน้อย ส่วนหนึ่งเป็นเพราะการจัดการเป็นปัญหาคอขวดและเราไม่มีเงินหรือผู้คนที่จะทำตามข้อกำหนดรายละเอียดเท่าที่เราต้องการ ส่วนหนึ่งเป็นเพราะซอฟต์แวร์ที่เรากำลังพัฒนานั้นกำลังสืบสวนและวิธีการที่แม่นยำยังไม่ชัดเจนจนกว่าจะมีการสาธิตและนำมาใช้เพื่อกำหนดประสิทธิภาพ
  • Lead Dev นั้นชื่นชอบสิ่งที่เขาเรียกว่า 'การสร้างต้นแบบ' จนถึงจุดที่เขาเริ่มยืนยันว่าทุกอย่างคือ 'prototyped' ซึ่งส่วนที่เหลือของเราดูเหมือนจะเขียนโค้ดไม่ดีและให้มันแก่ modellers เพื่อเล่นกับ ไม่ชัดเจนว่าเขาคาดหวังอะไรจากการออกกำลังกายนี้ในหลายกรณี การดำเนินการ 'ที่เกิดขึ้นจริง' นั้นได้รับความทุกข์ทรมานเนื่องจากการยืนยันของเขาว่าการปฏิบัติที่ดีต้องใช้เวลามากเกินไปจากการสร้างต้นแบบ ฉันยังไม่ได้เริ่มที่จะสามารถแก้ปริศนาตรรกะที่คลี่คลายนี้และฉันไม่แน่ใจว่าฉันต้องการลอง
  • ผู้ดัดแปลงคาดว่าจะบอกทุกอย่างเกี่ยวกับวิธีการที่ต้องการในรายละเอียดที่แม่นยำและเชื่อมั่นอย่างแน่นอนว่าสิ่งที่พวกเขาออกมานั้นไม่มีเหตุผลในทางทฤษฎี เรื่องนี้แทบจะไม่เคยเกิดขึ้นจริง แต่ไม่มีการดำเนินการใด ๆ ที่จะแก้ไขสถานการณ์นี้ ไม่มีใครในด้านการสร้างแบบจำลองยกข้อกังวลใด ๆ ในลักษณะที่มีโครงสร้างที่มีแนวโน้มที่จะดำเนินการและพวกเขาไม่แสวงหาแนวทางในการใช้แนวทางปฏิบัติที่ดีที่สุด ไม่มีอะไรทำเกี่ยวกับความเฉยเมยเช่นกัน
  • ฉันเคยพยายามที่จะผลักดัน TDD ในทีมก่อนหน้านี้ แต่พบว่ามันยากเพราะมันใหม่สำหรับฉันและในขณะที่ผู้ที่มีหน้าที่กำกับดูแลงานของฉันก็เต็มใจที่จะทนมันไม่มีความกระตือรือร้นมาจากคนอื่น ฉันไม่สามารถพิสูจน์ได้ว่าฉันใช้เวลาไปกับการหมกมุ่นและไม่ทำฟีเจอร์ให้จบดังนั้นความคิดนั้นก็ถูกทอดทิ้ง ฉันกังวลว่ามันจะไม่ถูกหยิบขึ้นมาอีกเพราะไม่มีใครชอบที่จะบอกวิธีการทำงานของพวกเขา
  • ตอนนี้เรามีเซิร์ฟเวอร์รวมอย่างต่อเนื่อง แต่ส่วนใหญ่จะใช้เพื่อทดสอบการถดถอยหลายชั่วโมงเท่านั้น มันถูกเปิดทิ้งไว้ว่าควรจะใช้การทดสอบเต็มรูปแบบและการรวมเข้าด้วยกันเช่นกัน แต่ในขณะนี้ไม่มีใครเขียนมัน
  • ทุกครั้งที่ฉันยกประเด็นเรื่องคุณภาพด้วยนักพัฒนานำฉันจะได้รับคำตอบเกี่ยวกับผลของ 'การทดสอบคุณสมบัติ A เป็นเรื่องตรงไปตรงมาคุณสมบัติ B นั้นสำคัญสำหรับผู้ใช้มาก แต่ยากที่จะทดสอบดังนั้นเราจึงไม่ควรทดสอบคุณลักษณะ A' อีกครั้งฉันไม่ได้คืบหน้าในการพยายามแก้ปัญหาตรรกะนี้

....วุ้ย. เมื่อฉันพูดแบบนั้นมันดูแย่กว่าที่ฉันคิดไว้มาก ฉันคิดว่ามันกลับกลายเป็นว่ามันเป็นหนทางเพื่อขอความช่วยเหลือ


5
บริษัท ที่ผลักดันซอฟท์แวร์ที่ลูกค้าใช้และชื่นชอบนั้นดีแค่ไหน? กล่าวอีกนัยหนึ่งคือทีมได้รับผลลัพธ์ที่ดีแม้ว่าคุณจะไม่เชื่อว่ากระบวนการนี้เป็นตัวเอกก็ตาม
Robert Harvey

@ Robert Harvey - มันยากสำหรับฉันที่จะตัดสิน ผลิตภัณฑ์มีความเฉพาะอย่างยิ่งและเรา (นักพัฒนา) ได้รับข้อความที่หลากหลาย ในอีกด้านหนึ่งลูกค้าใหม่ในตลาดที่ประสบความสำเร็จกำลังฟาดฟันผลิตภัณฑ์มากกว่าที่เรานึกภาพไว้ในตอนแรกและค้นหาความผิดพลาดอันเป็นผลซึ่งพวกเขาดูเหมือนจะไม่สนใจเพราะเราอธิบายว่าทำไมและแก้ไขได้อย่างรวดเร็ว ในทางกลับกันลูกค้าสถาบันขนาดใหญ่บางคนก็ไม่ไว้ใจและเราเริ่มที่จะเห็นการแก้ไขโมเดลซ้ำ ๆ ทีมซอฟต์แวร์เป็นหนึ่งในไม่กี่คนที่ยังอยู่ใน บริษัท ดังนั้นเราจึงดูดีในเวลานี้
Tom W

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

คำถามที่ดี. ฉันสังเกตเห็นว่าถึงแม้จะมีผู้ชมที่รับได้ แต่การเปลี่ยนแปลงที่แท้จริงนั้นเป็นเรื่องยากเว้นแต่คุณจะเห็นว่ามันทำงานได้จริง คำแนะนำของฉันคือลองแนวทางเพื่อเพิ่มผลผลิตของคุณก่อนจากนั้นแสดงสิ่งเหล่านี้ให้กับทีม ด้วยการฝึกฝนคุณสามารถพัฒนา TDD ได้เร็วกว่าเขียน / ดีบัก / ทำซ้ำ
Mike B

คำตอบ:


19

ให้ฉันเล่นทนายของปีศาจสักครู่:

สเปคของงานในมือนั้นกระจัดกระจาย ... หัวหน้านักพัฒนาชื่นชอบสิ่งที่เขาเรียกว่า 'การสร้างต้นแบบ'

นักพัฒนาซอฟต์แวร์ชื่นชอบการสร้างต้นแบบเพราะมีคุณสมบัติเบาบาง นี่อาจเป็นสิ่งที่ดี นี่คือวิธีที่ร้านค้าที่ทำงานซ้ำ ๆ

ผู้ดัดแปลงคาดว่าจะบอกทุกอย่างเกี่ยวกับวิธีการที่ต้องการในรายละเอียดที่แม่นยำ

สิ่งนี้จะไม่ทำงานในร้านค้าซ้ำ ธรรมชาติของการพัฒนาแบบวนซ้ำคือความต้องการมักไม่สมบูรณ์ การวนซ้ำเป็นสิ่งที่จำเป็นเพื่อแยกความต้องการออกไป

ฉันเคยพยายามที่จะผลักดัน TDD ในทีมก่อนหน้านี้ แต่พบว่ามันยากเพราะมันใหม่สำหรับฉัน

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

ตอนนี้เรามีเซิร์ฟเวอร์รวมอย่างต่อเนื่อง แต่ส่วนใหญ่จะใช้เพื่อทดสอบการถดถอยหลายชั่วโมงเท่านั้น

นั่นอาจจะเหมาะสมในร้านค้าเล็ก ๆ ซ้ำ ๆ

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

ดูเหมือนว่าร้านของคุณจะมีข้อ จำกัด ด้านเวลา ชอบหรือไม่คุณจะผูกพันตามข้อ จำกัด เหล่านั้น

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


ฉันคิดว่าคุณจะต้องเข้าหามันจากมุมมอง "หนี้ทางเทคนิค" ทุก บริษัท ทำการประมาณเวลา คุณสมมติว่ามีความรักที่ดีอยู่แล้วเริ่มต้นสร้างเกิน 10% ถึง 20% เข้าไปในประมาณการเวลาของคุณสำหรับ refactoring และการฝึกอบรมและทำให้มันติด
Robert Harvey

เพื่อจะดำเนินการต่อ; การพัฒนาซ้ำเป็นชื่อของเกมคุณมีถูกต้องแล้ว ปัญหาคือการทำซ้ำก่อนที่มันจะเสร็จจริง ๆ เพราะเราได้รับการพูดซ้ำซากจากผู้ดัดแปลงว่าสิ่งที่เราเขียนนั้นถูกต้องจริงหรือไม่ ไม่มีใครสามารถระบุข้อผิดพลาดใด ๆ ดังนั้นสิ่งที่เราได้ทำเรือ หกเดือนต่อมามันกลับกลายเป็นว่าผิด ฉันชอบที่จะสามารถที่จะชี้ให้เห็นว่า modellers จะต้องมีการกำหนดเกณฑ์การกระชับไปกับการทดสอบ แต่แล้วอีกครั้งมันไม่ได้เป็นของพวกเขางานที่จะพูดเพื่อ?
Tom W

2
@ Tom: ตราบใดที่คุณไม่ได้ยืนยันคุณสมบัติที่สามารถทดสอบได้จาก modellers พวกเขาสามารถบอกทีมของคุณได้ว่าพวกเขาทำผิด หากพวกเขาจะต้องรับผิดชอบต่อคุณในการผลิตผลลัพธ์จากแบบจำลองของพวกเขาคุณต้องถือพวกเขารับผิดชอบในการให้ข้อมูลจำเพาะที่ทดสอบได้เพื่อให้คุณสามารถประกาศความสำเร็จได้ สเปคทุกอย่างควรมีไว้ในแบบทดสอบ "go, no go" เพื่อให้คุณและลูกค้า (หรือ modellers) สามารถตกลงร่วมกันว่าการทดสอบผ่านไปโดยไม่ถูกตีความ
Robert Harvey

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

ไม่มีอะไรผิดปกติกับการรักษารหัสเช่นการทดสอบ; นั่นเป็นส่วนหนึ่งของกระบวนการวนซ้ำ แต่ในที่สุดคุณจะต้องไปที่ "รหัสนี้ยอมรับอินพุตเหล่านี้และคาดว่าจะสร้างผลลัพธ์นี้" นั่นคือสิ่งที่การทดสอบหน่วยสำหรับ; พวกเขาเป็นส่วนหนึ่งของข้อกำหนด ฉันเห็นได้ว่าทำไมคุณถึงต้องการทำ TDD; มันบังคับให้ข้อกำหนดบนโค้ด ... แต่คุณต้องได้รับการสนับสนุนจากวัฒนธรรมองค์กรเพื่อให้งานนั้นและ TDD มีอากาศของ "ศาสนา" เกี่ยวกับเรื่องนี้ ไม่ใช่ทุกสิ่งที่พิสูจน์ได้ด้วยวิธีนี้ดังนั้นในที่สุดคุณอาจต้องใช้ชีวิตในระดับที่ไม่สบาย
Robert Harvey

2

ฉันจะมุ่งเน้นไปที่ต้นแบบที่นี่

ปัญหาที่สำคัญกับต้นแบบคือพวกเขามีวัตถุประสงค์เพื่อพิสูจน์แนวคิด

อย่างไรก็ตามหากคุณไม่สามารถสร้างต้นแบบเพิ่มเติมได้และต้องสร้างผลิตภัณฑ์ขั้นสุดท้ายใหม่ตั้งแต่เริ่มต้นคุณอาจไม่ได้สร้างต้นแบบและคุณเสียเวลาในการสร้าง

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


นั่นคือสิ่งที่ฉันพยายามสื่อสารในบางครั้ง ในขณะที่มันเกิดขึ้นต้นแบบมักจะมีค่าและสอนบทเรียนที่สำคัญเกี่ยวกับธรรมชาติของปัญหา อย่างไรก็ตามบทเรียนเหล่านั้นจะได้รับการเรียนรู้ไม่ว่าจะเป็นไปได้หรือไม่และคุณภาพของการใช้งานนั้นขึ้นอยู่กับนักพัฒนาที่สร้างความรู้ที่ได้รับจากสมองของพวกเขาขึ้นมาใหม่แทนที่จะใช้ต้นแบบเพื่อเขียนข้อมูลจำเพาะ นักพัฒนานำบอกว่าสิ่งหลังควรเกิดขึ้นจากนั้นไม่ปฏิบัติตามเพื่อให้มั่นใจว่าเป็นจริง
Tom W

เมื่อเขาบอกว่าเขาต้องการต้นแบบสิ่งที่เขาหมายถึงคือเขาต้องการรุ่นที่ใช้งานได้น้อยที่สุดและเร็วที่สุด นี่จะเป็นพื้นฐานสำหรับรุ่นสุดท้าย ปัญหาของวิธีการก็คือ junior devs (โดยทั่วไป) สามารถเขียนโค้ดที่ดีหรือสามารถเขียนโค้ดได้อย่างรวดเร็ว แต่แทบจะไม่สามารถทำได้ทั้งสองอย่างในเวลาเดียวกัน
เควิน

2
Fred Brooks กล่าวว่า "เขียนอย่างใดอย่างหนึ่งที่จะทิ้งคุณจะต่อไป" ที่เป็นจริงในวันนี้เหมือนเมื่อ 40 ปีที่แล้ว
mattnz

1

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


1

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

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


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