Hell Weeks at AdWise


TL;DR ตัว entry นี้เป็นเรื่องราวเกี่ยวกับสิ่งที่เกิดขึ้นใน 10 วันสุดท้ายของการพัฒนา AdWise โดยจะอัพเดทอย่างต่อเนื่องทุกๆ วันจนกว่าจะถึงวันส่งมอบ Project ครับ

[27 และ 28-02-2014]
ช่วงเวลาไม่กี่วันที่ผ่านมานี้ปริมาณ Code base มีอัตราการเพิ่มขึ้นมากกว่าที่ทำมาตลอดหลายเดือนอย่างเห็นได้ชัดเลยครับ
       มันยังไม่จบครับ 10 วันที่ผมคิดว่าจะเป็นวันสุดท้ายของการพัฒนาปรากฏว่ามันยังไม่จบ เหมือนหนังที่ตอนจบหักมุมยังไง ยังงั้น สิ่งที่เกิดขึ้นคือ ในขณะที่ PO ผู้น่ารักของพวกเรากำลังดู Demo ในส่วนต่างๆ ของ AdWise ที่เราทำมาตลอด 4 เดือนนั้น ยังไม่ทันครบทุก Features ที่มี PO ผู้น่ารักของพวกเราก็ได้ให้ Requirement มาเพิ่มทันที ความฝันที่จะไปอ่านหนังสือสอบ ทำเล่มโครงงานอย่างสบายใจลอยหายไปกับอากาศเลยครับ
       อย่างไรก็ตามก็นับว่า PO ผู้น่ารักของเรายังคงปราณีให้ Requirement มาเพิ่มในระดับที่ผมประเมินแล้วว่ายังสามารถทำเสร็จได้ภายใน 1 อาทิตย์ถ้าเรายังคงรักษาความเร็วได้เหมือน 10 วันที่ผ่านมาซึ่ง 3 ใน 4 ของ Requirement ใหม่นั้นเกี่ยวข้องกับการแสดงผลข้อมูลที่เรามีอยู่แล้ว (แต่เราไม่แสดงครับเพื่อให้คงความเป็น minimalist ไว้ให้มากที่สุด) และถึงแม้ว่า Requirement จะเป็นสิ่งที่ขัดใจมากอย่างการเปลี่ยนคำอธิบาย Textbox จาก Placeholder ไปไว้ตรง Label แต่เราก็ต้องทำครับ แต่ก็ยังยืนยันว่าขัดใจมาก (เพราะไม่ได้ทำแค่กลุ่มเดียวแต่เกือบทุกกลุ่มเลย)
       ตารางเวลาปีสี่เป็นเรื่องที่แปลกอย่างหนึ่งโดยเฉพาะช่วงนี้ โดยปกติแล้วตลอดสามปีที่ผ่านมาจะเป็นช่วงที่ต้องอ่านหนังสือสอบอย่างเมามันพร้อมกับทำ Assignment ให้ทันเวลาก่อนสอบ แต่ในช่วงนี้ของปีนี้วันเวลาในสัปดาห์แทบจะไม่มีความหมายทุกอย่างเป็นเพียงแค่ตัวเลข ตื่นเช้าจนถึงเข้านอนซึ่งก็แทบจะไม่ได้นอนกันมีแต่เพียงโปรเจ็ค ถึงแม้ผมจะเป็นคนที่ต่อต้านการทำงานหนักอย่างไร้เหตุผลมาโดยตลอดแต่สุดท้ายก็ต้องยอมจำนนกับปริมาณงานที่มากขึ้นเมื่อเวลาผ่านไป
ปริมาณ Commit ในสัปดาห์ที่ผ่านมากับภาพรวมของทั้ง Project ครับ
       ในช่วงตลอดหลายวันที่ผ่านมานี้มีอย่างนึงที่ผมสังเกตุเห็นได้ชัดคือ ปริมาณการ Commit ที่ต่อเนื่องและเพิ่มมากขึ้นในแต่ละวัน Burndown ที่เพิ่มความชันขึ้นในแต่ละวัน หลายๆ อย่างมากขึ้น รวมถึงเราก็คุยกันมากขึ้น แต่สิ่งที่ต้องแลกมาคือเราต้องทำงานติดต่อกันนานขึ้น ซึ่งแต่ละคนก็มีภาระหน้าที่อื่นนอกจากต้องทำงานนี้อยู่แล้วแม้กระทั่งตัวผมเองด้วย ทำให้จังหวะยังขึ้นๆ ลงๆ แต่ส่วนใหญ่ยังลงเร็วกว่าหลายๆ Sprint ที่ผ่านมา
       เวลานี้ผมคิดถึงช่วงเวลาตอนจบการสอบ Project I ตอนนั้นผมสัญญากับตัวเองไว้ว่าผมจะไ่ม่มีวันทำ Project หามรุ่งหามค่ำอีกเป็นอันขาด แต่พอถึงจุดนี้ผมก็ไม่อาจรักษาสัญญาไว้ได้ หลังจากนี้ผมก็ยังคงต้องทำงานหามรุ่งหามค่ำไปอีกหลายสัปดาห์จนกว่าจะสิ้นเดือนนี้ถึงจะเสร็จ แต่ตอนนี้ผมขอไปจัดการกับงานที่เพิ่มขึ้นมาในสุดสัปดาห์อันแสนจะสั้นที่จะถึงนี้ก่อน
