วิธีการประเมิน จัดการ และหลีกเลี่ยงหนี้ทางเทคนิค
เผยแพร่แล้ว: 2020-05-26หากหนี้ทางเทคนิคดูเหมือนหลุดออกมาจากคู่มือการเงิน นั่นเป็นเพราะคำนี้เกี่ยวข้องกับการเงิน อย่างไรก็ตาม ตามความเป็นจริงแล้ว หนี้ทางเทคนิคเกี่ยวข้องกับการเขียนโปรแกรม เป็นแนวคิดที่ว่าในระหว่างการพัฒนาโครงการซอฟต์แวร์ ขั้นตอนที่จำเป็นบางอย่างจะถูกข้ามไป หรือเพียงแค่ละทิ้งไปทั้งหมดเพื่อให้ตรงตามกำหนดเวลา
ในการพัฒนาแอพหรือซอฟต์แวร์ที่สมบูรณ์แบบ นักพัฒนามักจะถูกจำกัดเวลา เช่นเดียวกับบุคคลที่สุ่มทำภารกิจใดๆ ก็ตาม ดังนั้นจึงเหมาะสมที่จะมีการแลกเปลี่ยนระหว่างการส่งมอบผลิตภัณฑ์ที่สมบูรณ์แบบด้วยรหัสที่สมบูรณ์แบบและการเพิ่มเวลาสูงสุด
คำถามก็คือ: มีการจำกัดการแลกเปลี่ยนเหล่านี้หรือไม่? มีอันตรายโดยธรรมชาติที่อาจเป็นผลมาจากการแลกเปลี่ยนนี้หรือไม่? สุดท้ายนี้ นักพัฒนาจะดีกว่าในระยะยาวหรือไม่? ในบทความเกี่ยวกับหนี้ทางเทคนิคนี้ ฉันจะพยายามตอบคำถามเหล่านี้ทั้งหมด
หนี้ทางเทคนิคคืออะไร?
ในการกำหนดหนี้ทางเทคนิค เราจะต้องอ้างอิงถึงคนที่ให้เครดิตกับการสร้างเงื่อนไขตั้งแต่แรก: Ward Cunningham ตามคำกล่าวของคันนิงแฮม หนี้ทางเทคนิคหมายถึงงานพัฒนาพิเศษที่ต้องใช้ในการเขียนโปรแกรมโค้ดเพื่อชดเชยการขาดดุลที่เกิดจากการเขียนโปรแกรมภายในระยะเวลาอันสั้น
ในการทำให้ภาพดูโจ่งแจ้งยิ่งขึ้น ลองนึกภาพว่าคุณได้รับมอบหมายให้ทำความสะอาดห้องรกๆ และคุณกำลังจะไปเรียนสาย เพื่อให้แน่ใจว่าคุณปฏิบัติตามคำแนะนำและตรงต่อเวลาสำหรับชั้นเรียน คุณต้องทำความสะอาดอย่างรวดเร็วโดยกวาดเศษขยะส่วนใหญ่ไว้ใต้โซฟา ผลเสียของสิ่งนี้คือในที่สุดคุณจะต้องใช้เวลาในการแยกแยะระเบียบ สำหรับการพัฒนาซอฟต์แวร์ เมื่อคุณข้ามขั้นตอนที่จำเป็นและทำตามเส้นทางที่ง่ายกว่า ด้วยโค้ดที่ 'ไม่ค่อยสะอาด' จะทำให้การล้างโค้ดทำได้ยากขึ้นในภายหลัง มีหลายขั้นตอนที่พบในโดมิโนของโปรเจ็กต์ซอฟต์แวร์ และยิ่งคุณละเลยปัญหาที่มีอยู่นานเท่าไร ก็ยิ่งต้องใช้เวลาในการแก้ไขมากขึ้นเท่านั้น
ประเภทของหนี้ทางเทคนิค
หนี้ทางเทคนิคมีหลายประเภท ได้แก่ :
หนี้ทางเทคนิคตามแผน
สิ่งนี้เกิดขึ้นในสถานการณ์ที่องค์กรจงใจตัดสินใจที่จะเป็นหนี้ทางเทคนิค ตามที่กล่าวไว้ก่อนหน้านี้ มักจะต้องเอาชนะกำหนดเวลาที่กำหนดไว้และไปถึงเป้าหมายที่เฉพาะเจาะจง เมื่อมีส่วนร่วมในหนี้สินทางเทคนิคที่วางแผนไว้ องค์กรต้องมีความชัดเจนในสิ่งที่พวกเขายินดีจะยอมแพ้และสิ่งที่พวกเขาไม่สามารถทำได้ คุณต้องเก็บบันทึกที่ถูกต้อง โดยคำนึงว่าในที่สุดคุณจะต้องส่งคืนและแก้ไขข้อผิดพลาดที่คุณข้ามไปในตอนเริ่มต้น
หนี้ทางเทคนิคโดยไม่ได้ตั้งใจ
หนี้ทางเทคนิคประเภทนี้ตรงข้ามกับหนี้แรกโดยตรง เกิดขึ้นเมื่อองค์กรไม่คาดการณ์หรือวางแผนหนี้ทางเทคนิค เหตุผลนี้มักจะเป็นความผิดพลาดในการสื่อสารระหว่างหน่วยงานต่างๆ ในองค์กร หรือการทำงานที่ผิดพลาดระหว่างหน่วยงานต่างๆ
หนี้ทางเทคนิคที่หลีกเลี่ยงไม่ได้
นี่เป็นหนี้ทางเทคนิคประเภทที่องค์กรไม่สามารถป้องกันได้ ตัวอย่างเช่น ด้วยการเปลี่ยนแปลงอย่างรวดเร็วในเทคโนโลยี มันสมเหตุสมผลแล้วที่รหัสบางรหัสที่เขียนในอดีตจะไม่เป็นไปตามมาตรฐานปัจจุบันที่คาดการณ์ไว้
นอกจากนี้ หนี้ทางเทคนิคประเภทนี้อาจเกิดขึ้นเมื่อมีการร้องขอการเปลี่ยนแปลงเมื่อมีการเขียนรหัสแล้ว หากอยู่ระหว่างการออกแบบซอฟต์แวร์ การเปลี่ยนแปลงบางอย่างก็ถูกนำมาใช้ อาจทำให้ไดนามิกยุ่งเหยิง ทำให้โค้ดเก่าล้าสมัยหรือไม่จำเป็น
สาเหตุของหนี้ทางเทคนิค
เหตุผลบางประการสำหรับหนี้ทางเทคนิคได้ถูกกล่าวถึงข้างต้นแล้ว แต่ฉันจะเลือกมันทีละข้อเพื่อให้ชัดเจนยิ่งขึ้น
รีบเร่ง
สาเหตุที่พบบ่อยที่สุดของหนี้ทางเทคนิคคือความเร่งรีบ นักพัฒนามักมีกำหนดเวลาที่เข้มงวด ซึ่งบางรายการรวมถึงกำหนดเวลาสำหรับการเปิดตัวซอฟต์แวร์บางตัว ในสถานการณ์เช่นนี้มักจะเข้าใจได้ (และคาดหวัง) ว่านักพัฒนาซอฟต์แวร์อาจก่อหนี้ด้านเทคนิคไปพร้อมกัน หนี้ทางเทคนิคประเภทนี้มักเกิดขึ้นโดยเจตนาและอาจส่งผลให้เกิดปัญหาซึ่งอาจมีตั้งแต่ข้อบกพร่องในโค้ดหรือรหัสปาเก็ตตี้ที่เกิดขึ้น
การกำกับดูแล/ความผิดพลาด
บางครั้ง โปรแกรมเมอร์ก็แค่เขียนโค้ดที่ไม่ถูกต้อง ซึ่งในที่สุดจะนำไปสู่หนี้สินทางเทคนิค ไม่ว่ารหัสที่ไม่ถูกต้องจะเกิดขึ้นจากความผิดพลาดของตัวเข้ารหัสหรือไม่ก็ตาม ความจริงก็คือความผิดพลาดส่งผลให้เกิดหนี้สินทางเทคนิค และเนื่องจากไม่สามารถปรับขนาดได้ พวกเขาจึงต้องแก้ไขในที่สุด
ขาดความตระหนักในผลกระทบ
บางครั้งหนี้ทางเทคนิคก็เกิดขึ้นเนื่องจากผู้เขียนโค้ดไม่รับรู้หรือรับทราบว่าหนี้ทางเทคนิคที่เป็นอันตรายมีอันตรายอย่างไรในระยะยาว ซึ่งอาจเกิดจากความไม่รู้ที่ถูกต้องตามกฎหมายเกี่ยวกับผลกระทบที่เป็นอันตรายของการใช้ทางลัดระหว่างการเขียนโปรแกรม หรืออาจเป็นการจงใจเพิกเฉยต่อผลที่ตามมา
เจตนา
หนี้ทางเทคนิคอาจเกิดขึ้นโดยเจตนาจากการกระทำโดยเจตนาของผู้เขียนโค้ดหรือองค์กร
ขาดโมดูลาร์
สิ่งนี้เกิดขึ้นส่วนใหญ่เนื่องจากรหัสหนึ่งสามารถให้บริการตรรกะทางธุรกิจที่แตกต่างกันในเวลาเดียวกัน สถานการณ์แบบนี้ทำให้การจัดการซอฟต์แวร์ยากขึ้นมาก ในแต่ละโค้ดที่นักพัฒนาเขียน ยิ่งมีโอกาสมากที่พวกเขาจะพบกับความท้าทายด้วยโมดูลาร์
การประเมินหนี้ทางเทคนิค
หนี้ทางเทคนิคไม่ควรคำนวณด้วยตนเองเพราะจะค่อนข้างลำบาก หมายความว่าต้องป้อนรหัสด้วยตนเองเพื่อระบุปัญหาในปัจจุบันและปัญหาที่อาจเกิดขึ้นในอนาคต นอกเหนือจากการเสียเวลาในกระบวนการแบบแมนนวลแล้ว ยังมีความเป็นไปได้ที่รหัสจะมีการเปลี่ยนแปลงรูปแบบเมื่อสิ้นสุดกระบวนการแบบแมนนวล
วิธีหนึ่งในการดำเนินการประเมินคือทำการวิเคราะห์แบบสถิตโดยใช้เครื่องมือบางอย่างที่สนับสนุน เครื่องมือบางอย่างที่สามารถใช้ได้ ได้แก่ Coverity, SonarQube, Check Style และ Closure Compiler
โดยทั่วไป มีสองวิธีในการคำนวณหนี้ทางเทคนิค ในแนวทางแรก สามารถทำได้โดยการคำนวณอัตราส่วนหนี้ทางเทคนิคตามอัตราส่วนรหัส ในที่นี้ ค่าประมาณเริ่มต้นหรือเวลาโดยรวมที่จำเป็นในการพัฒนาแอปจะใช้ในการกำหนดเวลาที่จำเป็นในการแก้ไขหนี้ทางเทคนิค
ในแนวทางที่สอง คุณสามารถใช้ค่าประมาณที่กำหนดโดยเครื่องมือต่างๆ เช่น SonarQube ได้โดยตรง ซึ่งจะรวมกับรายการหนี้ทางเทคนิคและรหัสอ้างอิง จากเครื่องมือ คุณสามารถประมาณระยะเวลาที่ถูกต้องในการแก้ไขได้อย่างแม่นยำ
การประเมินหนี้ทางเทคนิคจะทำให้คุณเข้าใจว่าต้องใช้เวลากี่วันในการแก้ไขหนี้ทางเทคนิค ยิ่งมีหนี้มาก ยิ่งต้องใช้เวลานานในการแก้ไข
การแก้ปัญหาหนี้ทางเทคนิค
เกิดอะไรขึ้นถ้าหนี้ทางเทคนิคเกิดขึ้นและคุณสูญเสียจะทำอย่างไร? มีขั้นตอนบางอย่างที่คุณสามารถทำได้เพื่อจัดการหนี้ทางเทคนิค
ประการแรก คุณควรรับทราบว่ามีหนี้ทางเทคนิคและสื่อสารกับทีมของคุณในลักษณะเดียวกัน ในการสื่อสาร คุณควรมีความชัดเจนเกี่ยวกับสิ่งที่เกิดขึ้นและสิ่งที่ต้องทำเพื่อแก้ไข คุณควรตรวจสอบให้แน่ใจว่าคุณได้สื่อสารอย่างชัดเจนถึงความจำเป็นในการดูแลหนี้ด้านเทคนิคโดยเร็วที่สุด
หลังจากแจ้งหนี้ทางเทคนิคให้ทีมของคุณทราบแล้ว มีสามวิธีที่คุณสามารถทำได้ ในแนวทางแรก คุณสามารถตัดสินใจใช้ระบบต่อไปตามที่เป็นอยู่ ในสถานการณ์สมมตินี้ แอปพลิเคชันจะถูกใช้ตามที่เป็นอยู่
หรือคุณอาจตัดสินใจปรับโครงสร้างแอปพลิเคชันใหม่ การปรับโครงสร้างใหม่มีจุดประสงค์เพื่อลดความซับซ้อนในแอปและล้างโครงสร้างของแอป ด้วยการปรับโครงสร้างใหม่ พฤติกรรมของซอฟต์แวร์จะไม่เปลี่ยนแปลง ส่วนที่ได้รับผลกระทบจะเป็นโครงสร้างภายในเท่านั้น
สุดท้าย หากทั้งสองตัวเลือกที่กล่าวถึงข้างต้นใช้ไม่ได้ผล คุณจะต้องเปลี่ยนรหัสทั้งหมด ปัญหาอย่างหนึ่งของสิ่งนี้คืออาจนำไปสู่หนี้สินทางเทคนิคใหม่ๆ แต่นั่นอาจเป็นการประนีประนอมที่ดีกว่าในระยะยาว
การหลีกเลี่ยงหนี้ทางเทคนิคในอนาคต
แน่นอนว่าการหลีกเลี่ยงหนี้ทางเทคนิคนั้นเป็นเรื่องที่ฉลาดกว่าการพยายามแก้ไขเมื่อเกิดขึ้นแน่นอน นอกจากจะช่วยประหยัดเวลาและความเครียดแล้ว ยังช่วยให้แน่ใจว่าผลที่ตามมาจากการมีหนี้ทางเทคนิคตั้งแต่ต้นนั้นจะหายไป
อาจเป็นที่ถกเถียงกันอยู่ว่าหนี้ทางเทคนิคในตัวเองนั้นไม่เลว โดยทั่วไปแล้วปัญหาเหล่านี้เป็นปัญหาเนื่องจากเป็นหนี้ที่ต้องชำระคืน และมนุษย์ไม่ใช่สายพันธุ์ที่มีความรับผิดชอบมากที่สุดในโลก การเลือกตัวเลือกที่อ่อนแอกว่าอย่างสม่ำเสมอจะทำให้จุดแข็งของซอฟต์แวร์ของคุณอ่อนแอลง และทำให้ปรับปรุงฟังก์ชันการทำงานในภายหลังได้ยากขึ้น โดยรวมแล้ว การหลีกเลี่ยงหนี้ทางเทคนิคเป็นทางออกที่ดีที่สุดสำหรับทุกคน
ดังนั้น คุณจะป้องกันหนี้ทางเทคนิคไม่ให้เกิดขึ้นได้อย่างไร:
แนวคิดในที่นี้คือการทำให้ทุกคนทันกระบวนการและทำให้พวกเขาทำงานได้อย่างรวดเร็วตามข้อกำหนดสำหรับงานใดก็ตามที่กำลังดำเนินการ การสร้างงานในมือทำให้ทุกคนเห็นงานที่เหลือที่ยังไม่ได้ทำ และเส้นทางในการทำให้สำเร็จ
หากคุณเป็นโปรแกรมเมอร์เอง คุณต้องเรียนรู้ที่จะจัดลำดับความสำคัญของงานที่มีคุณภาพมากกว่างานจำนวนมาก ตรวจสอบให้แน่ใจว่ารหัสของคุณสะอาด และแอพหรือซอฟต์แวร์อื่นๆ ของคุณได้รับการพัฒนาจนสมบูรณ์แบบ เข้าใจว่าการพยายามใช้ทางลัดนั้นไม่คุ้มค่า เพราะในท้ายที่สุด คุณจะต้องทำงานที่คุณละทิ้งไป
หากคุณเป็นหัวหน้าทีม คุณต้องสื่อสารค่านิยมเดียวกันนี้กับสมาชิกในทีม สมาชิกควรได้รับการสอนให้สร้างโซลูชันที่เน้นผลลัพธ์และหลีกเลี่ยงทางลัด
โดยทั่วไป ความรู้เชิงลึกเกี่ยวกับหนี้ทางเทคนิคคืออะไรและจะหลีกเลี่ยงได้อย่างไร จะมีประโยชน์ในการป้องกันไม่ให้เกิดหนี้เสียตั้งแต่แรก เมื่อคุณติดอาวุธให้กับนักพัฒนาของคุณด้วยความรู้ที่จำเป็น พวกเขาจะหลีกเลี่ยงกับดักหนี้ทางเทคนิคได้ดีกว่า
แนวทางปฏิบัติในการเข้ารหัสบางอย่างทำให้มีโอกาสมากกว่าที่คุณจะตกเป็นหนี้ทางเทคนิค ดังนั้น จะเป็นการดีที่จะหลีกเลี่ยงความสัมพันธ์ที่แน่นแฟ้น ใช้สิ่งที่เป็นนามธรรมและการปรับโครงสร้างใหม่
การอัปเดตเทคโนโลยีเป็นประจำอาจเป็นวิธีการที่ยอดเยี่ยมในการป้องกันไม่ให้เกิดหนี้สินทางเทคนิค ในการอัพเดท คุณต้องแน่ใจว่าสิ่งที่กำลังถูกใช้นั้นเป็นเฟรมเวิร์ก ฐานข้อมูล และแอพพลิเคชั่นซอฟต์แวร์ล่าสุด
บทสรุป
ในกรณีส่วนใหญ่ หนี้ทางเทคนิคไม่สามารถหลีกเลี่ยงได้ ตราบใดที่คุณยังคงพัฒนาโปรแกรมและเขียนโค้ดต่อไป อย่างไรก็ตาม โอกาสที่จะเกิดขึ้นจะลดลงอย่างมากเมื่อปฏิบัติตามขั้นตอนข้างต้น นอกจากนี้ ในท้ายที่สุดของหนี้ทางเทคนิค ความหวังทั้งหมดจะไม่สูญหาย ใจเย็น มั่นใจ ปฏิบัติตามนั้น