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


12

เรามีนักพัฒนา 7 คนในทีมและต้องเพิ่มความเร็วในการพัฒนาเป็นสองเท่าในช่วงเวลาสั้น ๆ (ประมาณหนึ่งเดือน) ฉันรู้ว่ามีกฎสามัญสำนึกที่ว่า "หากคุณจ้างนักพัฒนามากขึ้นคุณจะสูญเสียประสิทธิภาพในช่วงสองสามเดือนแรก" โครงการดังกล่าวเป็นบริการเว็บอีคอมเมิร์ซและมีโค้ดประมาณ 270K บรรทัด

ความคิดของฉันในตอนนี้คือการแบ่งโครงการในโครงการย่อยอิสระสองโครงการมากขึ้นหรือน้อยลงและปล่อยให้ทีมใหม่ทำงานในโครงการย่อยขนาดเล็กสองโครงการในขณะที่ทีมปัจจุบันทำงานในโครงการหลัก กล่าวคือทีมใหม่จะทำงานในการชำระเงินซึ่งในที่สุดจะกลายเป็นบริการเว็บอิสระเพื่อลดข้อต่อ ด้วยวิธีนี้ทีมใหม่ทำงานในโครงการที่มีโค้ดเพียง 100K บรรทัด

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

=======

UPDATE

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

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

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


2
หากคุณจ้างนักพัฒนามากขึ้นคุณจะสูญเสียประสิทธิภาพในช่วงเดือนแรกเท่านั้น - ฉันไม่เคยได้ยินมาก่อน แต่ฉันมั่นใจว่ามันจะมีมากขึ้น
BЈовић

2
จะเกิดอะไรขึ้นเมื่อคุณพยายามรวมสองส่วนเข้าด้วยกัน มีโอกาสที่แต่ละชิ้นจะผ่านการทดสอบของตัวเองหรือไม่ แต่การทดสอบการรวมกลุ่มใหญ่ในล็อตทั้งหมดจะล้มเหลว? ฉันสงสัยว่าคุณจะพบว่ากฎหมายของ Brook ไม่ได้หลบเลี่ยงได้ง่ายนัก ความคิดสร้างสรรค์ที่ยอดเยี่ยมแม้ว่า; มูลค่า +1 และฉันอยากจะรู้ว่าสิ่งนี้ได้ผลสำหรับคุณอย่างไร
Dawood ibn Kareem

1
javana: เราจะจ้างนักพัฒนาที่มีประสบการณ์
มิทรีเนโกด้า

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

4
ไม่ว่าวิธีการที่น่าตื่นตาตื่นใจของนักพัฒนาที่คุณได้รับพวกเขาจะไม่ได้ไปทำความเข้าใจ 100k บรรทัดของรหัสในเวลาน้อยกว่า ~ 1 เดือนอาจจะ 3 สัปดาห์ที่ผ่านมา
Ryathal

คำตอบ:


1

Altought ฉันเห็นด้วยเหมือนคนอื่น ๆ ที่นี่ว่า:

"... การเพิ่มนักพัฒนาให้กับโครงการล่าช้าทำให้โครงการล่าช้ามากขึ้น ... "

ฉันมีความรู้สึกคุณจะทำมันทุกที่ดังนั้น ...

ความคิดของคุณอาจช่วยได้หากโครงการที่มีอยู่ของคุณมีการจัดการที่เพียงพอโดยโมดูลระบบย่อยหรือโครงการย่อย

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

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

การมีนักพัฒนาใหม่ที่รู้ภาษาการเขียนโปรแกรมหรือสภาพแวดล้อมการเขียนโปรแกรมยังไม่เพียงพอการประยุกต์ใช้ซอฟต์แวร์อาจซับซ้อนมาก

คุณมีเอกสารของ aplication เช่น: UML, ER, Codd-Yourdon, อะไร?

โชคดี.


เรากำลังพูดถึงรหัสบรรทัด 100K เท่านั้นมันไม่ซับซ้อน แต่ขอบคุณสำหรับความกังวล
Dmitry Negoda

1
@Dmitry Negoda: ความซับซ้อนไม่ใช่หน้าที่ของ LOC
jmoreno

มีงานวิจัยจำนวนมาก (เช่นโดย Boehm) ซึ่งแสดงให้เห็นว่าผลผลิตของโปรแกรมเมอร์โดยเฉลี่ยเป็นหน้าที่ของ LOC
Dmitry Negoda