ช่วงเวลาสุดท้ายในชีวิตมหาลัย มันไม่ได้สวยงามอย่างที่คิดไว้เลย

[26-02-2014]
นอกจากสัมภาษณ์งานแล้ว วันนี้ยังมี Byenior MD@KMITL อีกด้วย ขอบใจน้องๆ อีกทีครับที่จัดงานนี้ขึ้นมา
       วันนี้ก็ไม่เกี่ยวกับเรื่องโปรเจ็คอีกเช่นกันครับ หรืออาจจะเกี่ยวก็ไม่รู้ วันนี้ผมไปสัมภาษณ์งานบริษัทแห่งหนึ่งมาครับ แต่ครั้งนี้ไม่เหมือนครั้งที่แล้วตรงที่หลังสัมภาษณ์เสร็จ ผมได้มีโอกาสเดินดูงานทั่วบริษัทเลยครับ ซึ่งมันเป็นอะไรที่เหนือความคาดหมายมาก แต่ประเด็นคือ บริษัทแห่งนี้ใช้อไจล์ครับ แล้วผมได้ไปร่วม Standup meeting ถึง 3 ทีมที่แทบจะแตกต่างกันหมดเลยในวันเดียวเรียกได้ว่าประสบการณ์ Daily scrum มาตลอดหลายเดือนนี้สู้ไม่ได้กับวันนี้วันเดียวเลย นอกจากนั้นแล้วก็ยังได้จับพลัดจับพลูไปทำ Pair Programming กับพี่คนนึงในบริษัทนี้อีก ซึ่งทั้งหมดนี้นั้น ณ ตอนนี้ผมยังไม่รู้เลยครับว่าบริษัทเค้าคิดยังไงกับผม
       อย่างไรก็ตามมีคำถามหนึ่งตอนที่ผมถูกสัมภาษณ์ว่า ตั้งแต่ทำงานมาตลอดหลายปีนี้โปรเจ็คไหนสนุกที่สุด (ซึ่งผมไม่เคยคิดเลยว่าจะมีใครถามอะไรแบบนี้) ผมตอบไปอย่างไม่ลังเลเลยว่าโปรเจ็ค AdWise ที่ผมกำลังพิมพ์อยู่นี่แหละสนุกที่สุด เหตุผล นอกจากที่มันจะเป็นสิ่งที่ตัดสินชีวิตผมจริงๆ เพราะจะจบไม่จบก็ขึ้นกับมันแล้ว ยังเป็นครั้งแรกในชีวิตที่ผมได้ทดลองทำทีมที่ยาวนานขนาดนี้ ซึ่งก็เจอทั้งปัญหาต่างๆ นาๆ มาโดยตลอดแม้กระทั่งเมื่อวาน ซึ่งนั่นก็เป็นอีกคำถามที่ผมถูกถามและผมเพิ่งจะเข้าใจโดยไม่รู้ตัวว่า สิ่งที่ทำให้ทีมผมผ่านปัญหาต่างๆ มาได้คือ การที่เราคุยกัน ซึ่งเป็นสิ่งที่ทรงพลังที่สุดในการทำงานแล้วไม่ว่าจะเป็น Daily scrum, Retrospective หรือการคุยกันปกติ ปัญหาต่างๆ ล้วนมาแก้และจบลงตรงที่การที่เราคุยกัน ในทางกลับกันปัญหาหลายๆ อย่างในทีมนี้ก็เกิดขึ้นจาก การที่เรา ไ ม่ คุยกัน เพิ่งมาชัดเจนแจ่มแจ้งก็วันนี้แหละครับ

