ขอต้อนรับสู่โลกใหม่ใบเดิมๆ

ก่อนผมเริ่มงานที่นี่ ผมอยู่กระแสโลกพอสมควร คือทำ Java EE, ต่อ db ทำเวบ ใช้ db, framework, java version ทั่วไปที่โลกเขาใช้

ผมเริ่มทำงานที่นี่เมื่อประมาณ 7 หรือ 8 ปีก่อน (น่าจะ 8) กับ Java สายที่ทุกคนอยากลืมคือ Applet สภาพแวดล้อมถือว่าอยู่ในโลก Proprietary เต็มตัว Java ที่ใช้ 2 ปีแรกอยู่บนพื้นฐานของ Java 1.1 และไม่เคยไปไกลกว่านั้น (มีบางอย่างที่ใช้ Java 1.5 แต่ก็แค่ 5% – 10%) มันเป็นช่วงเวลาที่ทำให้ผมลืมกระแสโลก ลืมไปว่าโลกของนอกเขาใช้อะไร เทคโนโลยีต่างๆ ไปถึงไหนแล้ว แม้กระทั่ง Java แบบที่โลกเขาเขียนกันเป็นอย่างไรผมก็ไม่รู้เลย

3 ปีก่อนเจ้า Applet ตัวนั้นตายไป พร้อมๆ กับที่ผมย้ายมาทำงานกับทายาทของมันซึ่งเป็น JavaScript Ajax, XHR (และ WebSocket ในปีที่แล้ว), CSS, CORS อะไรพวกนี้ ผมตื่นเต้นและมีความสุขกับมันมากเพราะมันทำให้ผมได้กลับมาทำงานกับอะไรที่อยู่ในกระแสโลกอีกครั้ง (แม้จะช้ากว่าชาวบ้านเกินกว่า 3 ปี และ 50% ของมันยังอยู่ในโลก Proprietary ใบเดิม)

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

ขอต้อนรับสู่โลกใหม่ใบเดิมๆ …

ใครผิด (วะ)?

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 อื่นๆ ที่ลูกค้าส่งเข้ามาถูกผลักไปเป็นเรื่องรองๆ ไปทั้งหมดเพื่อดูเรื่องนี้โดยเฉพาะ ผมมานั่งนึกว่าทำไมกูต้องมานั่งทำเหี้ยอะไรเสียพลัง เสียเวลาไปเปล่าๆ ปลี้ๆ อันนี้ด้วยวะ

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

ปัญหาในมุมของ Support กับมุมของลูกค้า #บทเรียนที่ 2

ต่อจากentry เมื่อวาน วันนี้ผมกลับมานั่ง review สิ่งที่ผมทำ นั่งคุยกับ backend/data team แล้วรู้สึกตะหงิดๆ เลยลอง replicate ปัญหาใหม่แล้วมานั่งไล่ log ที่มองข้ามไปดูอีกที

เมื่อผมลองไล่ log การคุยกันระหว่าง server ของผมกับ backend ดีๆ แล้ว ผมพบว่าปัญหาเรื่อง backend มันส่ง data มาช้าหรือไม่ส่งมานั้นจริงๆ มันมีจำนวนน้อยมาก ไอ้ที่เยอะจริงๆ คือ server ของผมเองต่างหากที่ขอ request ขึ้นไปผิดเองก็เลยไม่มี data ส่งลงไปให้ลูกค้า …. (ปัญหานี้แก้ไขแล้วใน version ล่าสุด – ลูกค้าใช้ version เก่ากว่า 1 ver)

เรื่องนี้ก็ให้บทเรียนผมอีกครั้งนึงว่าให้ดูของตัวเองให้ดีๆ ก่อนที่จะไปโทษคนอื่น ผมนี่ยอมรับเลยว่าพอเจอเรื่อง backend ส่ง data ช้า/ไม่ส่งไปทีสองทีผมก็ปักใจเชื่อเลยว่ามันต้องเป็นปัญหา backend 100% แน่นอน ลืมที่จะดูตัวเองก่อนเลย

ป.ล. 1 ผมเคยได้บทเรียนนี้มาแล้วเมื่อสัก 4 ปีก่อน แล้วก็พลาดเองที่ลืมไปแล้ว
ป.ล. 2 แนะนำให้อ่าน The First Rule of Programming: It’s Always Your Fault ครับ เพื่อความกระจ่างในเรื่องนี้มากขึ้น