- เน้นย้ำถึงความไม่มีประสิทธิภาพของ take-home assignment ที่ใช้ในการ สัมภาษณ์นักพัฒนาซอฟต์แวร์ และปัญหา การสิ้นเปลืองเวลาของผู้สมัคร
- ระหว่างกระบวนการสมัครงานกับ Kagi Search ได้พบกับ ข้อกำหนดงานที่กว้างและคลุมเครือเกินไป
- เมื่อเสนอแผนการดำเนินงานที่เป็นรูปธรรม กลับพบว่า ผู้จัดการไม่มีฟีดแบ็กที่ชัดเจน และมีการสื่อสารที่ไม่มีประสิทธิภาพ
- หลังส่ง โปรเจกต์ที่ตั้งใจพัฒนาอย่างมาก ก็รู้สึกว่าไม่ยุติธรรมจากการถูกปฏิเสธโดยไม่มีเหตุผลชัดเจน รวมถึงการเปลี่ยนเกณฑ์ประเมิน
- เสนอทางเลือกสำหรับ กระบวนการจ้างงานที่ดีกว่า (เช่น การรีวิวโค้ดแบบเรียลไทม์) และชวนตั้งคำถามต่อการเรียกงานสัมภาษณ์แบบมอบหมายที่เกินพอดี
บทนำ
- Take-home assignment คือรูปแบบการประเมินในการสัมภาษณ์นักพัฒนาซอฟต์แวร์ ที่ให้ผู้สมัครทำโจทย์และส่งโค้ดกลับมา
- โพสต์นี้ต้องการชี้ให้เห็นถึง ความไม่สมเหตุสมผลและปัญหาการสิ้นเปลืองเวลาของผู้สมัคร ผ่านประสบการณ์จริงจากการสมัครงานกับ Kagi Search ซึ่งเดิมคิดว่าเป็นบริษัทที่มีชื่อเสียงดี
สมัครงานกับ Kagi Search
- ได้ ส่งเรซูเม่ เพื่อสมัครตำแหน่งนักพัฒนาแบ็กเอนด์ของ Kagi Search
- ความต้องการของตำแหน่งมีดังนี้
- มีประสบการณ์สร้างระบบแบ็กเอนด์
- ใช้งานภาษา Go ได้
- มีประสบการณ์ขยายและดูแลระบบแบ็กเอนด์ขนาดใหญ่
- สามารถทำงานร่วมกับเพื่อนร่วมทีม เช่น SRE ได้
- เข้าใจเทคโนโลยีคอนเทนเนอร์ เช่น Docker
การแจ้งงานสัมภาษณ์และข้อกำหนด
- หลังผ่านการคัดกรองเอกสาร ก็ได้รับอีเมลแจ้ง take-home assignment
- หัวข้องาน: "สร้างอีเมลไคลเอนต์แบบเรียบง่ายที่ได้แรงบันดาลใจจากเทอร์มินัล"
- เลือกได้ว่าจะทำเป็นเทอร์มินัลหรือเว็บแอป
- ต้องมีฟังก์ชันพื้นฐานสำหรับดู/ส่งอีเมล
- เลือกได้อย่างอิสระว่าจะใช้แบ็กเอนด์อีเมลจำลองหรือจริง (IMAP/POP ฯลฯ)
- ต้องรองรับเฉพาะข้อความ plaintext ไม่จำเป็นต้องมี rich text
- การส่งงาน: ต้องมี GitHub repository, เวอร์ชันที่ deploy แล้ว, และเอกสารวิธีติดตั้ง
- ขาดแนวทางที่ชัดเจน และขนาดของโปรเจกต์ก็ค่อนข้างใหญ่
- แต่ก็ยังตัดสินใจทำงานชิ้นนี้เพราะชื่อเสียงของบริษัท
การสื่อสารกับผู้จัดการ
- เมื่อสอบถามเรื่อง ขอบเขตงานที่ชัดเจน และฟีเจอร์เพิ่มเติม กลับได้คำตอบกำกวมเพียงว่า “จะเพิ่มอะไรนั้นขึ้นอยู่กับผู้สมัคร”
- ก่อนลงทุนเวลาและแรงไปกับงาน ได้แชร์ แผนการดำเนินงานที่เป็นรูปธรรม (Proposal) และขอคำตอบกลับ แต่สุดท้ายก็ต้องเดินหน้าต่อโดยแทบไม่มีฟีดแบ็กพิเศษใด ๆ
ข้อเสนอและแผนงาน
- แผนการดำเนินงาน:
- เว็บแอปที่พัฒนาด้วย Go
- deploy ผ่าน AWS ECS Fargate พร้อมใช้ SSL
- เชื่อมต่อบริการส่งอีเมล Postmark
- เพิ่มฟังก์ชันล็อกอิน/ยืนยันตัวตน
- รับส่งอีเมลและแสดงผลบน UI
- เหตุผลในการเลือกเทคโนโลยี:
- ใช้เทคโนโลยีที่หลากหลายและเกี่ยวข้องกับบทบาทฝั่งแบ็กเอนด์
- สร้างระบบจริงโดยใช้เครื่องมือ Infra-as-Code
- ไม่ใช่แค่เชื่อมต่อ API แบบง่าย ๆ แต่ทำให้ใกล้เคียงบริการจริงมากขึ้น
- องค์ประกอบหลักที่พัฒนา:
- Pocketbase (backend/DB), TEMPL (เทมเพลต), Pulumi (IaC), Postmark (บริการอีเมล)
- มีการทำ pagination, ระบบล็อกอิน ฯลฯ
- Stretch Goal: ความเสถียร เช่น การสำรองและกู้คืนข้อมูล
- สรุป: ได้อธิบายรายละเอียดและเหตุผลไว้อย่างเพียงพอล่วงหน้า และคาดหวังว่าจะได้รับการพิจารณาและคำตอบที่ชัดเจน
การตอบกลับจากผู้จัดการและปัญหาด้านการสื่อสาร
- ได้รับเพียงคำตอบสั้น ๆ ว่าเป็น “ข้อเสนอที่น่าสนใจ” โดยไม่มีการพิจารณาเชิงรายละเอียด
- ไม่มีฟีดแบ็กเลยว่าข้อเสนอนั้นเหมาะสมหรือควรปรับปรุงอะไร
- ในมุมของผู้สมัคร จึงรู้สึกว่าไม่มีการให้ความเคารพต่อเวลาและความพยายามที่ต้องลงทุน
การลงมือทำโปรเจกต์
- ได้พัฒนาครบทั้งตามข้อกำหนดและตามข้อเสนอที่วางไว้ โดยทุ่มเวลาเต็มหนึ่งสัปดาห์
- ส่งทั้งวิดีโอเดโมโปรเจกต์, GitHub repository และเอกสารอย่างละเอียด
การแจ้งปฏิเสธและฟีดแบ็กที่ได้รับ
- หลังได้รับอีเมลปฏิเสธแบบอัตโนมัติ เมื่อขอฟีดแบ็กก็ได้รับคำตอบว่า:
- “มีผู้สมัครคนอื่นส่งผลงานที่แข็งแกร่งกว่า”, “การแข่งขันในการจ้างงานสูงมาก”
- ประเด็นปัญหา
- หาก ชอบโซลูชันที่เรียบง่ายกว่า ก็น่าจะแจ้งไว้ได้ตั้งแต่แรก
- หาก ข้อเสนอมีจุดอ่อน ก็น่าจะให้ฟีดแบ็กได้ตั้งแต่ตอนนั้น
- แม้หลังปฏิเสธแล้ว ประกาศรับสมัครก็ยังคงเปิดอยู่ จึงมองว่าไม่ใช่แค่การแข่งขันธรรมดา แต่เป็นการเรียกร้องให้ผู้สมัครใช้เวลามากเกินไป
- หลังส่งโปรเจกต์แล้วกลับยกระดับข้อกำหนดให้เข้มขึ้นอีก จนเหมือนว่างานที่ส่งไปกลายเป็นการยกระดับมาตรฐานเสียเอง
บทสรุปและประเด็นปัญหา
- วิธีการแบบนี้ ไม่ยุติธรรมต่อผู้หางานจำนวนมาก และอาจกระทบถึงความมั่นคงในการดำรงชีพจริง ๆ
- เน้นว่าจำเป็นต้องกล้าปฏิเสธหรือตั้งคำถามกับ การเรียกงานที่มากเกินไปโดยไม่มีค่าตอบแทน
- มี กระบวนการจ้างงานที่ดีกว่า เพื่อทดแทนงานแบบโปรเจกต์ เช่น การรีวิวโค้ดแบบเรียลไทม์
- สามารถดูความสามารถในการแก้ปัญหาในการพัฒนาจริงได้ผ่านการรีวิวโค้ดแบบ asynchronous/synchronous
- ชี้ให้เห็นช่องว่างระหว่างโจทย์สไตล์ Leetcode กับความต้องการในงานจริง
- เรียกร้องให้ปรับปรุงวัฒนธรรม การทำให้ผู้หางานหมดไฟและการประเมินอย่างไม่เป็นธรรม
ข้อเสนอเพื่อกระบวนการจ้างงานที่ดีกว่า
- เสนอทางเลือก เช่น การรีวิวโค้ดแบบเรียลไทม์ เพื่อ ประเมินความสามารถของนักพัฒนาได้อย่างมีความหมายมากกว่า
- ย้ำว่าควรเปลี่ยนจากการเน้นแก้ปริศนาอัลกอริทึมแบบจับเวลา ไปสู่การประเมินความสามารถจริงและทักษะแก้ปัญหามากกว่า
1 ความคิดเห็น
ความคิดเห็นจาก Hacker News
ยอมรับในความสามารถและความหลงใหลในการทำงานของผู้สมัคร แต่อยากเสนออีกมุมมองหนึ่ง
“พัฒนาอีเมลไคลเอนต์ที่ได้แรงบันดาลใจจากเทอร์มินัลเพื่อให้ลูกค้าทดสอบอัลฟา” เป็นคำขอที่สมเหตุสมผลสำหรับวิศวกรสตาร์ตอัปช่วงเริ่มต้น ต่อให้มีสเปกเพิ่มอีก หลายอย่างก็ยังขึ้นอยู่กับการตัดสินใจของวิศวกรเอง ผู้สมัครดูต้องการความแน่นอนมากเกินไป
การที่ผู้สมัครอยากรู้ล่วงหน้าว่า Kagi จะให้ฟีดแบ็กอะไรหลังส่งงานเสร็จ ไม่ใช่สัญญาณที่ดีนัก เพราะเป็นสถานการณ์ที่ให้คำตอบชัดเจนไม่ได้อยู่แล้ว พวกเขาน่าจะกำลังประเมินใบสมัครอยู่เป็นร้อยเป็นพัน
ถ้าไม่จำเป็นต้องขอให้ช่วยทำความชัดเจนข้อกำหนด งั้นก็คงไม่ต่างจากให้ “ทายเลข 1 ถึง 10” แล้วคัดคนที่เดาผิดออก
ฉันไม่เห็นด้วยกับการคัดตกเพราะทุ่มเทกับงานและเก็บรายละเอียดดี
งานกำกวมแบบนี้จริง ๆ แล้วก็เป็นอีกวิธีหนึ่งในการคัด “cultural fit” เท่านั้น
วัฒนธรรมแบบ “เขียนโค้ดก่อน ฟีดแบ็กค่อยว่ากัน” เป็นประสบการณ์ที่ทำร้ายเส้นทางอาชีพมากที่สุดอย่างหนึ่ง ผู้สมัครคนนี้ทำตามแนวปฏิบัติซอฟต์แวร์สมัยใหม่ (ฉันเป็นคนจ้างงานในบริษัทที่มีวิศวกรมากกว่า 1,000 คน)
ตอนหางานครั้งก่อนฉันเองก็เคยตกเพราะงาน take-home ที่กว้างมากจนไม่รู้ว่าส่วนไหนคือเกณฑ์ประเมิน หลังจากนั้นก็เกิดอาการต่อต้านงานแบบนี้อย่างหนัก
บริษัทไม่ควรปล่อยให้เสียเวลาไปมากกว่านั้น ควรจบงานตั้งแต่จุดนั้นจะดีกว่า
ฟีเจอร์อีเมลพื้นฐานที่สุดอย่างการเปิดเมลก็ยังไม่มี ทั้งที่สมัครตำแหน่งวิศวกรแบ็กเอนด์ แต่กลับใช้ผลิตภัณฑ์ภายนอกอย่าง postmark และ turso และยังขาดฟังก์ชันพื้นฐานอย่างการจัดรูปแบบ plain text การแสดงผล โฟลเดอร์ ฯลฯ
มีฟีเจอร์เสริมอย่างหน้าแอดมินกับล็อกอินก็จริง แต่โครงสร้างข้อมูลขั้นต่ำอย่างแผนที่เมลเฮดเดอร์ก็ยังไม่มี
อาจเป็นวิศวกรที่ดีได้ แต่ตัดสินว่าไม่เหมาะกับตำแหน่งนี้
ข้อเสนอประกอบงาน take-home ก็ดูแปลกผิดปกติเกินไปด้วย
พอกลับไปอ่านประกาศเดิมอีกครั้ง ก็เห็นว่าระบุชัดว่าเป็น “minimal terminal-inspired email client” และยก aerc, mutt, himalaya เป็น reference นี่ถือว่าเป็นการตีความ requirement ผิดอย่างชัดเจน
ต้องการอีเมลไคลเอนต์แบบเทอร์มินัลหรือเว็บแอป พร้อมฟีเจอร์พื้นฐาน ซึ่งฉันคิดว่าเขาทำครบแล้ว
ส่วนที่บอกให้ได้แรงบันดาลใจจากเครื่องมือแบบเทอร์มินัลนั้นเป็นเรื่องอัตวิสัย ถ้าเป็นตำแหน่งแบ็กเอนด์ การไปใส่ใจกับ UI มากอาจไม่มีประสิทธิภาพก็ได้
ถ้าอย่างน้อยได้ฟีดแบ็กก็น่าจะช่วยให้เติบโตได้ แต่ในความจริงบ่อยครั้งก็ทำได้ยาก
เลยยิ่งทำให้รู้สึกคาใจกับงาน take-home ผู้สมัครและคนจ้างควรเคารพเวลาของกันและกันมากกว่านี้
แค่ 2–3 ชั่วโมงก็ประเมินผู้สมัครได้พอแล้ว ถ้ามีกรอบเวลา ผู้สมัครก็น่าจะเสนอวิธีแก้ที่เหมาะสมภายในกรอบนั้นได้ และบริษัทเองก็น่าจะสื่อได้ชัดว่าต้องการอะไร
นอกจากนี้ บริษัทควรบอกให้ชัดว่าประเภทคำตอบเป็นแบบ ‘อะไรก็ได้’ หรือ ‘ต้องการคำตอบที่ดีที่สุด’
เพราะเจตนาของงาน take-home อาจต่างกันไปว่าจะเน้นให้ผ่านการทดสอบ เน้นความครบของภารกิจ หรือเน้นคุณภาพโค้ด ผู้สมัครเลยอาจสับสนได้
แถมยังเสี่ยงคัดคนที่ยุ่งและมีเวลาน้อยออกไปโดยไม่ตั้งใจ
บริษัทเราจะให้โจทย์ ETL ง่าย ๆ แล้วจำกัดเวลาไว้ 4 ชั่วโมง
แม้ทำไม่เสร็จก็ยังพอรับได้ และใน follow-up จะมีช่วงรีวิวโค้ดกับถามตอบ
ความสามารถจริงดูได้จากการคุยต่อยอดหลังจากนั้น
ต่างจากงาน onsite ที่ทุกคนใช้เวลาเท่า ๆ กัน งาน take-home ทำให้แต่ละคนเสียเปรียบจากการจัดสรรเวลาที่ไม่เท่ากัน
ถ้าอย่างนั้นทำ onsite coding 1 ชั่วโมงยังดีกว่า อย่างน้อยทั้งผู้สมัครและผู้สัมภาษณ์ก็ลงทุนเวลาเท่ากัน เป็นการเคารพคุณค่าของเวลาทั้งสองฝ่าย
ในวิดีโอเดโมกลับเห็นเพียงเว็บแอปทั่วไป ทั้งที่มีการระบุชัดให้ได้รับแรงบันดาลใจจากอีเมลไคลเอนต์เทอร์มินัลที่มีอยู่แล้วอย่าง aerc, mutt, himalaya
เลยสงสัยว่าฉันพลาดอะไรไปหรือเปล่า
UX แบบเฉพาะของเทอร์มินัลไคลเอนต์ยังเป็นพื้นที่ที่ไม่มี “คำตอบที่ถูกต้อง” ชัดเจน จึงเป็นไปได้ว่าพวกเขาตั้งจุดนั้นไว้เป็นเกณฑ์ประเมิน
ฉันเชื่อว่าถ้าขอให้ทำงาน take-home ก็ควรต้องมีการนัด follow-up เสมอ
ฉันใช้ Kagi แบบเสียเงินอยู่แล้ว แต่จากเรื่องนี้กำลังคิดจะยกเลิกบัญชี
ถ้าไม่มีเวลาคุยกับผู้สมัครตั้งแต่แรก ก็ไม่ควรขอให้ทำงานแบบนี้เลย
ถ้าถึงขั้นรีวิวแล้ว ฉันคิดว่าผู้สมัครก็ควรมีสิทธิ์ได้รับฟีดแบ็ก
แต่ในความจริง เมื่อมีผู้สมัครเก่ง ๆ หลายสิบคนและต้องเลือกเพียงคนเดียว การไม่ผ่านก็ไม่ได้แปลว่า “ฝีมือไม่พอ” เสมอไป
ในทางกฎหมายด้วย คำตอบอย่างเป็นทางการว่า ‘ทำไมเลือก A และไม่เลือก B’ มักลงเอยด้วยการหยิบจุดด้อยมาติเท่านั้น
หลายบริษัทจัดการเรื่องนี้ได้ดีกว่า
ถ้าความเข้าใจ requirement คลาดเคลื่อนมาก การข้ามขั้นตอนพูดคุยต่อก็เป็นเรื่องที่เกิดขึ้นได้
บริษัทต้องการคนที่มีความเป็นอิสระและตั้งเป้าหมายให้ตัวเองได้
ความคลุมเครือมีไว้เพื่อดูความสามารถของผู้สมัครในการสำรวจคำตอบจากหลายมุมและคลี่คลายมันออกมา
เพราะบริษัทที่ขับเคลื่อนด้วยโปรโตไทป์ย่อมมีคนบางแบบที่ไม่เหมาะ ผู้สมัครบางคนอาจคิดแค่ 10 นาทีแล้วทำสิ่งที่ดีที่สุดเท่าที่ทำได้ภายใน 60 นาที
แต่สำหรับนักพัฒนา ความสามารถในการถามคำถามแบบนี้เป็นคุณสมบัติที่สำคัญมาก จึงยิ่งทำให้คาดหวังกับวิธีจ้างงานมากขึ้นและผิดหวังมากขึ้น
ทั้งที่สาเหตุจริงคือคำอธิบายที่กำกวม
ครูที่ยอดเยี่ยมจะทำให้คนเข้าใจได้มากที่สุดเท่าที่จะทำได้ ถ้ามีนักเรียนสับสนจำนวนมาก ปัญหาก็อยู่ที่คนออกโจทย์
นักศึกษามหาวิทยาลัยไม่ควรถูกคาดหวังให้แก้โคอันแบบพระเซน
เมื่อก่อน Vlad เป็นคนประเมินผู้สมัครเอง และโจทย์ก็เป็นสไตล์นี้
พอบริษัทโตขึ้น ดูเหมือนตอนนี้คนอื่นเป็นผู้ประเมินแล้ว
Vlad มีรสนิยมแบบ HN และอยากร่วมงานกับผู้สมัครที่เขารู้สึกว่า “เท่”
เช่น ถ้าเขียนเอกสารออกแบบยาว ๆ ว่า “จะใช้ Galactor และโปรเจกต์นี้พร้อม flop แล้ว” มันจะให้ผลตรงกันข้ามโดยสิ้นเชิง
กับ requirement เรื่อง “ได้แรงบันดาลใจจากเทอร์มินัล” เขามักคาดหวังรายละเอียดระดับคีย์ลัดคีย์บอร์ดและองค์ประกอบต่าง ๆ แบบที่แอปเทอร์มินัลจริงมี
จะบอกว่านี่เป็นตัวกรองที่ดีหรือไม่ก็ยังถกเถียงกันได้ แต่ถ้าคุณเข้าใจบริบทนี้และมีศักยภาพจะผ่าน งานนี้ก็คงดูง่าย
อยากให้ Kagi สื่อสารบริบทนี้ให้ดีขึ้น เสียดายที่เสียเวลาไป แต่หวังว่าคุณจะเจอบริษัทที่เหมาะกับสไตล์ของคุณ
ทีมที่ขาดความหลากหลายอาจติดอยู่กับกำแพงเดิม ๆ และไปต่อไม่ได้
ฉันคิดว่าปรากฏการณ์นี้พบได้บ่อยโดยเฉพาะในสตาร์ตอัป และเกี่ยวข้องกับเหตุผลที่ 9 ใน 10 ล้มเหลว
งานที่ให้คะแนนโดยไม่มีเกณฑ์ชัดเจนเป็นเรื่องไม่ยุติธรรม
สุดท้ายก็ไม่ต่างจากโจทย์แฝงที่ให้ “เดาคำตอบในหัวฉัน”
มันให้ความรู้สึกว่าไม่ค่อยใส่ใจผู้คนเท่าไร
ถ้าวัฒนธรรมเป็นแบบนี้ ทุกคนต้องไปสืบข้อมูลแบบสายลับกันเองหรืออย่างไร
ถ้าผู้สมัครแบบ “ไม่เท่” อย่างฉันได้รับสัญญาณที่ชัดเจนและรีบไปหาบริษัทอื่นได้ ก็น่าจะดีกว่า
รายละเอียดที่ตกหล่นแบบนี้ทำให้ฉันจะหยุดรีวิวต่อ
ตั้งแต่ข้อเสนอด้านดีไซน์แบบง่าย ๆ ไปจนถึงงานลงมือทำจริง ทุกอย่างมีการจำกัดเวลาอย่างชัดเจน
สุดท้ายก็ไม่ผ่าน และไม่ได้รับเหตุผลที่ชัดเจน
แม้น่าจะเป็นเพราะมีผู้สมัครเยอะมาก แต่ประสบการณ์แบบนี้ก็ยังทิ้งร่องรอยทางอารมณ์ไว้นาน ฉันเข้าใจความรู้สึกของ OP
แต่ถ้าฉันเป็นคนจ้าง ก็คงไม่รับผู้เขียนเหมือนกัน
สตาร์ตอัปต้องการคนที่ทำงานได้รวดเร็วและใช้วิธีที่ปฏิบัติได้จริง
ฉันเคยมีเพื่อนร่วมงานที่ออกไปเก็บความเห็นจากรอบตัวแล้วจมหายทำคนเดียวอยู่หลายวัน สุดท้าย requirement เปลี่ยนไปแล้ว ซึ่งไม่ดีกับทุกฝ่ายเลย