[25-02-2014]
Current status of Burndown Chart
       ณ เวลานี้ ผมและทีมเหลืออีกแค่ 3 วันก่อนจะถึง Deadline ช่วงเวลาเริ่มกดดันหลายๆ ทีมก็เริ่มจะกดดันเหมือนกัน ในฐานะ Team Lead ผมมีหน้าที่เพิ่มอีก 2 อย่างที่ผมทำมาตลอดช่วงเวลาที่ทำ Project มาคือ 1)ทำให้แน่ใจว่าทุกคนในทีมทำงานได้อย่างมีประสิทธิภาพ และ 2)ทำให้แน่ใจว่าทุกคนในทีมทำงานได้อย่างมีความสุข คือ ผมเชื่อว่า ถ้าเราสามารถทำงานได้อย่างมีความสุขแล้วประสิทธิภาพจะค่อยๆ ตามมาเอง ซึ่งผมก็เจอมาหลายสถานการณ์ที่ทดสอบหน้าที่นี้ ยกตัวอย่างเช่น เมื่อวานเป็นวันที่เพื่อนผมคนหนึ่งในทีม Commit งานติดต่อกันมากที่สุดครั้งหนึ่งมันดูเหมือนจะเป็นการทำงานที่มีประสิทธิภาพ จนกระทั่งผมค้นพบว่าเพื่อนผมคนนี้มายุ่งกับ Branch ผมโดยไม่ตั้งใจ ครับ ไม่ตั้งใจแต่ทำให้ผมทำงานไม่ได้ชั่วคราวนั่นทำให้ความสุขผมลดลงครึ่งนึง อะไรอย่างนี้เป็นต้นอาจดูเหมือนไม่เกี่ยวแต่ถ้างง ลองกลับไปอ่านอีกรอบ
       ในส่วนของตัวงานเมื่อเช้าวันนี้ถ้าคิดเป็น % ตอนนี้โปรเจ็คนี้ก็เข้าแตะระดับ 90% แล้วถ้าไม่นับ Bug ที่ต้องตามเก็บระหว่างทาง สิ่งที่ผมเรียนรู้ตลอดหลายวันที่ Implement ตัว Apriori algorithm มาคือ Use before Reuse ซึ่งจริงๆ แล้ว Term นี้เป็นชื่อ session ของคุณ Terry Yin ที่ผมไปฟังในงาน Agile Tour Bangkok ที่ผ่านมา ประเด็นก็คือตัว Apriori นี่จะทำงานซ้ำๆ ซึ่งสิ่งที่ผมพยายามหามาตลอดหลายวันก็คือหา Pattern ที่มันจะทำซ้ำ นั่นทำให้เกิดการ Reuse ฟังก์ชั่นบางตัว ซึ่งพอถึงจุดที่ Implement จนน่าจะเกือบเสร็จสมบูรณ์แล้ว ณ จุดนี้ Reuse เพียบเลยครับแต่ทั้งหมดนั้นล้วนผ่านการ Use มาแล้วทั้งนั้นใน Step ก่อนหน้า
       เรื่องสุดท้ายวันนี้เป็นวันปัจฉิมนิเทศของคณะวิศวกรรมศาสตร์ครับ ความตั้งใจแรกคือจะเข้าไปฟัง Speech แล้วก็กลับแต่เอาไปเอามาอยู่ยาวจนถึงงานเลี้ยงตอนเย็นเลย ซึ่งท่านคณบดีพี่เอ้ของพวกเราได้ฝากข้อคิดไว้ 3 อย่างคือ ความฝัน, ความขยัน และความอดทน จริงๆ แล้วท่านพูดคำคมหลายคำมากและผมก็จดไว้เยอะมากแต่ประโยคที่ผมชอบที่สุดในวันนี้เพราะมันตรงกับ Kaizen หรือ Continuous Improvement คือ
"คนที่ไม่หยุดนิ่งเท่านั้น ถึงจะเป็นคนที่ประสบความสำเร็จ"
[24-02-2014]
       วันนี้ไม่เกี่ยวกับเรื่องโปรเจ็คครับ แต่เป็นเรื่องที่เกิดขึ้นในวันนี้ วันนี้ผมไปสัมภาษณ์งานที่บริษัทแห่งหนึ่งมาครับ รายละเอียดผมคงไม่พูดถึงแต่จะพูดถึงสิ่งที่ผมได้เรียนรู้มาในวันนี้มากกว่า ผมได้ทัศนคติเกี่ยวกับ TDD กับ Pair Programming ในอีกมุมมองหนึ่ง มุมมองที่มีทั้งข้อดี ข้อเสีย ซึ่งบางมุมผมก็ไม่ได้มองเห็นมันมาก่อน นอกจากนั้นแล้วผมรู้ว่าเกรดผมไม่สูงครับนั่นเป็นเรื่องจริง แต่ประสบการณ์การทำงานมาตลอด 4 ปีในชีวิตมหาลัยนี่สุดท้ายแล้วมันทดแทนกันได้แต่อาจจะไม่ทั้งหมด ผมไม่ได้แนะนำให้ใครเดินทางนี้นะครับ ชีวิตเราเราเลือกของเราเอง เส้นทางนี้มันไม่ใช่เส้นทางที่ทุกคนจะเลือกเดินได้ แต่อย่างน้อยหลังจาก 4 ปีที่ผมเดินทางมาจนใกล้จะถึงปลายทางแล้ว ผมบอกได้เลยครับว่า มันไม่ใช่เส้นทางที่เรียบโรยด้วยยางมะตอย แต่มันก็ไม่ได้ลำบากขนาดที่ต้องใช้รถตีนตะขาบวิ่งผ่านมา แต่ผมบอกไว้เลยว่าเมื่อถึงปลายทางแล้วเราจะรู้เองว่า การทำงานหนักมาตลอดสี่ปีมันคุ้มค่าเสมอ

