
งานด้านการพัฒนาซอฟท์แวร์ สิ่งที่สำคัญที่สุดคือ “คน” ครับ
ถ้าจ้างคนได้ถูก ให้อิสระและอำนาจในการตัดสินใจที่ถูกต้องกับเขา เรื่องกระบวนการ เรื่องเครื่องมือต่างๆ ทุกอย่างจะตามมาเอง
เวลาบริษัทไอทีใหญ่ๆที่เทคโอเวอร์บริษัทเล็กๆ เรื่องแรกที่ต้องคิดก่อนเลย คือทำยังไงให้คนในบริษัทไม่ลาออก เพราะต่อให้ได้ซอฟท์แวร์และ Infrastructure ทุกอย่างไป ถ้าคนพัฒนาหายหมด โปรดักต์ก็ไปไหนไม่ได้
แต่บริษัทไอทีหลายๆบริษัท กลับปฏิบัติกับคนเหมือนเป็นฟันเฟือง ไปเสียเงินและเวลาไปกับเรื่องกระบวนการและเครื่องมือต่างๆ มากกว่าที่ควรจะเป็น
ในขณะที่การจัดการทรัพยากรบุคคล ซึ่งควรจะเป็นเรื่องที่สำคัญที่สุด กลับถูกมองข้ามไป
บทความนี้เราจะมาพูดถึงการหาและจ้างโปรแกรมเมอร์ (Recruitment) ซึ่งถือเป็นหนึ่งหัวใจหลักในการบริหารทรัพยากรบุคคล หัวข้อต่างๆที่ผมยกมานี้ เป็นข้อปฏิบัติที่ผมเห็นบริษัทไอทีชั้นนำ ทั้งขนาดใหญ่และขนาดเล็ก
1. จ้างแต่ A player
ความสำคัญของทีมโปรแกรมเมอร์ อยู่ที่คุณภาพมากกว่าปริมาณครับ
หนึ่งในความเข้าใจผิดของคนที่ไม่เคยเขียนโปรแกรม คือการคิดว่าการเพิ่มจำนวนคนจะทำให้งานเสร็จเร็วขึ้นเป็นเชิงเส้น (หรือใกล้เคียงเชิงเส้น)
เอาเข้าจริง หากจ้างโปรแกรมเมอร์ที่ทำงานไม่ดีมา โปรแกรมเมอร์ระดับซีเนียร์ในทีมจะต้องเสียเวลาแก้ bug, รีวิวโค้ด, สอนงาน, รีแฟคเตอร์โค้ดมากขึ้น ดีไม่ดีทำให้ Productivity รวมตกลงด้วยซ้ำ
พอมีบั้กเยอะๆ คนเก่งๆที่มีทางเลือกก็จะย้ายไปหาโปรดักต์ใหม่ๆที่มีความน่าสนใจ มากกว่าที่จะมานั่งแก้บั้กที่คนอื่นทิ้งไว้
อีกเรื่องหนึ่งคือ การจ้างโปรแกรมเมอร์ที่ไม่เก่งคือการ”เสียพื้นที่” ในทีม ซึ่ง”พื้นที่”เป็นทรัพยากรที่มีจำกัดมาก ทีมที่มีประสิทธิภาพนั้นขนาดไม่ควรเกินสิบคน หากจำนวนคนเพิ่มเกินกว่านั้น ประสิทธิภาพของทีมจะตกลงเยอะมาก สักพักนึงก็ต้องเริ่มทำการแตกทีม แล้วก็มี overhead ในการสื่อสารตามมาอีก
แต่การจะจ้างเฉพาะคนที่เก่งๆ ก็ไม่ใช่เรื่องง่าย เพราะจะต้องใช้เวลามาก กว่าจะหาคนที่เก่งๆเจอ เช่น ถ้าหากคุณอยากจะจ้าง Top10% ของตลาด ต้องสกรีคน 20-30 คนถึงจะเจอสักคนนึง
ดังนั้น ขั้นตอนการสกรีนคนจะต้องมีประสิทธิภาพมากๆด้วย ตัวอย่างที่ผมเห็นคือ
- มีระบบสกรีนคนแบบอื่นๆ นอกจากเรซูเม่และการสัมภาษณ์งาน เช่น ใช้ Online Coding Test (เช่น Codility, Hackerrank), ขอโค้ดจากผู้สมัครมาทำการรีวิว วิธีพวกนี้จะช่วยตัดคนออกไปได้ตั้งแต่เนิ่นๆ ลดปริมาณเวลาที่ต้องใช้ในการสัมภาษณ์งาน (ในบรรดาวิธีการสกรีนคนทั้งหมด การสัมภาษณ์งาน(ดีๆ) ใช้เวลานานมาก และเปลืองเวลาโปรแกรมเมอร์ในทีมที่สุด)
- ต้องมีคนที่เขียนโปรแกรมเป็น และมีประสบการณ์พอเป็นคนสัมภาษณ์
- ให้มีการสัมภาษณ์มากกว่าหนึ่งรอบ แต่ละรอบมีคนสัมภาษณ์ 1-2 คน และนำผลของการสัมภาษณ์มาประมวลร่วมกัน
- สร้าง Guideline ในการสัมภาษณ์ที่ชัดเจน มีตัวอย่างคำถามด้าน Coding/Technical และคำตอบที่เป็นไปได้ มีเกณฑ์ชัดเจนว่าคำตอบแบบไหนผ่าน คำตอบแบบไหนไม่ผ่าน เพื่อให้การคัดเลือกได้มาตรฐาน
- สร้างกฏให้ชัดเจนสำหรับคนสัมภาษณ์ทุกคน เช่น “เราจ้างแค่ top 10% ของตลาด ถ้าไม่มั่นใจว่าใช่ ให้ตกไปเลย”
- อย่าให้คนในทีมเดียวกันสัมภาษณ์ทั้งหมด เพราะในทีมอาจจะต้องการคนด่วน ทำให้ยอมลดคุณภาพ เพื่อให้ได้คนเร็วที่สุด วิธีแก้ไขของ Amazon คือ ให้มี Bar raiser จากทีมอื่นมาสัมภาษณ์ด้วย โดย Bar raiser จะมีสิทธิ์ขาดในการ”ให้ตก” หากผู้สมัครไม่ผ่านเกณฑ์
2. สร้างประสบการณ์ดีๆให้แก่ผู้สมัคร
การสัมภาษณ์เป็นเรื่องของทั้งสองฝ่าย ในขณะที่เรากำลังประเมินผู้สมัคร ผู้สมัครก็กำลังประเมินเราด้วย
ตัวอย่างเช่น
- HR ต้องทำงานให้เป็นมืออาชีพ อธิบายข้อมูลต่างๆชัดเจน มีการติดต่อผู้สมัครอย่างสม่ำเสมอ ไม่ว่าผู้สมัครจะผ่านหรือไม่ก็ตาม
- คนสัมภาษณ์ต้องทำพฤติกรรมที่เหมาะสม เช่น ไม่ใช้โน้ตบุ้คหรือทำงานอื่นขณะสัมภาษณ์ อธิบายขั้นตอนการสัมภาษณ์ให้ชัดเจน ไม่เล่นมุขภายในระหว่างคนสัมภาษณ์เยอะเกินไป ไม่ทำตัวพองข่มผู้สมัคร ทำตัวไม่น่าทำงานด้วย
- อย่าสัมภาษณ์ง่ายไป อะไรที่ได้มาง่ายๆคนมักไม่ค่อนเห็นคุณค่า โปรแกรมเมอร์เก่งๆส่วนใหญ่ชอบความท้าทายครับ
- อย่าถามอะไรที่ไม่ได้เกี่ยวข้องกับการเป็นโปรแกรมเมอร์เลย (เช่น คุณมองว่าอีกห้าปี คุณจะทำอะไรอยู่ หรือ หากคุณหลงป่า แล้วเอาของติดตัวไปได้แค่อย่างเดียว จะเอาอะไรไป)
- สำรองเวลาให้ผู้สมัครได้ถามเกี่ยวกับตัวงาน หรือบรรยากาศในการทำงานสัก 10-15 นาที แล้วเตรียมตัวขายของด้วย ว่าทำงานกับทีมเราแล้วดียังไง
- หากผู้สมัครได้รับข้อเสนองาน ก็อย่าลูกเล่นตุกติกจนเกินงาม
- หากผู้สมัครไม่ได้รับข้อเสนองาน ก็ต้องมีการแจ้งผล ถ้าเป็นไปได้ก็อธิบายให้ชัดเจนว่าทำไมถึงไม่ผ่าน
- มีการรับ Anonymous feedback จากผู้สมัครทุกคน เพื่อปรับปรุงกระบวนการอย่างต่อเนื่อง
หลายๆที่คิดว่า หากจะผู้สมัครไม่ผ่านการคัดเลือก ก็ไม่ต้องใส่ใจกับผู้สมัครมาก (เช่น ไม่ส่งอีเมลล์แจ้งผล ไม่ต้องให้ถามคำถาม หรือตอบคำถามใดๆ ตัดจบเลย) ซึ่งเป็นความคิดที่ผิดมาก เพราะโลกไอทีมันแคบ หากเราทำอะไรไม่ดีไว้ แน่นอนว่าต้องมีการบอกต่อปากต่อปากไปเรื่อยๆ สร้างภาพลบให้กับบริษัทและลดโอกาสที่คนอื่นๆจะอยากทำงานกับเรา
ลองสังเกตใน Glassdoor ใน Interview Experience ของ Google จะพบว่าผู้สัมภาษณ์ส่วนใหญ่จะมี Positive experience กับการสมัครงาน แม้ว่าจะตกสัมภาษณ์ก็ตาม เรื่องแบบนี้ไม่ได้เกิดขึ้นง่ายๆนะครับ เบื้องหลังการสัมภาษณ์ ผู้สัมภาษณ์เองต้องมีการเตรียมตัวและเรียนรู้ด้านการสัมภาษณ์งานด้วย
3. สนับสนุนการ Refer จากคนภายใน
ถ้าใครคุ้นเคยกับระบบสมัครงานบริษัทไอทีใหญ่ๆอย่าง Google หรือ Amazon จะรู้ว่าบริษัทเหล่านี้มี Fast-track สำหรับผู้สมัครที่ได้รับการ Refer จากพนักงานในบริษัท โดยผู้สมัครเหล่านี้จะได้รับการตอบกลับที่ไวกว่า และได้รับการอัพเดตทุกขั้นตอนของกระบวนการสมัครงานอย่างต่อเนื่อง
สาเหตุก็เพราะมีสถิติชัดเจน ว่าคนที่ได้รับการรีเฟอร์จากคนภายในบริษัท มีโอกาสผ่านสัมภาษณ์งานสูงมากกว่า และค่าใช้จ่ายโดยรวมต่ำกว่าวิธีการหาคนแบบอื่นๆ
ดังนั้น บริษัทจึงควรที่จะสนับสนุนการรีเฟอร์ให้มากที่สุด สิ่งที่เราทำได้คือ
- ให้เงินค่า refer กับพนักงานในระดับที่กระตุ้นให้พนักงานช่วยหาคนอย่างจริงจัง (เช่น มากกว่า 50% ของเงินเดือน) คำนวนดีๆว่าการที่งานเราเดินช้าไปเรื่อยๆ มันคุ้มรึเปล่ากับการประหยัดเงินส่วนนี้ ถ้าใช้บริการ Recruiter อยู่ เงินจำนวนนี้น้อยกว่าค่าจ้าง Recruiter มาก
- หากมีการ refer ให้ปฏิบัติกับคนที่ถูก refer ให้เขารู้สึกว่าได้รับความสำคัญ ไม่ใช่หุ่นยนต์ เช่น เวลาติดต่อ ก็เขียนอะไรที่มัน personalized หน่อย ไม่ใช่ก็อบแปะอย่างเดียว ไม่แก้อะไรเลย และคอยติดต่ออัพเดตว่าขั้นตอนไปถึงไหนแล้วทุกๆสัปดาห์
4. เสนอเงิน และอะไรที่มากกว่าเงินด้วย
มีคนเคยบอกว่า ถ้าเงินซื้ออะไรไม่ได้ แปลว่ายังเสนอเงินไปไม่มากพอ
มนุษย์เราเป็นสิ่งมีชีวิตที่ไม่ชอบความเปลี่ยนแปลงครับ หากไม่มีสิ่งกระตุ้นที่มากพอ ก็ไม่มีใครอยากย้ายงานหรอก
ใครที่บ่นว่าจ้างโปรแกรมเมอร์เก่งๆไม่ได้ หาไม่เจอ จริงๆไม่ใช่หาไม่เจอครับ แค่เสนอให้ไม่พอ หรือเสนอให้มากพอไม่ไหว เพราะธุรกิจทำรายได้ไม่มากพอ
สิ่งที่เสนอได้หลักๆก็คือเงิน ซึ่งเป็นวิธีที่เหมาะมากสำหรับเด็กจบใหม่ เพราะเงินเดือนไม่มาก การเสนอเงินให้ 150% ถึง 200% ในเรตของเด็กจบใหม่นั้นอาจจะถูกกว่าการเสนอเงินให้ 120% ของโปรแกรมเมอร์ที่มีประสบการณ์สูงๆ
อย่ามองข้ามเด็กจบใหม่นะครับ ทุกๆที่ จะมีหัวกระทิในชั้นปีสักสองสามคนที่เขียนโปรแกรมเก่งมาก บางคนก็รับงาน Project ตั้งแต่เรียน หรือบางคนเขียน Opensource เองเพื่อความสนุก หลายๆคนเก่งกว่าคนที่มีประสบการณ์ด้วยซ้ำ
นอกจากเรื่องเงิน ยังมีปัจจัยอีกเยอะมากที่สามารถใช้ดึงคนได้
- สร้างทีมที่เก่ง เพราะคนเก่งจะดึงดูดคนเก่งด้วยกัน
- มีงานที่ท้าทาย น่าสนใจ หรือให้ใช้เทคโนโลยีใหม่ๆ
- สวัสดิการต่างๆนอกเหนือจากที่ทุกที่เขาให้กัน ของเล็กๆอย่างเช่น ขนม เครื่องดื่ม โต้ะปิงปอง หรือถ้ามีงบก็จัด XBox Playstation + โปรเจ็คเตอร์ ค่าใช้จ่ายพวกนี้เหมือนการทำ Marketing อย่างหนึ่ง
- ให้ใช้พื้นที่บริษัทในการจัดงาน MeetUp ต่างๆ หรือเป็นสปอนเซอร์สนับสนุนเพื่อสร้าง Branding
- ให้ทีมเขียนบล็อคด้านการพัฒนาเจ๋งๆ
- ให้เวลาเข้าออกงานเป็นแบบ Flexible
- ให้ทำงานจากบ้านได้หนึ่งวันต่อสัปดาห์
- Technical career path
- ให้ทำงานแค่ 4 วันต่อสัปดาห์ (32 – 36 ช.ม.)
ลองถามโปรแกรมเมอร์ในทีมครับ ว่าถ้าอยากจะย้ายไปที่อื่น อะไรที่ดึงดูดพวกเขาให้ย้าย คำตอบอาจอยู่ใกล้ตัวกว่าที่คิด