"ฉันอยากจะบอกคุณเกี่ยวกับAgileและScrum "

"ในตอนต้นของศตวรรษที่ 21 ความคิดของผู้คนเกี่ยวกับการเขียนโปรแกรมกลับหัวกลับหาง"

"ทุกคนต่างเชื่อมั่นว่าการวางแผนระยะยาวไม่ได้ผล ดังนั้นพวกเขาจึงตัดสินใจละทิ้งมันโดยสิ้นเชิง"

"พวกเขาทำอย่างนั้นได้อย่างไร"

"นี่คือวิธี"

"พวกเขาคิดค้นแนวทางการจัดการโครงการที่ยืดหยุ่นที่สุดเท่าที่จะเป็นไปได้"

นี่คือแนวคิดหลักที่อยู่เบื้องหลังการพัฒนาแบบอไจล์ :"

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

นี่คือหลักการของการพัฒนาอย่างรวดเร็ว:

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

"ปัญหาหลักของการพัฒนาซอฟต์แวร์คือไม่มีผู้เข้าอบรมคนใดมีข้อมูลครบถ้วนเกี่ยวกับสิ่งที่ต้องทำ"

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

"โดยทั่วไปแล้วผู้จัดการต้องแปลข้อกำหนดจากศัพท์แสงการเขียนโปรแกรมเป็นภาษาของลูกค้าแล้วย้อนกลับมาใหม่"

"มีความไม่แน่นอนมากเกินไป"

"บ่อยครั้งที่ความต้องการของลูกค้าเป็นแบบนี้ ทำในลักษณะบางอย่าง แล้วแสดงให้ฉันเห็น ถ้าฉันไม่ชอบ คุณก็ทำซ้ำได้"

“เอ่อ... แย่จัง”

"ตามกระบวนทัศน์ใหม่ โปรแกรมเมอร์ไม่ได้พัฒนาผลิตภัณฑ์หรือโปรแกรมอีกต่อไป แต่กำลังดำเนินการตามฟังก์ชันที่ลูกค้าต้องการ"

"อะไรคือความแตกต่าง?"

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

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

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

"สมมติว่าลูกค้าต้องการโรงล่าสัตว์ขนาดใหญ่"

"นักพัฒนาสร้างบ้านหลังเล็ก ๆ ให้เขา เขาอาศัยอยู่ในนั้นช่วงฤดูหนาว จากนั้นเขาตัดสินใจว่าเขาไม่ชอบบ้านไม้ มาทำบ้านที่ทำจากอิฐกันเถอะ"

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

"การเปรียบเทียบที่น่าสนใจ ลูกค้าเปลี่ยนความต้องการบ่อยขนาดนั้นจริงหรือ"

“ใช่ แต่ปัญหาไม่ได้อยู่ที่ลูกค้า”

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

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

"อันที่จริง มันเคยทำงานในลักษณะนี้: นักวิเคราะห์ธุรกิจจะทำรายการข้อกำหนดทั้งหมด พวกเขาจะรวมรายการนี้ไว้ในสัญญา ลงนาม และทำงานตามรายการเท่านั้น"

"หากรายการขาดสิ่งที่ลูกค้าต้องการจริงๆแต่ลืมไป ก็จะไม่มีใครทำอะไรกับมัน"

"ฉันเข้าใจแล้ว มันง่ายกว่าที่จะทำตามแผน แต่ไม่ใช่ทุกอย่างจะทำตามแผนได้!"

"อย่างแน่นอน."

"นั่นเป็นเหตุผลที่คิดค้นวิธีการพัฒนาแบบ Agile"

"และวันนี้ฉันจะบอกคุณเกี่ยวกับScrumซึ่งเป็นที่นิยมที่สุดในหมู่พวกเขา

"คุณลักษณะหลักของ Scrum คือการแบ่งการพัฒนาโครงการออกเป็นการวนซ้ำเล็กๆ ซึ่งโดยปกติจะใช้เวลา 2-4 สัปดาห์ การวนซ้ำแต่ละครั้งเรียกว่า sprint"

"ในช่วงเริ่มต้นของการวิ่ง จะมีการประชุมวางแผนการวิ่ง ใช้เวลาประมาณ 3-4 ชั่วโมง"

"ในตอนท้ายมีการสาธิตงานที่เสร็จสมบูรณ์ทั้งหมด"

"นี่คือวิธีการทำงานของทุกอย่าง:"

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

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

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

"เมื่อ Sprint เริ่มต้นขึ้น ทุกคนจะรวมตัวกันเพื่อประชุมหัวหน้าการต่อสู้ซึ่งมักจะเป็นสมาชิกของทีม มักจะเป็นผู้นำการประชุม เป้าหมายของการประชุมคือการเลือกงาน ( เรื่องราวของผู้ใช้ ) สำหรับ Sprint ปัจจุบัน (การวนซ้ำของการพัฒนา) "

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

"อีกครั้งคือทีมเองที่ตัดสินใจว่าจะมีเวลาทำงานกี่งานให้เสร็จระหว่างการวิ่ง"

"สมมติว่าเจ้าของผลิตภัณฑ์ต้องการให้ทีมเลือก 7 งานแรก แต่เลือกเพียง 5 งาน จากนั้นงานที่ 6 และ 7 จะถูกเลื่อนไปยัง Sprint ถัดไป หากไม่เหมาะกับเจ้าของผลิตภัณฑ์ เขาสามารถเพิ่มลำดับความสำคัญของงานได้ 6 และ 7 เพื่อให้แน่ใจว่าได้รับเลือก แต่งานอื่นๆ บางงานจะออกจากการวิ่ง"

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

"นั่นคือประเด็นของการประชุม: งานสามารถเปลี่ยนแปลงและแยกส่วนได้ ลำดับความสำคัญสามารถเปลี่ยนแปลงได้ ฯลฯ นี่คืองานที่มองไม่เห็นในตอนเริ่มต้น แต่นำมาซึ่งคุณค่ามากมาย"

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

"ใช่ อะไรประมาณนั้น"

"รายการงานที่เลือกสำหรับสปรินต์เรียกว่าsprint backlog "

"โปรแกรมเมอร์ตัดสินใจว่าใครจะทำอะไร จากนั้นพวกเขาก็เริ่มทำงาน" เพื่อปรับปรุงประสิทธิภาพ Scrum แนะนำให้จัดการประชุม 5-15 นาทีทุกวัน ซึ่งทุกคนสามารถบอกกันและกันว่าเมื่อวานทำอะไรไปบ้างและกำลังทำอะไรอยู่ จะทำวันนี้"

"การทำงานเป็นทีม ผมนับถือเลย!"

"เพื่อให้เห็นภาพได้ง่ายขึ้น โดยปกติแล้วแนะนำให้แสดงสถานะการวิ่งปัจจุบันบนกระดานพิเศษ:"

ว่องไว, การต่อสู้, น้ำตก - 2

"สังเกตสามคอลัมน์ทางด้านซ้าย"

"ชื่องานแบบย่อจะเขียนบนกระดาษโน้ต และกระดาษโน้ตจะอยู่ในคอลัมน์ต่างๆ ขึ้นอยู่กับสถานะของงาน (วางแผน กำลังดำเนินการ เสร็จแล้ว)"

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

"เมื่อการวิ่งจบลงScrum-masterจะให้ตัวอย่างเพื่อแสดงรายการทุกอย่างที่ทำเสร็จแล้ว"

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

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

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

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

https://en.wikipedia.org/wiki/Scrum_(software_development)