[23-02-2014]
บรรยากาศการทำ daily scrum ผ่าน https://appear.in/
       ความตั้งใจแรกของผมเกี่ยวกับ entry นี้ตอนแรกคือ จะเขียนทุกวันแต่พอดีเมื่อวานผมมีงานทั้งวัน ตั้งแต่คืนวันที่ 21 ผมนั่งแก้ปัญหาการสร้าง Candidate set ตั้งแต่ n > 2 จนถึงเช้า (ซึ่งถือว่าคุ้มเพราะแก้ได้) แต่เก้าโมงในเช้าวันที่ 22 ผมต้องไปสัมมนา 4G/LTE ที่คณะ ซึ่งก็เป็นไปตามคาดครับ หลับๆ ตื่นๆ ทั้งวันยัน 4 โมงเย็นเสร็จงานถึงได้ไปนอน (ซึ่งน่าเสียดายมากเพราะความรู้มาเต็ม และไม่ได้มีโอกาสอย่างนี้บ่อยๆ ) ผมได้หลับไป 2 ชม. เกือบเต็มก่อนจะต้องไปงานบายเนียร์โรงเรียนต่อซึ่งก็มีกิจกรรมตลอดจนถึงเกือบ 5 ทุ่มต้องขอบคุณน้องๆ ทุกคนร่วมถึงคำแนะนำจากรุ่นพี่ที่กลับมาเยี่ยมด้วยแล้วก็จริงๆ มีไปต่อกันด้วย แต่ตอนเวลานั้นผมแทบจะเป็นศพอยู่แล้วก็เลยไม่ได้ไปและได้พักเต็มอิ่มเลยเมื่อคืนนี้
ขอบคุณน้องๆ ทุกคนอีกทีนะครับ ที่จัดงานนี้ให้พวกพี่ ขอบคุณจริงๆ
       แต่ความสุขยังไม่เข้ามาเร็วขนาดนั้น เช้าวันนี้ผมต้องไปสอบปลายภาควิชาเลือก "ถ่ายรูป" ซึ่งเป็นวิชาเดียวที่สอบนอกตาราง และนอกตารางมาได้ถูกช่วงเวลามาก ทำให้ผมใช้เวลาช่วงเช้าทั้งหมดไปกับการอ่านเรื่องแฟลช อุปกรณ์ การจัดไฟ หลายๆ อย่าง พอบ่ายก็ไปสอบอยู่คณะครุศาสตร์อุตสาหกรรม พอเจอข้อสอบที่ทำได้หลายข้อบอกเลย มาจากประสบการณ์ในการถ่ายรูปตลอดสองปีที่ผ่านมาทั้งนั้น หลังจากสอบเสร็จก็หลับเป็นตายอีกรอบนึง พอกลับมาจากกินข้าวตอนเย็นกับเพื่อนที่มาจากต่างมหาลัย ก็ได้เวลาเริ่มทำงานจริงๆ ซักที แต่พอทำได้แป๊ปเดียวถึงเวลา Daily scrum ซึ่งเมื่อวานงดไปเพราะทีมที่เหลือก็ไปอ่านหนังสือสอบเกือบหมดและผมติดงานด้วยก็เลยไม่ได้เขียนบันทึกลงที่นี่ แต่วันนี้ประเด็นมันอยู่ตรงย่อหน้าถัดไปนี่แหละครับ
       สองสามวันที่ผ่านมาผมมีปัญหากับ Google Hangout มากทั้งกระตุกทั้งค้าง ทั้ง ฯลฯ จริงๆ แล้วการที่หันมาใช้ Google Hangout เพราะ Skype มีปัญหาก่อนจากการรองรับได้ไม่กี่คน แต่พอ Hangout มัน Share screen ได้เลยหันมาใช้ Hangout แทนแต่มันมี cost ตรงต้องลง plugin กับต้องมี google+ ซึ่งปกติไม่ค่อยได้เปิดกันอยู่แล้ว ผมก็เลยมองหา Service ตัวใหม่มาซักพักแล้วมาเจอ appear.in เข้าใน #Hackernews
       ตัว appear.in ข้อดีที่ผมเจอหลักๆ เลยคือ มันแทบไม่ต้องทำอะไรเลยครับคลิกสร้างห้องแล้วส่งลิงค์ให้ทีมก็ประชุมกันได้แล้ว จอใหญ่มองเห็นหน้าพร้อมกันหลายๆ คนอันนี้ถือเป็นข้อดีที่ผมเห็นเพิ่มและที่สังเกตุได้ชัดคือมุมกล้องมันกว้างกว่า Hangout ซึ่งอันนี้ผมก็ไม่รู้ว่าเกิดจากอะไร นอกจากนั้นแล้วยังมี Feature ในการ Chat กับ Screen sharing ซึ่งตัว Screen sharing นั้นอาจจะทำได้ไม่ละเอียดเท่า google+ แต่อย่างน้อยก็พอไปวัดไปวาได้ (แต่ 2 จอแชร์ก็ไม่ไหวครับเล็กเกิน) เรียกได้ว่า appear.in นี่เพียงพอสำหรับการทำ daily scrum แบบด่วนๆ แค่ส่งลิงค์มา เข้ามา join คุยๆ เสร็จเลิกแค่นั้นเองครับ ง่ายๆ เร็วๆ Agile จริงๆ