15

คำถามของฉันคือวิธีนี้จะช่วยให้นักพัฒนามือใหม่สามารถปรับตัวเข้ากับโครงการใหม่ได้ง่ายหรือไม่?

"Newbie" อาจหมายถึงใหม่สำหรับคุณหรืออาจหมายถึงใหม่สำหรับการทำงานในฐานะนักพัฒนาซอฟต์แวร์เลย หากคุณจะจ้างกลุ่มนักพัฒนาเพื่อทำงานในโครงการที่สำคัญตามกำหนดเวลาตรวจสอบให้แน่ใจว่าอย่างน้อยที่สุดคนใหม่ที่ได้รับการว่าจ้างเป็นนักพัฒนาที่มีประสบการณ์ ที่จะสร้าง.

มีวิธีอื่นใดบ้างในการขยายทีมพัฒนาอย่างรวดเร็วโดยไม่ต้องรอสองเดือนจนกว่าพวกเขาจะเริ่มผลิตซอฟต์แวร์มากขึ้น

  • ซื้อหรือให้สิทธิ์ใช้งานผลิตภัณฑ์ที่มีอยู่แทนที่จะพยายามสร้างของคุณเอง คุณจริงๆต้องบูรณาการล้อชำระเงิน?

  • อย่างที่ฉันได้กล่าวไว้ข้างต้นจ้างคนที่มีประสบการณ์ในการสร้างระบบที่คุณต้องการ

  • ก่อนที่คุณจะจ้างทีมใหม่นี้คุณควรคิดถึงสิ่งที่พวกเขาจะต้องรู้เกี่ยวกับสิ่งที่คุณมีอยู่ ตรวจสอบให้แน่ใจว่าคุณจองเวลาเพียงพอสำหรับการฝึกซ้อมเพื่อช่วยเพิ่มความเร็ว

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

  • คุณมีกระบวนการพัฒนาที่ชัดเจนหรือไม่? ฐานข้อมูลผิดพลาด? การควบคุมเวอร์ชัน? กระบวนการตรวจสอบรหัส? คู่มือสไตล์? รับสิ่งเหล่านั้นเข้าที่

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


1
+1 เพื่อเขียนตั้งของความต้องการของพวกเขาจะล้าสมัยบิต ...
Dmitry Negoda

3
และใครที่จะสัมภาษณ์พนักงานใหม่เหล่านี้อัพเดตข้อกำหนดที่เป็นลายลักษณ์อักษรและเอกสารการออกแบบกรอกข้อมูลลงในฐานข้อมูลบั๊กใช้เวลาในการฝึกอบรม ... ? มันเป็นนักพัฒนาปัจจุบันหรือไม่? เพราะนั่นหมายความว่าพวกเขาจะไม่พัฒนาเต็มเวลา ดังนั้นการพัฒนาความเร็วไปลง อุ่ย
MarkJ

รหัสคือการทำเอกสารด้วยตนเองและเราจะจ้างผู้พัฒนาที่มีประสบการณ์เท่านั้น และใช่นักพัฒนาปัจจุบันจะช่วยคนใหม่และความเร็วของพวกเขาจะลดลงเล็กน้อย ฉันแค่หวังว่าการจ้างนักพัฒนาในโครงการ 100K loc จะไม่เจ็บปวดเท่าการจ้างงานในโครงการ 270K loc และนั่นเป็นคำถาม
Dmitry Negoda

คุณมี wiki ภายในหรือทุกอย่างถูกเก็บไว้ในเอกสารคำกระจัดกระจายผ่าน LAN หรือไม่
Spencer Rathbun

1
100k, 50k หรือ 10k จะเป็นสิ่งเดียวกัน - รหัสตันที่ไม่มีใครถ่ายโอนไปยังหัวของพวกเขา หากมีหลายร้อยบรรทัดของรหัสนั่นคือเหตุผล เมื่อคุณได้รับหลายพันคนคุณมีระบบที่ซับซ้อนและความปรารถนาในเรื่องความเร็วนั้นมักจะไม่เกิดขึ้น
Michael Durrant

12

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

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

มิฉะนั้นฉันเห็นด้วยกับคาเลบเกี่ยวกับการจัดทำเอกสารข้อกำหนดที่ชัดเจนกำหนดกระบวนการพัฒนาและเครื่องมือและเวลาในการฝึกอบรม ... และในการที่คาดหวังว่าทีมงาน 7 คนจะได้รับการว่าจ้างและเร่งความเร็วภายในหนึ่งเดือนนั้นไม่สมจริง


