Screen Shot 2558-06-16 at 11.24.35 AM
อ่านเจอบทความ และ เอกสารอธิบายเกี่ยวกับ Principle และ Values ของทีมพัฒนาที่ ZenPayroll
มีความน่าสนใจมากๆ จึงนำมาแปลในแบบของตัวเอง
น่าจะมีประโยชน์บ้าง สำหรับทีมพัฒนา software นะ

ทำความรู้จักกับ ZenPayroll กันหน่อย

เป็นบริษัท startup ทำระบบ payroll นี่แหละ
สำหรับธุรกิขขนาดเล็ก และ ขนาดกลาง

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

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

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

โดยส่วนที่น่าสนใจคือ ฝั่ง Engineering หรือทีมพัฒนา
มี principle และ values ที่น่าสนใจดังนี้

1. ว่าด้วยเรื่องของคุณภาพ (Quality)

เนื่องจากระบบที่พัฒนามันมีความซับซ้อน
และเราต้องอยู่กับมันไปตลอด
ดังนั้นเรื่องคุณภาพจึงสำคัญมากมาย

โดยทีมพัฒนาจะมีความเป็นเจ้าของใน product สูงมาก
ซึ่งทีมพัฒนาจะต้องรู้ตั้งแต่เรื่อง requirement, specification
การวิเคราะห์ ออกแบบ สร้างมันขึ้นมา
รวมทั้งการ deploy และ ดูแลรักษาระบบ
เรียกได้ว่าเป็น Full stack กันเลยทีเดียว

ดังนั้น เรื่องของ Dedicate team สำคัญมากๆ

ทุกๆ commit หรือ ทุกการเปลี่ยนแปลงนั้น
จะต้องถูก review จากคนอื่นๆ ในทีมพัฒนาเสมอ
เพื่อช่วยลดข้อผิดพลาดต่างๆ
และทำให้มั่นใจว่า code ที่สร้างขึ้นมานั้น
มันดูแลรักษาได้ง่าย
มันมันอ่าน และ ทำความเข้าใจได้ง่าย

โดยผลพลอยได้ คือ ทุกๆ คนในทีมได้เรียนรู้
ได้เข้าใจระบบ ตลอดจนได้ทำความรู้จักกับคนอื่นๆ ด้วย

เพื่อคุณภาพในระดับที่สูง ดังนั้นเรื่องของ test จึงขาดไม่ได้เลย
โดย test นั้นจะเน้นที่ automated test
และ test มันจะต้องมีความหมายด้วย ไม่ใช่อยากเขียนก็เขียนนะ
มีเป้าหมายเพื่อคุณภาพของ code และระบบที่สูง
จะไม่เน้นเรื่องปริมาณ หรือ quantity นะครับ
เพราะว่ามันคนละเรื่องกับคุณภาพ

โดย code ของที่นี่ จะมี code coverage หรือ test coverage อยู่ที่ 90% ขึ้นไป

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

2. เรื่อง Humanity และ Service

เนื่องจาก software ที่สร้างขึ้นมานั้น
ก็เพื่อช่วยเหลือผู้อื่น ทำให้ชีวิตของผู้อื่นดีขึ้น
ทั้ง ลูกค้า เพื่อนร่วมงาน ทีมงาน รวมถึงบริษัท
ดังนั้น อย่าคิดเพียงว่าเขียน code ตามที่โดนสั่งมา
ลองใช้ความเป็นคน เข้าไปในงานด้วย
วันนี้สิ่งที่คุรทำอยู่นั้น มันไปช่วยเหลือใครบ้าง อย่างไร

อย่าเขียนแต่ code หรือ คิดมีแต่ if, loop อะไรทำนองนั้นอย่างเดียว

3. เรื่อง Pragmatism

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

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

และต้องทำให้มันดีที่สุดเท่าที่จะทำได้ในตอนนั้น
แต่ไม่ใช่พวก perfectionist นะ เช่น

  • Sourcecode management ก็ใช้ git บน github
  • Infrastructure ก็ใช้ AWS
  • Continuous Integration

อย่าไปทำในสิ่งที่มันดี และ มีอยู่แล้ว
และอย่าไปเสียเวลามากมายกับสิ่งที่ไม่จำเป็น

4. เรื่อง Community

เนื่องจากเราไม่ได้อยู่คนเดียวบนโลก
แถมสิ่งที่เราสร้างก็อยู่บน opensource มากมายอีกด้วย
ดังนั้น เมื่อคุณเรียนรู้ และ นำมันมาใช้งานแล้ว
ก็อย่าลืมแบ่งปันประสบการณ์เหล่านั้น ออกไปทั้งข้างใน และ ข้างนอกด้วย

ยิ่งการแบ่งปันภายในทีม ระหว่างทีม และ บริษัท มันสำคัญมากๆ
ลองคิดดูสิว่า ถ้าแต่ละคนที่ทำงานต่าง project กัน
มานั่งช่วยเหลือกัน หา bug ร่วมกัน แก้ไข bug ร่วมกัน
มันจะดีเพียงใด ?

เราทำการแบ่งปันความรู้ มิใช่ business นะครับ
หลายๆ คนนำสองเรื่องนี้มารวมกัน จนไม่สามารถออกไปแบ่งปันอะไรได้เลย

5. เรื่องของ Trust

เรื่องความเชื่อมัน ความไว้ใจมันสำคัญมากๆ ดังนั้น
แต่ละคนจะต้องสร้าง trust ให้คนอื่นๆ ให้ได้
แต่ละทีมจะต้องสร้าง trust ให้ทีมอื่นๆ ให้ได้
หลายๆ ทีมจะต้องสร้าง trust ให้กับองค์กร ให้ได้
แล้ว trust เหล่านั้นมันจะถูกใส่ลงไปใน software ที่คุณสร้าง
และคุณจะได้รับ trust เหล่านั้นกลับมาจากลูกค้าของคุณเอง

ให้ความสำคัญกับความสัมพันธ์มากกว่ากว่าลำดับชั้นของตำแหน่งในองค์กร
เพราะว่าสิ่งที่คุณสร้างมันจะสะท้อนองค์กรอย่างมาก

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

สุดท้ายคือเรื่องของ คน

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

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

แล้วทีมคุณล่ะมีแนวคิดในการพัฒนา software อย่างไรบ้าง ?
หรือทำให้มันเสร็จไปวันๆ ก็พอแล้ว !!

สิ่งที่คุณสร้างออกมานั้น มันจะสะท้อนองค์กร หรือ ทีมของคุณเองนะ