[21-02-2014]
โต๊ะผมเองครับ credit: iphone น้องบีม
       ปัญหาที่เจอในวันนี้ง่ายกว่าปัญหาที่เจอในวันพรุ่งนี้ นี่เป็นสิ่งหนึ่งที่แน่นอนเมื่อเราอยู่กับปัญหาซักข้อหนึ่งเป็นเวลานานๆ และนี่ไม่ใช่ครั้งแรกที่ผมรู้สึกอย่างนี้ครับ ตอนพัฒนา Feature ตัวหนึ่งเมื่อปลายปีที่แล้ว ผมต้องขลุกอยู่กับฟังก์ชั่นที่เกี่ยวกับ String Manipulation ของ PHP อยู่เกือบ 3 สัปดาห์ เรียกได้ว่าตอนสิ้นสุดสัปดาห์ที่ 3 นั้นจะให้ตัดแต่ง String ยังไง ทำได้หมด แต่มองย้อนไปตอนสัปดาห์แรกเจอฟังก์ชั่นอะไรมักจะอุทานเป็นเสียงเดียวกันว่า "นี่มันอะไรวะ" สิ่งที่เกิดขึ้นในช่วงนี้แทบไม่ต่างจากตอนนั้นเลยครับ จริงๆ แล้วมันอาจจะแค่เปลี่ยนจากฟังก์ชั่นที่เกี่ยวกับ String Manipulation เป็นฟังก์ชั่นที่เกี่ยวกับ Array แทน
       วันนี้ผมเขียนฟังก์ชั่นตัวหนึ่งเสร็จแล้วมานั่งดูฟังก์ชั่นเก่าๆ ที่เขียนขึ้นมา ปรากฏว่าฟังก์ชั่นตัวหนึ่งที่ผมเขียนเมื่อประมาณ 2 วันก่อนมันทำงานซ้ำกันครับ จริงอยู่ที่การทำงานของ Apriori algorithm เป็นการทำซ้ำๆ แต่เมื่อเอามาเทียบกันปรากฏว่าเราเขียนฟังก์ชั่นเพื่อแก้ปัญหาเดียวกันได้ดีขึ้น อาจจะไม่ดีขึ้นทั้งหมดแต่ว่าเป็นวิธีที่เรียบง่ายกว่าแล้วสะอาดกว่าเดิมโดยที่ผมแทบไม่รู้ตัวเลย จริงๆ แล้วสิ่งที่เกิดขึนนี่มันไม่ใช่ข้อดีนะครับ เพราะถ้ามันเป็นข้อดีผมคงไม่เขียนอะไรซ้ำของเดิมโดยไม่รู้ตัวหรอกครับ

       อีกเรื่องหนึ่งที่เป็นสิ่งที่แปลก แต่ก็ใช่ว่าไม่เคยเกิดคือ เวลาเราต้องเร่งทำอะไรซักอย่างมันมักจะมีปัญหานู่น นี่ นั่น เกิดขึ้น ปัญหาที่ไม่ควรจะเกิดเช่น โน๊ตบุ๊คพัง, เน็ตกาก, ไม่สบาย หรืออะไรก็ตามที่ทำให้ทำงานไม่ได้ เป็นเรื่องที่แปลกมากที่ปัญหาเหล่านี้มักจะไม่เกิดเวลากลางๆ ระหว่างทำ Project แต่มักจะเกิดในช่วงท้ายๆ ของการทำงาน แปลกดีครับ เหมือนมีใครกำลังเล่นตลกกับเราอยู่ (แต่ผมไม่ตลกด้วยนะ)
       เรื่องสุดท้ายวันนี้เป็นเรื่องของการปรับตัวครับ ผมทดลองใช้ HipChat กับทีมวันนี้เป็นวันที่ 2 แล้ววันแรกๆ อาจจะขลุกขลักอยู่บ้าง แต่ผมดีใจมากที่ทีมปรับตัวได้เร็วมาก ช่วยลดช่องว่างของการสื่อสารที่แต่เดิมมีแค่ "จุดเขียว" หรือไม่มี คุยกันได้บ่อยขึ้น เสียเวลาไปกับ Distraction ต่างๆ น้อยลงและการปรับมาทำ Daily scrum ผ่าน Video conference เสร็จเร็วจริงๆ ครับไม่ค่อยออกทะเลมากเหมือนตอนไปคุยต่อหน้า (จนน้องที่นั่งอยู่ในห้องเดียวกันอุทานว่า "นี่พี่ประชุมเสร็จแล้วเหรอ") แต่สิ่งที่แลกกันมาคือ ถ้าเน็ตกากซึ่งตอนนี้ก็เป็นบ่อยเหลือเกินในฝั่งทีมผมที่เหลือ ก็ต้องเสียเวลาในการคุยกันมากขึ้นไปอีก แต่อย่างน้อยเวลาที่เสียไปกับการทำความเข้าใจมันก็ยังน้อยกว่าเวลาที่ต้องเสียไปกับการเดินทางอยู่ดี

