ไม่ใช่ทุกอย่างในบริษัทใหญ่ที่เกี่ยวข้องกับการเขียนโค้ด บางครั้ง คุณต้องทำสิ่งเมตาจำนวนมากเพื่อจัดการโครงการ นี่เป็นสองเรื่องราวของการทำอย่างนั้น
…
คุณเคยเห็นสิ่งที่เกิดขึ้นเมื่อทีมมีรายการ “สิ่งที่ต้องทำ” ยาวๆ และไม่รู้ว่าจะเริ่มต้นจากตรงไหน? คุณเคยนั่งตรงนั้นและเป็นสักขีพยานในการสนทนาแบบวงกลมของคนที่พยายามจะให้ความสำคัญกับรายการเหล่านั้น เช่น P0, P1, P2 หรือไม่? พวกเขายังไม่รู้ว่าจะเริ่มต้นจากตรงไหน?
“AB-123 คือ P0…”
“อ๋อ แน่นอน” “ใช่” “แน่นอนอยู่แล้ว”
“แต่เราทำไม่ได้เพราะ XX-996 ยังไม่เสร็จ…”
“XX-996 คือ P2 ดังนั้นจึงไม่สามารถทำได้ก่อน P0…”
… เสียงคุ้นเคย?
ฉันเคยผ่านอะไรแบบนี้มาโดยอ้อม มีทีมในบริเวณใกล้เคียงซึ่งมีความเกี่ยวข้องอย่างใกล้ชิดกับสิ่งที่ฉันทำอยู่ แต่ไม่ได้เชื่อมต่อกับเครือข่ายการจัดการของฉัน พวกเขาติดอยู่กับเรื่องแบบนี้ และผู้จัดการของพวกเขาถามว่าฉันจะร่วมกับพวกเขาเพื่อจัดลำดับความสำคัญของพวกเขาหรือไม่
นี่เป็นหนึ่งในสถานการณ์ที่คุณมีคนจำนวนมากพยายามปรับปรุงความน่าเชื่อถือสำหรับบริการ ด้วยเหตุผลใดก็ตาม พวกเขาไม่สามารถแยกแยะองค์กรนี้โดยเฉพาะได้ นี่คือสิ่งที่เกิดขึ้นในห้องประชุมในวันนั้น
เนื่องจากเรามีทุกคนในห้องเดียวกันในเวลาเดียวกัน (ฉันยอมรับในความหรูหราในทุกวันนี้) ฉันแค่ถามว่าฉันจะจัดการกับปัญหาได้หรือไม่ คว้าเครื่องหมายและมุ่งหน้าไปที่กระดาน ฉันขอให้ใครสักคนมอบสิ่งที่พวกเขาอยากเห็นให้เกิดขึ้น มันขึ้นไปบนกระดานด้วยชื่อสั้น ๆ แต่น่าจดจำและมีวงกลมล้อมรอบ ฉันขออีกและมันก็ไปบนกระดานที่อื่นด้วย
สิ่งนี้ดำเนินต่อไปจนกระทั่งเรามี 10 หรือ 15 รายการที่ผู้คนคิดว่าทีมควรทำด้วยเหตุผลอย่างใดอย่างหนึ่ง จากนั้นฉันก็เริ่มจากด้านหนึ่งของกระดาน เลือกรายการ และถามว่าขึ้นอยู่กับส่วนอื่นๆ หรือไม่ ปรากฎว่าอันที่จริงอันนี้มีการขึ้นต่อกัน ดังนั้นมันถูก “บล็อก” โดยรายการอื่นบนกระดาน ฉันดึงลูกศรจากอันแรกไปอันที่สอง
สิ่งนี้ดำเนินต่อไปจนกระทั่งเราได้เยี่ยมชม “โหนด” ทั้งหมดบนกระดาน และเรามีสิ่งที่น่าสนใจให้ดู มีบางโหนดที่ถูกบล็อกโดยสิ่งอื่น ๆ ทุกประเภท แต่ก็มีบางโหนดที่ไม่มีอะไรปิดกั้น สิ่งนี้ไม่ขึ้นกับ P-this ใดๆ P- ที่ให้ความสำคัญกับผู้คนผูกมัดกับงานเหล่านี้ ฉันบอกเป็นนัยว่าลำดับความสำคัญของพวกเขาไม่ได้มีความหมายอะไรเลยหากคุณไม่สามารถคืบหน้าได้ ดังนั้นให้นำสิ่งที่สามารถทำได้ในตอนนี้และดำเนินการกับพวกเขา หากคุณทำสิ่งนี้ต่อไป ในที่สุดคุณก็จะได้ P0 ที่คุณคิดและมันจะเกิดขึ้น
จริงๆแล้วสถานการณ์คลี่คลายเหมือน Makefile ยักษ์สำหรับฉัน นี่คือที่ที่คุณพูดว่า โอเค ในการสร้าง my_project ฉันต้องสร้าง httpclient.o และ logging.o ในการสร้าง httpclient.o ฉันต้องมี libcurl ในระบบ ฉันยังไม่มี libcurl ในระบบ ดังนั้นฉันจึงยังไม่สามารถสร้าง httpclient ได้ แต่ฉัน *สามารถสร้าง* การบันทึกได้ เพราะมันไม่ได้ขึ้นอยู่กับอะไรเลย ดังนั้นคุณสามารถทำงานเกี่ยวกับการบันทึกหรือใช้งาน libcurl ได้ หรือถ้าคุณมีคนงานสองคน ให้ทำทั้งสองอย่างพร้อมกัน ไชโย
สำหรับฉัน “ลำดับความสำคัญ” ส่วนใหญ่เป็นไม้ประดับ ดูเหมือนว่าคุณจะใช้มันเป็นตัวแบ่งสาย ตัวอย่างเช่น สมมติว่าคุณมีห่วงโซ่การพึ่งพาหนึ่งชุดที่บล็อกงานที่เรียกว่า P0 (ลำดับความสำคัญสูงสุดตามที่คาดคะเน) และอีกรายการหนึ่งบล็อก P3 (โชคดี) คุณอาจพยายามทำอย่างแรกให้เสร็จมากกว่าทำอย่างหลัง และอาจเริ่มทำสิ่งนั้นก่อน มันเป็นระบบบอกใบ้ ไม่ใช่อาณัติ
…
มีเรื่องสนุกอีกอย่างที่พวกเราสองสามคนทำในงานเดียวกันนั้นในเวลาเดียวกัน ผู้ที่มีความคิดเหมือนกันหลายคนตัดสินใจว่าเราต้องการวิธีที่ดีกว่าในการจัดส่งซอฟต์แวร์ระบบที่สร้างโดยองค์กร ซึ่งทำงานบนทุกเครื่องในฟลีท – “ไบนารีแบบกระจายอย่างกว้างขวาง” หากคุณต้องการ พวกเราสามคนตัดสินใจที่จะทำมัน
เนื่องจากไม่มีใครเคยทำสิ่งนี้มาก่อน เราจึงรู้ว่าไม่มีทางที่เราจะได้รับ “แผนที่ถนน” ที่วางไว้ข้างหน้า เรารู้ว่าความสำเร็จเป็นอย่างไร แต่เราก็รู้ด้วยว่าเราจะต้องปรับตัวให้เข้ากับสภาพที่พบระหว่างทาง ด้วยเหตุผลดังกล่าว เราจึงเริ่มต้นด้วยการจัดส่งไบนารีด้วยมือ จากนั้นจึงจดบันทึกว่าส่วนใดของกระบวนการที่น่ากลัว เมื่อเราคิดว่าเรารับมือได้แล้วว่ามันคืออะไรและจะทำให้ดีขึ้นได้อย่างไร เราจะทำขั้นตอนนั้นโดยอัตโนมัติ จากนั้นเราจะย้ายสแต็กขึ้นไปหนึ่งระดับแล้วทำอีกครั้ง สิ่งนี้ดำเนินต่อไปจนกระทั่งสิ่งต่าง ๆ เกือบจะดำเนินไปเอง … และเรามีรายการ “สิ่งที่คุณต้องมีในการจัดส่ง WDB อย่างมีสติ” พอสมควร
ฉันเคยพูดถึงเรื่องนี้มาก่อนแล้ว แต่สิ่งที่ฉันยังไม่ได้แบ่งปันคือวิธีที่เราจัดการกับแนวคิด “โอ้ แล้วถ้าเราทำสิ่งนี้” ที่เกิดขึ้นระหว่างทาง เราคิดวิธีจัดการกับสิ่งเหล่านี้ และฉันชอบคิดว่ามันค่อนข้างมีมนุษยธรรมและไม่ได้ให้คำมั่นสัญญาใดๆ ที่เราไม่สามารถรักษาได้ นี่คือวิธีการทำงาน
เนื่องจากมีพวกเราสามคนทำงานในโครงการนี้ และชื่อยูนิกซ์ของเรา (ซึ่งเป็นชื่อเล่น IRC ของเราด้วย) จึงเป็นชื่อย่อที่แตกต่างกันสามชื่อ (A, B และ R) เราจึงใช้สิ่งนั้นเพื่อประโยชน์ของเรา เราจะเปิด IRC และพูดคุยเกี่ยวกับสิ่งต่าง ๆ และเมื่อเราได้แนวคิด เราจะเพิ่มรายการอื่นจากชุดของเราเอง นั่นคือ ความคิดแรกของฉันคือ R1 จากนั้น R2 จากนั้น R3 ในขณะที่ความคิดของคุณ B เป็น B1, B2, B3 และความคิดของคุณ A คือ A1, A2, A3 และอื่นๆ
วิธีนี้ช่วยให้เราทุกคนนำเสนอแนวคิดได้ในขณะเดียวกันก็ให้ตัวระบุที่ไม่ซ้ำกันเพื่อไม่ให้หลงทาง และไม่ต้องประสานงานกันเพื่อไม่ให้ชนกันในขณะที่เพิ่มเคาน์เตอร์ ความคิดทั้งหมดไปที่หน้า Wiki ของเรา และนั่นก็เป็นรูปธรรมพอๆ กับที่พวกเขาหามาได้ชั่วขณะหนึ่ง จากนั้นเราทุกคนสามารถเห็นสิ่งที่คนอื่นคิด มองหาความคิดที่ซ้ำซ้อน ซ้อนทับกัน และโดยทั่วไปแล้วมองหาสิ่งที่จะช่วย (หรือทำร้าย) สิ่งอื่นได้
ไม่มีรายการใดเป็นข้อผูกมัด พวกเขาเป็นเพียงความคิด นอกจากนี้ เพียงเพราะคุณมีความคิด ไม่ได้หมายความว่าคุณต้องทำอะไรกับมัน เหตุผลเดียวที่เราแท็กพวกเขาในแบบที่เราทำคือเพื่อให้สามารถระบุตัวตนได้ไม่ซ้ำกัน กำหนดในลักษณะที่ไม่บล็อก ดังนั้นคุณจะรู้ว่าใครจะขอคำชี้แจงหากส่วนสำคัญของมันไม่ชัดเจนจากหน้าวิกิ และ/หรือบันทึกการสนทนาของ IRC
“เฮ้ B ใน B5 คุณคิดที่จะเก็บสิ่งนั้นไว้ที่ไหน”
“ใช่ ฉันต้องการสิ่งนั้นใน svn”
“ใช่แล้ว มันทำให้ฉันเข้าใจมากขึ้นแล้ว ขอบคุณนะ!”
… คุณได้รับความคิด
เมื่อถึงจุดหนึ่ง เราเริ่มเย็บเข้าด้วยกัน โดยที่ A1 อาจขึ้นอยู่กับ A5 แต่แล้ว A5 ก็ขึ้นอยู่กับ R2 หลังจากทำเช่นนี้ได้สักพัก เราก็ได้รายการหลายประเภท
บางรายการไม่ได้บล็อกอะไรเลยและไม่ถูกบล็อก คุณสามารถเลือกหนึ่งอันและแฮ็คมันได้ทุกเมื่อ แต่ในขณะเดียวกัน คุณจะไม่ปลดบล็อคใครหรือสิ่งอื่นใดด้วยการทำสิ่งนี้ อาจทำให้ช่วงบ่ายที่ดีของการทำงานในโครงการที่มีในตัวเอง
มีรายการที่ถูกบล็อกโดยรายการอื่นอย่างน้อยหนึ่งรายการ พวกเขามีแนวโน้มที่จะค่อนข้างใหญ่
จากนั้นก็มีไอเทมที่ปิดกั้นตัวเองตั้งแต่หนึ่งรายการขึ้นไป
สิ่งที่เป็นตัวบล็อกแต่ไม่ได้ปิดกั้นตัวเองเป็นที่ที่ชัดเจนในการเริ่มทำงานกับสิ่งต่าง ๆ หากคุณกำลังมองหาบางสิ่งที่จะทำ นี่เป็นเพราะถ้าคุณเริ่มในสิ่งที่ถูกบล็อก คุณก็จะโดนตัวบล็อก! ค่อนข้างชัดเจนถ้าคุณคิดเกี่ยวกับมันใช่ไหม?
ด้วยการวาดสิ่งนี้ออกเป็นพวงของโซ่ (คิดว่าเป็นวงกลมที่มีลูกศรชี้ไปที่วงกลมอื่น ๆ ) โดยได้รับความอนุเคราะห์จากตัวแสดง “จุด” / graphviz ในตัวของ Wiki เราสามารถดูที่ปลายของมันเพื่อดูว่าเป็นไปได้ กรี๊ดดดดด *ตอนนี้* นอกจากนี้เรายังสามารถดูรายการที่จะมีผลกระทบมากที่สุดในแง่ของการปลดบล็อกงานในอนาคต
เมื่อมีคนตัดสินใจว่าจะทำอะไรบางอย่าง เราจะสร้างงานขึ้นมา “งาน” เป็นหน่วยของสกุลเงินในซอฟต์แวร์ติดตามจุดบกพร่องของบริษัทนี้ นั่นหมายความว่ามีตัวเลขและ URL ทางลัดเล็กๆ น้อยๆ ที่ดี ดังนั้นวิกิจะได้รับการอัปเดตเพื่อเชื่อมโยงไปยัง ใครก็ตามที่สงสัยสามารถติดตามลิงก์นั้นในเครื่องมืองานเพื่อดูว่าเกิดอะไรขึ้น
ฉันจะสังเกตว่ากราฟได้รับการจัดเรียงเพื่อแสดงสิ่งต่าง ๆ ที่มีสีต่างกันและรูปแบบการแสดงผลขึ้นอยู่กับว่าพวกเขาถูกบล็อกหรือไม่และเสร็จสิ้นหรือไม่
ในบางครั้ง เราจะผ่านและตัดกราฟกลับมาเพื่อลบโหนดที่เสร็จแล้วและใช้พื้นที่เพียง การดูสิ่งต่าง ๆ ถูกโจมตีแล้วหายไปจากรายการและกราฟรู้สึกดีมาก
สิ่งสำคัญอย่างหนึ่งที่นี่: บางรายการไม่เคยออกจากรายการ เท่าที่ฉันรู้ พวกเขาอาจยังอยู่ที่นั่นในหน้าวิกิขององค์กรบางหน้า ซึ่งฝังอยู่ในส่วนลึกของบริษัทนั้น สิ่งของเหล่านั้นเป็นเพียงความคิดที่ใครบางคนมีในวันหนึ่ง แต่เมื่อบริการเริ่มผลิต กลับกลายเป็นว่าเราไม่ต้องการมันมากขนาดนั้น หรือมีความคิดที่ผิดทั้งหมด จากนั้นนั่นคือจุดสิ้นสุดของสิ่งนั้น บางคนถูกระบุในรายการโดยไม่ได้รับคำอธิบายประกอบพร้อมคำอธิบายว่าทำไมเราจึงไม่ต้องคิดเกี่ยวกับพวกเขาต่อไป
ระบบการทำสิ่งต่าง ๆ นี้ทำให้ฉันมีความสุขเพราะไม่ปล่อยให้เราถือถุงที่เต็มไปด้วยคำสัญญา แค่พูดถึงบางสิ่งบางอย่างไม่ได้บังคับให้เราใช้เวลากับมันในภายหลัง การแยกการสนทนาออกจากคำมั่นสัญญาทำให้เรามีอิสระในการพูดคุยเกี่ยวกับสิ่งต่างๆ ได้ทุกประเภทโดยไม่ต้องกังวลว่าจะจบลงด้วยสิ่งที่โง่เขลาและไร้ประโยชน์มากมายที่ขวางทาง แน่นอนว่าเรายังคงให้คำมั่นสัญญา นั่นคือหน้าที่ของเรา
คุณจะป้องกันไม่ให้มีงาน/ตั๋ว/อะไรก็ตามที่จะไม่มีวันหายไปได้อย่างไร คุณจะไม่สร้างมันขึ้นมาจนกว่าคุณจะแน่ใจว่ามันต้องมีอยู่จริง
ข้อแม้: หากคุณมีหลายสิ่งหลายอย่างเกิดขึ้นจนคุณเสี่ยงต่อการ “สูญเสีย” บางอย่างเนื่องจากเป็นเพียงรายการบรรทัดบนหน้า wiki ที่ใดที่หนึ่ง คุณอาจไม่ต้องการลองทำสิ่งนี้กับโปรเจ็กต์ของคุณ (คุณอาจจะอยากหนีจากโปรเจ็กต์นั้นด้วย เพราะมันมีอะไรเกิดขึ้นมากมายเหลือเกิน)