ปัญหาของผม/ปัญหาของลูกค้า #2

ช่วงนี้มีปัญหาของลูกค้าอันนึงที่ผมรู้สึกสนุกที่จะทำมัน เรื่องของเรื่องคือลูกค้าใช้ interface ใหม่ของ api ที่ผม support แล้วติดปัญหามากมาย

โชคดีของผมนิดหน่อยที่ตามคิวงานแล้วเพื่อนของผมเป็นคนดูแลเคส (ปัญหา) นั้น ผมก็เลยใช้เวลาระหว่างรอเพื่อนผมทำเคสนั้นอยู่ ลอง simulate ระบบของลูกค้าเล่นๆ ดูไปพร้อมกันเพราะผมเองก็ยังไม่เคยลอง interface นั้นเลย (มีแต่ dev/qa ที่จีนที่ได้ลอง)

ผมพบว่าผมรู้สึกสนุกกับการพยายาม replicate ปัญหา, การหาว่าทำไมมันใช้งานไม่ได้มากกว่าการ support เคสอื่นๆ เยอะเลย ส่วนหนึ่งคงเป็นเพราะมันเป็นปัญหาที่เกิดขึ้นกับสิ่งที่ผมดูแลมานานตั้งแต่ version 0.1 จนรู้สึกผูกพันกับมัน อีกอย่างคือผมรู้สึกว่ามันเป็นสิ่งที่ผมอยากรู้ด้วยตัวเองว่าทำไมมันทำงานไม่ได้โดยที่ไม่มีความกดดันในแง่การเป็นคนถือเคสเข้ามาเกี่ยว (คือไม่ได้โดน push จากลูกค้าตรงๆ)

เดาว่าไอ้ความผูกพันกับไอ้การที่อยากรู้อยากเห็นโดยไม่มีภาระมาเกี่ยว มันทำให้เกิดความรู้สึกว่าเป็น personal itch ที่อยากจะ scratch มากกว่าปัญหาอื่นๆ ของลูกค้าทั่วไป (ตามที่อ้าง quote ของ ESR ใน entry ก่อนหน้ามา)


ปัญหาของผม/ปัญหาของลูกค้า

ปัญหาของผม/ปัญหาของลูกค้า

ในฐานะ support งานหลักของผมคือการแก้ปัญหาให้ลูกค้า ไม่ว่าจะลูกค้าภายในหรือภายนอกองกรค์

หลังจากทำงานตำแหน่งนี้มาน่าจะ 9 ปี ผมรู้สึกว่าปัญหาของลูกค้ามันไม่ใช่ปัญหาของผม ผมไม่รู้สึกใยดีอะไรกับปัญหาของคนอื่นอีกต่อไป

ผมพบว่าหลังๆ ผมสนุกกับอย่างอื่นที่เกิดขึ้นระหว่างการแก้ปัญหาให้ลูกค้ามากกว่า เช่น การเขียนโปรแกรมมาวิเคราะห์และหาข้อมูลจาก log file ขนาด 1gb ของลูกค้า, การเขียน script มาทำให้ replicate ปัญหาได้ง่ายขึ้น, การลองเอา Angularjs หรือ framework อื่นๆ มาใช้กับ WebSocket API ที่ผมดูอยู่, ลองใช้ git มาทำ source control code ที่ replicate ปัญหาเป็นต้น

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

สรุปได้ว่าที่ ESR กล่าวใน The Cathedral and the Bazaar จะเป็นจริง

Every good work of software starts by scratching a developer’s personal itch.

ใครผิด (วะ)?

Java Script API ที่ผม support อยู่ปัจจุบันเป็น version 5 ออกมาตอนกลางปี ส่วน version 3 และ 4 ออกเมื่อปีที่แล้วครับ

ปีที่แล้วมีลูกค้าเจ้าหนึ่งใช้ version 2 ที่ออกตอนปี 2011 แล้วเจอปัญหาร้ายแรงปัญหาหนึ่ง ขณะนั้น version 3 ออกได้ไม่นานและ dev กำลังเขียน version 4 อยู่

ผมใช้เวลาเป็นเดือนในการทำ issue นี้ (replicate ยากมากๆ) ระดม dev มาช่วยแล้วก็ยังไม่ได้ สุดท้ายก็ส่งเรื่องไป Microsoft Support ถึงได้รู้ว่า setTimeout() บน IE มันทำงานผิด MS ยอมรับว่าเป็นบั๊กของ IE 7/8 และแก้ไปใน IE 9 แล้ว แน่นอนว่าลูกค้าแม่มไม่ยอมเปลี่ยนไป IE 9 แน่ๆ ตอนนั้นผมกะ dev จึงช่วยการหาทางป้องกันและยัดมันลงไปใน patch หนึ่งของ version 2 ซึ่งลูกค้าก็เอาไปใช้ได้ดีจนถึงทุกวันนี้

ต้นเดือนที่ผ่านมา ลูกค้าจะ upgrade ไปเป็น version 5 ซึ่งเป็นอันล่าสุด ผมได้รับงานมาว่าลูกค้าจะต้องทำอะไรบ้างเพื่อที่จะ migrate page เขาได้เพราะมันมีอะไรเปลี่ยนข้างในเยอะเหมือนกัน ผมทำ list จะเสร็จแล้วรู้สึกตะหงิดๆ อะไรบางอย่างเลยลองดู code ส่วนที่เจอปัญหาคราวโน๊นดูถึงเพิ่งเห็นว่า code patch นั้นไม่ถูกใส่มาใน version 5 ด้วย…

ไล่ย้อนไปพบว่า version 3, 4, 5 code ที่เจอปัญหายังเหมือนกับ version 2 เด่ะๆ สำหรับ version 3 ผมไม่แปลกใจอะไร แต่ที่งงคือทำไม version 4 และ 5 เสือกไม่ merge patch นี้ไปด้วย ถาม dev ก็ไม่รู้ คนเขียนออกไปแล้ว ไม่มีใครตอบได้

แน่นอนว่าด้วยบาปที่ผมแม่งเป็นคนเจอไอ้ code diff เหี้ยนี่ ผมเลยได้รับคำสั่งมาว่าให้ simulate ปัญหานี้ใน version 5 ให้ได้ภายในเวลา 1 อาทิตย์…

3 วันที่ผ่านมาผมยัง replicate ปัญหาแม่มไม่ได้เลย issue อื่นๆ ที่ลูกค้าส่งเข้ามาถูกผลักไปเป็นเรื่องรองๆ ไปทั้งหมดเพื่อดูเรื่องนี้โดยเฉพาะ ผมมานั่งนึกว่าทำไมกูต้องมานั่งทำเหี้ยอะไรเสียพลัง เสียเวลาไปเปล่าๆ ปลี้ๆ อันนี้ด้วยวะ

ที่กูต้องมานั่งทำไอ้เหี้ยนี่อยู่แม่งผิดที่ใครวะ