[20-02-2014]

       คุณเคยท้อมั้ยครับในชีวิต เคยต้องทำงานหนักจนเหนื่อย มองไปทางไหนก็เห็นแต่ปัญหาและวันเวลาที่มีในแต่ละวันบางครั้งมันก็เร็วเกินไปแต่บางครั้งโดยเฉพาะเวลาที่เราเหนื่อยนั้นผ่านไปนานเหลือเกิน ณ เวลานี้ผมและทีมเหลือเวลาอยู่อีก 8 วันก่อนจะถึงวันส่งมอบ ซึ่งถ้าดูจากปฏิทินที่ผมแปะไว้ข้างบนจะเห็นได้ว่าสัปดาห์หน้าทั้งสัปดาห์ ไม่มีวันไหนเลยครับที่จะไม่มีกิจกรรมอะไรซักอย่างที่ต้องทำซึ่งต้องดูดเวลาการทำงานไปอีกหลายชั่วโมงอย่างหลีกเลี่ยงไม่ได้
       วันนี้มีช่วงเวลาที่ผมได้ใช้เวลากับตัวเองเงียบๆ อยู่ประมาณ 30 นาทีท่ามกลางผู้คนที่เดินขวักไขว่ไปมาที่สถานีคนเดินพระจอมเกล้าลาดกระบังผมเดินผ่านคนมากมายทั้งที่รู้จักและไม่รู้จัก ผ่านพ่อค้าแม่ค้าที่ทั้งขายได้และขายไม่ได้ ระหว่างผมนั่งกินข้าวเงียบๆ ผมคิดถึงปัญหาที่ผมเจอและกำลังอยู่ๆ กับมันนั้นมันอาจจะดูเยอะ มันอาจจะหนักหนาแต่มันก็เพียงแค่ 10 วันเท่านั้น คนหลายคนเช่นนักดนตรีที่ดีดพินเดินไปมาอยู่ในตลาด พ่อค้าแม่ค้า หลายคนต้องต่อสู้อย่างนี้มาหลายปีและก็ไม่รู้ต้องเป็นอย่างนี้ไปอีกหลายปี เขาเหล่านี้ไม่ได้มีชีวิตที่กลับหอมานั่งเปิดคอมพิวเตอร์เพื่ออ่านเฟสบุ๊ค อัพสถานะ ฯลฯ เมื่อเทียบกันแล้ว ปัญหาของผมมันคงดูน้อยนิดนัก
       พูดถึงสิ่งเล็กๆ ผมลุย Implement ตัว Apriori algorithm มาตลอดคืนและติดปัญหาว่าทำไมมันเก็บค่า support ของ itemsets ไม่ครบซักที ตอนบ่ายวันนี้ผมเพิ่งค้นพบว่า ปัญหาเกิดจากการนับเลขอ้างอิงตำแหน่งผิดไปแค่ตัวเดียว ปัญหาเล็กๆ ที่ต้องใช้เวลาซึ่งถ้าผมใช้ผลงานคนอื่น มันอาจจะต้องใช้เวลานานกว่านี้เพื่อทำความเข้าใจมันก็เป็นได้
       สิ่งที่ผมเสียดายที่สุดในวันนี้และเป็นสิ่งที่ผมต้องแลกไปคือ ผมต้องโดด Last lecture หนึ่งในวิชาที่ผมเรียนในเทอมนี้ เพื่อเอาเวลามาแก้ปัญหาในย่อหน้าข้างบน คนเราทำทุกอย่างไม่ได้หรอกครับ สุดท้ายแล้วเราทุกคนก็ต้องเลือก และเมื่อเลือกแล้วเราก็ต้องยอมรับกับผลที่ตามมา นั่นคือเรื่องจริง
       สุดท้ายมีสิ่งหนึ่งที่ผมคิดถึงบ่อยมากช่วงนี้ มันคือความรู้สึกของการนั่งดูหนังซักเรื่องในบ่ายซักวัน พร้อมกับความรู้สึกไม่ต้องมีภาระ Project ไม่มี Deadline มันคงจะมีความสุขไม่ใช่น้อย ถ้าเทียบกับความรู้สึกในเวลาอย่างนี้ วิธีแก้ความอยากถึงแม้ตาจะไม่ว่าง แต่หูยังคงได้ยินอยู่ ผมฟัง Soundtrack ของ The Hunger Games: Catching Fire วนไปวนมาเกือบทั้งวัน และท่อนหนึ่งจาก We remain ข้างล่างนี้คอยหล่อเลี้ยงความรู้สึก คอยให้กำลังในการแก้ปัญหาผมมาตั้งแต่เมื่อคืนจนถึงเวลานี้