4
+1 - คุณต้องการใช้นักพัฒนาซอฟต์แวร์เก่าของคุณเพื่อนำคนใหม่เข้าสู่บอร์ด แม้ว่ามันจะหลีกเลี่ยงไม่ได้ที่สิ่งนี้จะทำให้คุณช้าลงเล็กน้อย
mikera

+1 เช่นกัน คุณต้องการให้นักพัฒนาที่มีประสบการณ์ของคุณคอยเป็นที่ปรึกษาคนใหม่ แม้ว่าคนใหม่จะมีประสบการณ์มากมายพวกเขาก็จะไม่ทราบว่า บริษัท ของคุณทำสิ่งต่าง ๆ อย่างไร
Andy

9

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

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


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

หากเป็นเช่นนั้นอาจจะแทนที่จะพยายามเพิ่มความเร็วในการพัฒนาเป็นสองเท่าในขั้นตอนเดียวคุณอาจลอง "เพิ่มความเร็ว" เป็นระยะเวลาหนึ่งก็ได้
Alex D

4

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

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

อีกส่วนหนึ่งของ MMM คือเมื่อทีมเติบโตขึ้นปัญหาการสื่อสารก็เช่นกัน การประชุมใหญ่ขึ้นเรื่อย ๆ เครือข่ายอีเมลกลายเป็นอีกต่อไป ...

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

ในความคิดเห็นของคุณต่อ Alex D คุณพูดถึง "มันไม่ใช่เส้นตายที่เรากำลังจะถึง ดังนั้นเปลี่ยนไปใช้รูปแบบการพัฒนาที่มีบทบาทคุณลักษณะต่าง ๆ ในกลุ่มขนาดเล็กลงและบ่อยขึ้น ให้สมาชิกใหม่ของทีมทดสอบคุณสมบัติใหม่ที่จะช่วยให้พวกเขาเข้าใจรหัสฐาน


ฉันไม่เข้าใจว่าการทดสอบคุณลักษณะใหม่จะช่วยให้เข้าใจรหัสฐานได้อย่างไร เรากำลังว่าจ้างวิศวกร QA ด้วยดังนั้นให้นักพัฒนาพัฒนาและทดสอบทดสอบ
Dmitry Negoda

2

คุณจะดีกว่าถ้าจ้างคนใหม่และดูกระบวนการของคุณเพื่อดูว่าคุณสามารถทำการเปลี่ยนแปลงเพื่อให้สิ่งต่าง ๆ ดำเนินไปได้เร็วขึ้น พบข้อผิดพลาดที่เร็วกว่าใช้เวลาในการแก้ไขน้อยลงดังนั้นคุณจะทดสอบอย่างไร คุณกำลังทำรีวิวรหัส? คุณให้ความสนใจกับคุณภาพของความต้องการหรือไม่? คุณมีกระบวนการสร้างและแยกประเภทอัตโนมัติหรือไม่ คุณมีการทดสอบอัตโนมัติหรือไม่ คุณมีการประชุม standup ทุกวัน (น่าประหลาดใจว่าการพัฒนาเร็วขึ้นมากแค่ไหนเมื่อมีคนถามความก้าวหน้าของคุณทุกวัน!) คุณใช้กระบวนการแบบเปรียวหรือไม่? คุณมีข้อบกพร่องในการออกแบบพื้นฐานที่ควรได้รับการแก้ไขเพื่อให้การพัฒนาที่เหลืออยู่ดำเนินไปเร็วขึ้น (การออกแบบที่ไม่ดีสามารถทำให้โครงการพัฒนาช้าลงอย่างไม่น่าเชื่อ)

โปรดอ่าน Mythical Man-month คุณจะต้องชัดเจนเพื่อที่จะสามารถบอกผู้บริหารระดับสูงว่าทำไมพวกเขาถึงเลือกตัวเลือกที่เหนื่อยล้าเพื่อเร่งโครงการ .


ใช่สำหรับคำถามของคุณทั้งหมด
Dmitry Negoda

0

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


Mike Partridge เปลี่ยนคำถามของฉัน ฉันจะไม่โยนใครออกจากหน้าผา แน่นอนว่านักพัฒนาใหม่จะทำงานร่วมกับประสบการณ์เพียงแค่ในโครงการย่อยที่แตกต่างกัน
Dmitry Negoda

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