ในช่วงเลือกตั้งสมาชิกสภาผู้แทนราษฎร พ.ศ. 2566 มีเว็บไซต์หลายแห่งทำหน้าที่รายงานผลการนับคะแนนเลือกตั้ง และได้รับความสนใจจากประชาชนจำนวนมาก
เว็บไซต์แห่งหนึ่งที่ได้รับเสียงชื่นชมอย่างมากคือ เว็บไซต์รายงานผลการเลือกตั้ง 66 ของ Thai PBS (election66.thaipbs.or.th) ทั้งเรื่องการออกแบบที่ใช้งานง่าย และสามารถรองรับปริมาณโหลดจำนวนมหาศาลในช่วงวันเลือกตั้ง เพื่อเป็นการเผยแพร่ความรู้ทางเทคนิคเบื้องหลังเว็บไซต์แห่งนี้ Blognone จึงขอสัมภาษณ์ทีมจากบริษัท INOX ผู้อยู่เบื้องหลังการพัฒนาเว็บไซต์นี้ร่วมกับ Thai PBS
ทีมจะดูมีหลายคนมากๆ แวะเวียนมาร่วมมือในส่วนที่ตัวเองเป็น specialist ครับ
เมื่อปี 2565 เราเคยร่วมงานกับ Thai PBS ทำเว็บไซต์รายงานผลเลือกตั้งผู้ว่ากรุงเทพ 65 ซึ่งได้ผลตอบรับค่อนข้างดี พอมาถึงการเลือกตั้งใหญ่ปี 66 เราเลยได้รับความไว้วางใจให้มาร่วมงานกันอีกครั้งครับ
ในช่วงแรก ทีมงานตีโจทย์การออกแบบเว็บรายงานผลการเลือกตั้งอย่างไร
เราพยายามจะถอดความสำเร็จจากงานเลือกตั้งผู้ว่าฯ แต่ก็พบว่าบริบททางการเมืองต่างกันมาก เอาแนวทางเดิมมาใช้ตรงๆ ไม่ได้ ดังนั้นทางเราและ Thai PBS จึงเริ่มจากทำเซอร์เวย์กันในวงเล็กๆ (ระบุกลุ่มเป้าหมาย) เพื่อสรุปเอาคำถามสำคัญที่กลุ่มเป้าหมายของเราอยากรู้
ผลการสำรวจความเห็นได้ข้อสรุปมา 3 ข้อ สิ่งที่คนอยากรู้คือ 1) เขตที่บ้านเรา ใครได้เป็น ส.ส. 2) พรรคไหนได้ ส.ส. จำนวนเท่าไร 3) แล้วใครจะได้เป็นนายกรัฐมนตรี
จากนั้นเราเอาประเด็นหลักนี้มาพัฒนาต่อให้สุดทาง ประเด็นแรกเรื่อง “เขตที่บ้านเรา ใครได้เป็น ส.ส.” นั้นเราดูจากการเลือกตั้งที่ผ่านมา ว่าผู้ใช้น่าจะต้องเข้ามาดูผลหลายๆ ครั้ง เพื่อดูคะแนนล่าสุด ดังนั้นถ้าออกแบบให้ผู้ใช้สามารถปักหมุดเขตที่บ้านไว้ได้เลย จะได้ไม่ต้องไปไล่กดแผนที่ซ้ำๆ ทำให้การใช้งานง่ายขึ้น
แต่ในประเด็นว่า “ใครจะได้เป็นนายก” เป็นส่วนที่ท้าทายที่สุด เพราะจากการเลือกตั้งฯ 62 แสดงให้เห็นว่าไม่ใช่ว่าพรรคที่ 1 จะได้เป็นรัฐบาลเสมอไป ดังนั้นการออกแบบที่ดึงภาพพรรคอันดับ 1 หรือพรรคอันดับ 1-3 ขึ้นมาเด่นที่สุด อาจจะไม่ใช่แนวทางที่เหมาะกับบริบททางการเมืองปัจจุบัน เราเลยเลือกนำเสนอในรูปของ “สูตรจับขั้วรัฐบาล” พร้อมบวกเลขที่นั่งของแต่ละสูตรมาให้เสร็จเลย เพื่อให้ผู้ชมเข้าใจว่า พรรคที่ 1 ไม่ได้แปลว่าจะได้เป็นรัฐบาล แต่ขึ้นอยู่กับสูตรการจับมือแบบไหน เป็นไปได้แค่ไหน
ประเด็นนี้อาจสุ่มเสี่ยงกับความเป็นกลางด้วย เราเลยต้องทำงานในส่วนนี้กับทาง Thai PBS (ซึ่งเป็นสื่อสาธารณะและต้องวางตัวเป็นกลาง) อย่างใกล้ชิด เพื่อให้การนำเสนอออกมาเป็นกลางที่สุด โดยเราเลือกนำเสนอสูตรตั้งต้น 5 สูตรตามการสรุปจากทีมข่าวการเมือง เป็นค่าตั้งต้นให้เห็นภาพความเป็นไปได้ แต่ก็ยังเปิดโอกาสให้ผู้ชมสามารถจัดสูตรรัฐบาลเองได้และแชร์ได้ด้วยตามคะแนนแบบเรียลไทม์ในตอนนั้น
เนื่องจากทาง Thai PBS มีกลุ่มผู้ชมหลากหลาย โดยเฉพาะฐานผู้ชมกลุ่มผู้สูงวัย มีเยอะพอสมควร ในกระบวนการคิดจึงต้องเลือก persona ของผู้ชมให้หลากหลาย เพื่อออกแบบและทดสอบให้ครอบคลุม ไม่ว่าจะเป็นกลุ่ม New Voter, Active Voter, กลุ่มผู้ใหญ่วัยเกษียณ เป็นต้น เพื่อให้เราสามารถเอาสิ่งที่พัฒนาไปทดสอบกับ user จริงๆ จนมั่นใจว่า UX/UI ที่ออกแบบมานั้น ไม่ซับซ้อนเกินไปสำหรับกลุ่มเป้าหมาย (ต้องขอบคุณคุณพ่อคุณแม่ทีมงานทุกคนที่ได้มาร่วมทดสอบกันด้วยครับ)
จะเห็นว่ามีหลายๆ จุดที่พยายามทำให้ดูง่าย ลดความซับซ้อน เช่น หลีกเลี่ยงการใช้ฟอนต์เล็ก หรือตัดความสามารถในการซูมแผนที่ออกไปเลยเพื่อกันงง แล้วดันให้ไปใช้ฟิลเตอร์แยกเฉพาะภูมิภาคช่วยให้เห็นแผนที่ขนาดใหญ่ขึ้นได้ หรือให้พิมพ์ชื่อจังหวัดเพื่อค้นหาแทน
ในงานนี้เราเลือกใช้ NextJS เพื่อให้ได้ใช้ React และสามารถ custom HTML response เพื่อให้มีภาพสำหรับแชร์และ Title แตกต่างกันในแต่ละหน้าเมื่อมีการแชร์ได้
ในงานนี้เรา build โปรเจกต์เป็น Docker image เพื่อเอาไปใช้บน Kubernetes เองเลยครับ
จริงๆ ตัว NextJS เองไม่ได้รับโหลดได้สูงมากนัก แต่เนื่องจากมี caching ทำให้เหลือโหลดเข้ามาถึงระบบจริงๆ ไม่เยอะ ถึงจะเตรียม autoscale ไว้แต่ก็ใช้จริงประมาณ 4-5 pod เท่านั้น ที่เหลือก็สามารถรับโหลดได้ตามขีดความสามารถของ CDN เลย
ส่วนการรับมือ spike load ควรตรวจสอบให้แน่ใจว่างานส่วนใดควรทำที่ฝั่งไคลเอนต์หรือเซิร์ฟเวอร์, วางแผนทำ caching ถูกต้องเหมาะสม และทางทีม DevOps ยังช่วยทดสอบยิงแอป เพื่อใช้ประเมินสถานการณ์ไปด้วยอีกทางหนึ่ง อีกส่วนที่สำคัญคือระบบอื่นๆ ข้างเคียง เช่น เว็บไซต์หลัก (ซึ่งอาจเป็นทางเข้าของผู้ใช้บางกลุ่ม) ก็ต้องเตรียมพร้อมรับมือไปด้วยกัน
ทีมมองว่าเกิดจาก 2 ปัจจัยหลัก
งานนี้ใช้เวลาในการออกแบบระบบและพัฒนาประมาณ 1 เดือนครึ่ง ฟีเจอร์ทั่วไปใช้งานได้สมบูรณ์ในช่วง 1 สัปดาห์ก่อนเลือกตั้ง แต่ยังมีการปรับจูน ปรับแต่ง แก้ไขจนถึงวันเลือกตั้งจริง และแม้แต่ตอนเริ่มประกาศผลไปแล้ว ก็ยังมีการแก้ไขปรับปรุง โดยทาง Thai PBS กับเราประสานกันเพื่อแก้ไข ตาม feedback ของผู้ชม
ช่วงประมาณ 2 ทุ่มกว่า มีอยู่จังหวะหนึ่งที่ข้อมูลคะแนนจากต้นทาง ส่งมาเป็น 0 เกือบทุกเขต และเนื่องจากเราดึงข้อมูลและสรุปเร็วมาก ทำให้ผู้ชมเห็นคะแนนลดวูบไป (ดูเหตุการณ์จริงจาก รมต. DE ได้) แต่เนื่องจากเราแยกเก็บ data source คะแนนจากสื่อไว้อีกชุดหนึ่ง จึงสามารถสลับโหมดมาใช้คะแนนจากสื่อชั่วคราวได้ (แต่ก็ทดไว้ในใจว่าคราวหน้า คงต้องทำ Snapshot ไว้ย้อนเวลาได้ด้วยเพื่อป้องกันกรณีนี้)
ขอขอบคุณทางทีมสำนักสื่อดิจิทัล ทีมข่าว และรวมไปถึงทุกๆฝ่ายของทาง Thai PBS ที่ได้ให้โอกาสทางทีมงานบริษัท INOX ในการทำโครงการดีๆเช่นนี้ รวมไปถึงการสนับสนุนทางด้าน ข้อมูล และแนวคิดต่างๆอันมีคุณค่ายิ่งแก่ทีมงานของเราครับ
ผลการเลือกตั้ง เป็นแค่จุดเริ่มต้นครับ อย่างที่เราพยายามเสนอใน UI ยังต้องติดตาม รวมถึงส่งเสียงสะท้อนจากภาคประชาชนกันต่อไป
Comments
ผมเคยเปิดดู 2-3 ครั้งออกแบบได้ดี
แต่ไม่ชอบ Feature สูตรจับขั้ว เลือกมาอันดับ 1 แต่ไม่ได้เป็นรัฐบาลมันเป็นสิ่งผิดปกติ
การนำเสนอของแบบนี้เหมือนกับการสนับสนุนความผิดปกติ
และการนำเสนอสิ่งที่ยังไม่เกิด มัน misleading
การทำให้คนคิดไปเอง มันมีแต่จะเกิดความขัดแย้ง
เอาเรื่องที่มันเกิดขึ้นแล้วมาวิเคราะห์ ว่าทำไมมันถึงเกิดมีสาระกว่า
ขอบคุณสำหรับคำแนะนำ (เผื่อว่าทีมมีโอกาสในครั้งต่อๆ ไปครับ)
คือทีมตั้งใจจะนำเสนอแบบนี้เพื่อให้คนดู acknowledge ว่ามันไม่ปกติครับ แต่ในมุมนึงก็อาจทำให้เข้าใจว่าสนับสนุนได้เหมือนกัน ซึ่งต้องหา balance กันครับ
ในกติกาสากลของ ระบบรัฐสภา
อันดับ 1 ไม่ได้หมายความว่าจะต้องได้เป็นรัฐบาลนะครับ
อันนั้นเป็นวาทกรรมนักการเมืองสร้างขึ้นมา
อย่างเช่น สภามี 100คน
อันดับ 1 ได้ 40
อันดับ 2 ได้ 35
อันดับ 3 ได้ 25
ถ้าอุดมการณ์ 1 ไม่ตรงกับ 2 และ 3
2 และ 3 จะรวมกันตั้งรัฐบาล ครับ
ผมไม่ได้ฟังใครมาครับ ใช้แค่สามัญสำนึกคิดเอาเองน่ะครับ
ผมอยู่ฝั่งว่าสามัญสำนึกไม่มีจริงครับ 😅
กับจริงๆ นั่นหมายความว่ามีคนที่ไม่ต้องการอันดับ 1 ถึง 60% ได้ด้วย และนั่นเป็นปัญหาของระบบการนับคะแนนรอบเดียว พวกนี้มันแก้ได้ด้วยระบบโหวตหลายตัวเลือก โหวตหลายลำดับ โหวตหลายรอบอะไรแบบนี้แต่มันไปสร้างปัญหาการป้องกันการโกงและยากต่อการทำความเข้าใจที่จะไปเพิ่มบัตรเสียหรือความผิดพลาดให้คนลงคะแนนแทนอีก กับพวกนั้นใช้กับการหาอันดับ 1 อย่างเดียว (อย่างแบบแบ่งเขต หรือโหวตนายกโดยตรง) ใช้กับการโหวตแบบบัญชีรายชื่อไม่ได้ด้วยสิ
"นั่นหมายความว่ามีคนที่ไม่ต้องการอันดับ 1 ถึง 60% ได้ด้วย"
การ vote นี้คือการ vote เพื่อหาคนที่เราต้องการ
ไม่ใช่การ vote เพื่อหาคนที่เราไม่ต้องการครับ มันคนละบริบท
ถ้าจะเอามาคิดด้วยคงต้องออกแบบเลือกตั้งกันใหม่ล่ะครับ ให้กาคนที่เราไม่ต้องการลงไปด้วย
สิ่งที่เกิดขึ้นจริงคือการมีพรรคที่ถูกเหลือมาเป็นอันดับ 1
ฉะนั้นอันดับอื่นๆ ควรที่จะสนับสนุนอันดับ 1 ให้เป็นรัฐบาล ต่อให้คนที่ได้อันดับ 1 จะเป็นลุง ป้าจากไหนก็ตาม
สูตรที่ใช้กันคือคนได้อันดับ 1 ถ้าอยู่คนละฝ่ายกับอำนาจจะถูกดำเนินคดีอะไรก็ตามทำให้ถูกตัดสิทธิทางการเมืองครับ
สูตรต่อไปคือฝ่ายอำนาจอยากได้รบ.แห่งชาติ รอดูว่างวดนี้จะมาสูตรไหน
ระบบสากลส่วนมากที่1ได้เป็นรัฐบาลครับที่2ได้เป็นฝ่ายค้านที่เหลือในสภาก็มักจะให้ที่1ได้จัดตั้งรัฐบาลอันนี้เป็นมารยาทการเมืองส่วนใหญ่นะครับ คนก็เลยเข้าใจแบบนั้น
อันอับหนึ่งใช่ว่าจะได้ครับ ถ้า 2 กับ 3 จับมือกันส่วนมากอันดับหนึ่งก็เป็นฝ่ายค้าน ถ้าอันดับ 1 จะเป็นแน่นอนคือ ต้องได้เสียงของพรรคตัวเองเกินครึ่งสภาเลยครับ แบบ ไทยรักไทย โน่นเลยครับ ไม่งั้นไม่มีการรับประกันเป็นปกติเลยครับ แค่ว่าอันดับ 1 จะได้รับบทให้รวบเรียบเสียงจากพรรคอื่นๆเพื่อตั้งรัฐบาลก่อนครับ รอบนี้ อนาคตใหม่ เสียงยังไม่นำขาดจากเพื่อไทยเท่าไหร่ เขาเลยเจรจากันยากครับ
อย่าให้ อคติบังตา สิครับ มันเป็นแบบนี้อยู่แล้วนะ
มันเป็นเหมือนโจทย์ 1 + 2 * 3 ครับ
บางคนจะบอกว่า คำนวณได้ 9 บางคนจะบอกว่าได้ 7 (ผมรู้ว่ามันได้สองแบบ แต่ผมเลือก 7)
ซึ่งอยู่ที่ใครจะใช้หลักการไหน ไม่ได้เกี่ยวกับ อคติ อะไรทั้งสิ้น
ถ้าคุณ reply อ่านดีๆ หน่อยจะรู้ว่าผมไม่ได้เจาะจงพรรคไหนเลย
ผมหมายถึงพรรคที่อันดับ 1 เท่านั้นซึ่งหมายถึงตอนปี 62 ด้วย
งั้นตอนนี้เห็นแล้วใช่ไหมครับ ว่าพอที่ 2 คะแนนใกล้กันกับที่ 1 ก็เป็นปัญหาแบบ ณ เวลานี้เลย จริงๆที่ผมรู้เพราะมันมีกรณีตัวอย่างมาเยอะแล้วครับของไทยน่ะ ก่อนไทยรักไทยเกิดขึ้นมา สมัยก่อน ที่ 1 ก็ไม่ได้เป็นก็มีอยู่แบบมาตัวคนเดียว เลยซวย ถ้าอยู่มานานพอจะเห็นครับ
ตอนนี้ไม่ได้ตามข่าวแบบตรงๆได้เห็นแต่ผ่านๆ รู้สึกตอนนี้มีปัญหากันแล้ว ที่ 1 กับที่ 2
เมื่อมี demand ย่อมมี supply
เว็บทำงานรวดเร็วดีนะ
1 เดือนครึ่ง ถือว่าเร็วมาก
จริงๆ แล้วอยากรู้ด้วยว่าเก็บ req กันนานมั้ยปรับเปลี่ยนกันยังไง
ส่วนใหญ่นาน+เสียเวลากับ req พอสมควร กับ มี asset เดิมอยู่แล้วหรือว่าพัฒนาใหม่หมดเลย อ่านดูแล้วเข้าใจว่าใช้จากของโปรเจคที่แล้วพอสมควร
แค่อยากรู้น่ะครับ แบบนี้คือ user ก็ต้องให้ความร่วมมือดีด้วยนะ อยากรู้ way of work เลย
จริงๆ ทีมส่วนใหญ่ที่ทำรายงานผลเลือกตั้ง น่าจะใช้เวลาประมาณ 1 เดือนครึ่งนี้กันครับ ไม่ใช่เพราะว่าเป็นเวลาที่เหมาะสมนะครับ แต่เวลามีเท่านี้ครับ 5555 (เนื่องจากเป็นช่วงเวลาที่เริ่มมีความชัดเจนว่า สมาคมสื่อฯ จะรวบรวมคะแนนได้)
วิธีการรับมือกับสถานการณ์นี้มีหลายส่วน ทั้งเชิง management/design/architecture แต่ส่วนที่สำคัญและ partner ทุกคนในทีมต้องร่วมมือด้วย (ซึ่งต้องขอบคุณทางไทยพีอีกครั้งที่ให้ความร่วมมือในส่วนนี้อย่างดีครับ) คือการยึดตามเป้าหมายที่เหมาะสม ร่วมกันคิดและลำดับความสำคัญของ feature โดยอิงตามเป้าหมายที่ตั้งร่วมกันไว้ครับ (สุดท้ายอาจมีบางอย่างโดนตัดออกไป ถ้ามีเรื่องอื่นสำคัญกว่า โดยทุกคนก็จะเข้าใจได้ครับ)
ขอบคุณครับ ที่ให้ข้อมูลเพิ่มเติม
อยากรู้ราคาค่าจ้างครับผม เว็บประมาณนี้ คนจ้างต้องจ่ายประมาณเท่าไร เป็นช่วงก็ได้
ประทับใจที่เว็บนี้ไม่อืดเลยครับ ตอน refresh ดูผลวันเลือกตั้ง
request per sec ประมาณเท่าไหร่ครับ
เฉลี่ยช่วง peak ระยะเวลาประมาณ 2-3 ชั่วโมงนะครับ
ขอบคุณครับ
ตอนวันเลือกตั้งผมดูเว็บนี้เป็นหลักเลย เพราะว่าดูง่ายสบายตาสุด
เข้ามาร่วมปรบมือให้ด้วยคน ประทับใจกับประสบการณ์การใช้งานมาก เจ๋งมากเลยครับ
..: เรื่อยไป
ทำได้ดีมากเลยครับ ขอชื่นชม
ยกนิ้วให้เลยครับ
เพิ่งเข้าไปดูหน้าตาเว็บหลังจากอ่านข่าวนี้
พบว่า accessibility ก็ถือว่าเข้าถึงได้
ตัวกรองตามเขตตรงหน้าแรกใช้ไม่ได้ ต้องใช้จากหน้ารายเขตอีกที
แล้วก็แอบขัดใจตรงไม่มีการใส่ heading ให้เลย ก็จะไม่มีตัวนำร่องในการสำรวจส่วนต่างๆ ได้แบบไวๆ
@ Virusfowl
I'm not a dev. not yet a user.
ขอบคุณครับ รับไว้ปรับปรุงในงานต่อๆ ไปนะครับ
อยากรู้ค่าใช้จ่าย cloud
ยังดีได้กว่านี้
ขอบคุณครับ รับไว้ปรับปรุงในงานต่อๆ ไปนะครับ
ถ้าเป็นไปได้ ช่วยแนะนำจุดไหนที่คิดว่าอยากให้ปรับปรุงเป็นพิเศษหน่อยนะครับ
อยากทราบ tech stack ที่ใช้งานมีอะไรบ้างครับ ถึงสามารถทำให้เว็บรับโหลดได้เยอะขนาดนี้
หลักๆ อยู่ได้ด้วย CDN เพื่อแคชให้เยอะ และใช้ Cloud storage ช่วยเป็นหลักครับ ส่วนตัวคิดว่าสำหรับงานลักษณะนี้ tech stack ไม่ได้ส่งผลต่างกันมาก ถ้าปรับจูนและใช้ประโยชน์จาก CDN ได้เต็มที่ครับ
เข้ามาปรบมือให้อีก
ผมชอบ glitch ของรูปหลักมาก
ทำได้มืออาชีพมากครับ