In a cold light, there will be no fair fight
there will be no good night
to turn and walk away

[19-02-2014]

       อย่างที่ผมเขียนไว้เมื่อวานวันนี้เป็นวันที่ทีมเราทำ Sprint Planning ครั้งสุดท้ายครับ 2 Sprint ล่าสุดที่เพิ่งผ่านพ้นมาจนถึง Sprint นี้การทำ Sprint Planning ง่ายขึ้นและเร็วขึ้นมากกว่า 2 ครั้งแรกมาก (ซึ่งตอนนั้นใช้เวลาไปเกือบ 3 ชม.) ในครั้งที่ถึงแม้จะใช้เวลาไปเกือบ 1 ชม. แต่ถ้านับเวลาจริงๆ ผมพบว่าแค่ 20 นาทีทีมก็มีทุกอย่างพร้อมที่จะทำงานต่อแล้ว อย่างไรก็ตามสิ่งที่ทำให้การประชุมครั้งนี้มันนานส่วนหนึ่งเป็นเพราะเราต้องเปลี่ยนแปลงข้อกำหนดบางอย่างร่วมกันดังนี้ครับ

  • จะไม่มีการทำ release ประจำสัปดาห์ใน Sprint นี้ ถ้าจะทำการ์ดใดๆ ให้ merge development branch เข้าไปก่อนเหมือนทุกครั้ง แต่เมื่อทำเสร็จแล้วให้ merge ลง development เลยไม่ต้องรอ code freeze 
  • ผมจะ remote เข้ามาแทนที่จะต้องเดินทางไปทำ daily scrum ในแต่ละวันเพื่อลดเวลาที่เสียไปในการเดินทางไปห้อง Project
  • ถึงแม้ Deadline จะอยู่ที่วันที่ 28 แต่ตั้งเป้าหมายของทีมให้เสร็จทุกอย่างภายใน 26 เพื่อให้วันที่ 27,28 ใช้สำหรับการทดสอบต่างๆ 
  • เนื่องจากผมไม่ได้เดินทางไปทำ Daily scrum ด้วยตัวเอง Burndown กับ Board ต้องถ่ายรูปอัพเดททุกวันหลัง daily scrum ทันที

       นอกจากนั้นแล้วผมจะทดลองใช้ HipChat เป็นช่องทางในการสื่อสารอีกทางหนึ่งนอกจาก facebook group, chat เหตุผลผมที่เลือก HipChat เพราะต้องการลด Distraction จาก Facebook ให้น้อยที่สุดในระหว่างการสื่อสารนอกจากนั้นแล้ว HipChat ยังตั้งค่าสถานะได้ (เหมือน MSN) แต่ในกรณีถ้าเกินความสามารถของ HipChat ทางเลือกต่อมาคือ Teamviewer ที่ทีมใช้อยู่แล้วมาตลอดหลายเดือน
       ในส่วนของงานที่ทำในวันนี้นั้น สิ่งที่ผมเรียนรู้อย่างนึงก็คือ เมื่อเราจนตรอกมากๆ จนคิดจะไปหา Code คนอื่นมาใช้ แต่พอเราอ่านของเขาไม่ออก วิธีการที่ดีที่สุดก็คือเขียนเองแม่งเลย มันอาจจะไม่สมบูรณ์แบบ มันอาจจะต้องใช้เวลาแต่ที่แน่ๆ อ่านออกแน่นอน ซึ่งในตอนนี้ถ้านับตามกระบวนการ Data Analytic นั้นตัว Feature ที่ผมพัฒนาอยู่นั้นยังอยู่ในขั้นเพียงแค่เตรียมข้อมูล (data preparation) เท่านั้น (แค่นี้ก็เสียเวลาไปเกือบ 2 วันเต็มๆ ละ) อย่างไรก็ตามระหว่างที่หาความรู้จะ Implement ตัว Apriori algorithm ที่ผมกำลังเขียนอยู่นี่ ผมไปเจอข้อความหนึ่งที่อ่านแล้วฟินมากคือ
"The basic idea of Apriori is not hard, but many people don't get all the details, and then it becomes much slower than necessary." via http://kmi.tl/aw5yj

[18-02-2014]
Burndown chart ของ Sprint 4 จะเห็นได้ว่าการเปลี่ยนแปลงช่วงเวลาใน Sprint ที่ทำให้ต้องทำงานในวันหยุดด้วย ส่งผลโดยตรงกับปริมาณงานที่ทำได้ใน Sprint นี้ ซึ่งสุดท้ายแล้วก็คือ เหลือขี้ค้างจนต้องยกไปทำใน Sprint ถัดไปนะครับ
       วันนี้นอกจากจะเป็นวัน Ending Sprint ที่ผมและทีมต้องทำการ demo ตัว feature ที่ทำใน Sprint นี้กันตามปกติแล้ว วันนี้ทีมผมยังได้รับแจ้งจากทาง PO ผู้น่ารักของเราว่า Project นี้ต้องส่งงานให้เสร็จหมดทุก Features ภายในวันที่ 28 หรืออีก 10 วันนับจากนี้ไม่งั้นจะเลื่อนกำหนดการส่งมอบไปอีกยาวเลย ถึงแม้ว่าผมจะเตรียมตัวเตรียมใจว่าซักวันต้องได้ยิน Deadline นี้แน่ๆ แต่ก็ไม่คิดว่ามันจะเร็วขนาดนี้ เพราะถึงแม้จะมีเป้าหมายว่าตัว Project จะเสร็จภายในสิ้นเดือนนี้อยู่แล้ว แต่ ณ เวลานี้ก็นับว่ามันยังห่างไกลจากเป้าหมายนั้นอยู่ระดับหนึ่งเลยทีเดียวเนื่องจาก Core Feature ของงานเพิ่งเสร็จไปแค่ 2/3 อีกทั้งยังมี Bug ที่เปิด Issue ไว้ต้องตามเก็บอีกจำนวนหนึ่ง นี่จึงเป็นเหตุผลว่าเมื่อ PO ถามทีมผมในวันนี้ว่างานทั้งหมดยังเหลืออยู่อีกเท่าไร ผมจึงตอบไปว่า 25%
       จากเหตุการณ์ข้างต้นเครียดครับผมบอกได้เลย แต่พอตั้งสติได้ผมกลับมาทบทวนกระบวนการทั้งหมดที่เราทำมาตลอดสิบกว่า Sprint ว่ามีปัญหาอยู่ตรงไหนบ้าง หนึ่งในหลายๆ สิ่งที่ผมค้นพบคือ ทีมเราเสีย Waste ไปกับการทำ Daily scrum มากจากการที่ผมต้องเสียเวลาเดินทางจากสำนักวิจัยฯ ไปห้อง Project เพื่อทำ Daily scrum ต่อหน้ากันแต่ถึงแม้จะเป็น waste ตัว Daily scrum ก็เป็นสิ่งที่ทีมเราพิสูจน์แล้วว่าก่อให้เกิดการกระตุ้นให้เกิดงานขึ้นได้อย่างต่อเนื่องมาโดยตลอดหลายสัปดาห์ที่ผ่านมา อีกข้อที่สำคัญและเป็นปัญหาของผมเองคือ ผมคุยกับทีมน้อยลงตลอด 2 Sprint ที่ผ่านมาเรียกได้ว่านอกจาก Daily scrum ก็แทบไม่ได้คุยเลย (เนื่องจากปลีกตัวไปเขียน Paper คนเดียวในขณะที่ทีมกำลังทำ Feature ต่อไป) นอกจากนี้ยังมีปัญหาอื่นๆ อีกที่เกิดขึ้นในช่วงหลายสัปดาห์ที่ผ่านมา ซึ่งในวันพรุ่งนี้ 21.00น. นอกจากจะเป็นการทำ Sprint Planning ครั้งสุดท้ายแล้ว ผมตั้งใจจะเปลี่ยนแปลง Process หลายๆ อย่างในทีมเพื่อลด Waste ให้น้อยที่สุดและเพิ่มความเร็วในการส่ง "ของ" ให้เร็วขึ้นอีกด้วย


Comments