บทความนี้ถูกย้ายมาจาก blog เก่าของผมบน Medium แต่ได้ถูกปรับปรุงและเรียบเรียงเนื้อหาใหม่แล้ว
Table of Contents
- บทนำ (Introduction)
- Platform Engineering คืออะไร?
- ปัญหาที่ Platform Engineering เข้ามาช่วย
- หลักการของ Platform Engineering
- ความแตกต่างระหว่างทีม DevOps และทีม Platform
- บทสรุป (Conclusion)
บทนำ (Introduction)
ลองนึกภาพเชฟที่กำลังทำงานอยู่ในครัว แต่แทนที่เขาจะได้โฟกัสอยู่กับการทำอาหาร เขากลับวุ่นอยู่กับงานที่ไม่เกี่ยวข้องนัก เช่น การล้างผักหรือการแร่เนื้อ สิ่งเหล่านี้ทำให้เชฟทำงานได้ไม่เต็มประสิทธิภาพใช่มั้ยครับ?
เช่นเดียวกับ developer แทนที่พวกเขาจะมุ่งเน้นไปที่การพัฒนา application ซึ่งเป็นงานหลัก พวกเขากลับต้องมาเจอกับ cognitive load (ภาระทางปัญญา) หรือก็คือต้องมาเรียนรู้การจัดการ infrastructure, tools หรือ services ต่าง ๆ มากมาย
เพื่อแก้ปัญหาเหล่านี้ แนวคิดที่กำลังถูกพูดถึงอย่างมากในช่วงนี้โดยมุ่งเป้าไปที่การจัดการกับ cognitive load ของ developer และปรับปรุงกระบวนการพัฒนา software ให้คล่องตัวมากขึ้น เราเรียกมันว่า “Platform Engineering”
Platform Engineering คืออะไร?
เราอาจมองได้ว่า platform engineering เป็นเหมือนวิธีการในการเตรียมห้องครัวไฮเทค (เทียบกับ platform) ให้กับเชฟ (เทียบกับ developer) ซึ่งภายในครัวต้องมีอุปกรณ์ครบครัน, มีการเตรียมวัตถุดิบและเครื่องปรุงต่าง ๆ ไว้อย่างดี, มีหุ่นยนต์อัตโนมัติที่เชฟสามารถใช้มันทำงานบางอย่างได้ด้วยการกดปุ่มเดียว สิ่งเหล่านี้ทำให้เชฟสามารถโฟกัสกับการทำอาหารได้อย่างเต็มที่
ดังนั้น platform engineering จึงเป็นเรื่องของการสร้างและดูแล self-service platform ที่ออกแบบมาให้ developer สามารถ build, test และ deploy application ได้อย่างรวดเร็วโดยสามารถเตรียม infrastructure, tools หรือ services ต่าง ๆ ที่จำเป็นสำหรับการพัฒนา application ได้ด้วยตัวเองโดยที่ไม่ต้องรอทีม operations
Platform ถูกสร้างขึ้นจากการประกอบกันของ tools และ components ต่าง ๆ (toolchains และ workflow) เช่น Git, container orchestration, CI/CD pipeline, IaC tools, secrets manager, identity management และอื่น ๆ
Platform คือ product ของบริษัท โดยมี developer ในบริษัทเป็น user จึงเรียกว่า internal developer platform (IDP)
ปัญหาที่ Platform Engineering เข้ามาช่วย
ที่ผ่านมา developer จะต้องทำงานร่วมกับทีม operations เพื่อให้พวกเขาช่วยจัดเตรียม ecosystem สำหรับการพัฒนา application ให้ เช่น server, network, load balancer, database, secrets, encryption key หรืออื่น ๆ ไม่ต่างกับเชฟที่จะต้องรอวัตถุดิบ, รอกะทะให้ร้อน หรือรอคนมาช่วยล้างผักให้
จากรูปคือ cognitive load ที่ developer ต้องเจอ สังเกตว่ามันเพิ่มขึ้นเรื่อย ๆ ตรงนี้เองที่ platform engineering จะเข้ามาช่วย
-
Standardization: การมี platform ที่ถูก centralized จากส่วนกลางช่วยสร้างมาตรฐานในการพัฒนา, deploy และ operate service ต่างๆ รวมถึงช่วยบังคับใช้ practice ที่ดี เช่น security, testing, monitoring ให้เป็นไปในทิศทางเดียวกัน
-
ส่งมอบ Software ได้เร็วขึ้น: ด้วย automation และ self-service จะช่วยให้ developer สามารถส่งมอบ software ได้เร็วและมีคุณภาพมากขึ้น ส่งผลดีโดยตรงต่อธุรกิจ
-
Scalability & Reliability: Platform จะถูกออกแบบให้สามารถ scale ได้ตามความต้องการ รวมถึงมีกลไกในการทำให้ระบบมี reliability สูง เช่น การทำ self-healing หรือ circuit breaker เป็นต้น
หลักการของ Platform Engineering
อย่างแรกคือการกำหนดเป้าหมายเพื่อใช้เป็น guideline ในการพัฒนา สิ่งนี้ควรสอดคล้องกับเป้าหมายโดยรวมขององค์กร และต้องกำหนดบทบาทของทีม platform ไว้ให้ชัดเจน
ในการสร้าง platform ให้ประสบความสำเร็จนั้นควรจะทำตามแนวคิด platform as a product นั่นคือการเก็บ user requirement, รับ feedback จาก user และต้องได้รับการ support จาก stakeholder ภายในองค์กรด้วย ทีม platform ควรจะทำความเข้าใจ pain point ของ developer โดยรวมเพื่อที่จะกำหนด feature ที่จำเป็น แล้วสร้าง platform ให้ตรงกับความต้องการเหล่านั้น
นอกจากนี้ platform ที่ดีควรจะถูกวัด performance ผ่าน KPI ต่าง ๆ เช่น productivity, lead time, deployment frequency, developer happiness, stability เพื่อให้แน่ใจว่า developer ใช้งาน platform จริง และมันช่วยให้ชีวิต developer ง่ายขึ้น รวมถึงควรจะวัด adoption rate ของ platform ด้วย เช่น มีกี่ทีมที่ใช้ platform, ช่วยประหยัดเวลาไปได้เท่าไร และความสัมพันธ์ระหว่างทีมดีขึ้นแค่ไหน
ความแตกต่างระหว่างทีม DevOps และทีม Platform
บางคนอาจมองว่า platform engineering คือขั้นกว่าของ Dev(Sec)Ops หรือมองว่า platform คือ product ที่ทีม DevOps จะต้องสร้างขึ้นมา ผมเห็นด้วยทั้งหมดเลยครับ แต่ส่วนตัวผมนั้นจะพยายามอธิบายแยกกันเพื่อให้เห็นถึงแก่นของมันก่อน เพราะแม้ว่าทั้งสอง role จะมีพื้นที่ทับซ้อนระหว่างกันอยู่มาก แต่รายละเอียดในการทำงานจริงนั้นต่างกัน
ทุกวันนี้เราก็สับสนกับความทับซ้อนของตำแหน่งอย่าง cloud engineer, DevOps engineer หรือ site reliability engineer (SRE) กันอยู่แล้ว บางที่มีตำแหน่งนั้นแต่ขาดตำแหน่งนี้ บางครั้งหน้าที่เหมือนกันแต่ดันชื่อไม่เหมือนกัน ดังนั้นการคุยกันที่แก่นของ role น่าจะดีกว่า ส่วนการ adopt ก็เป็นเรื่องของบริบทที่ต่างกันไปในแต่ละองค์กร
ถ้าใครดูฟุตบอลจะรู้ว่าตำแหน่ง LB/RB (left back/right back) กับ LWB/RWB (left wing back/right wing back) นั้นมีความคล้ายคลึงกันอย่างมากในวิธีการเล่นและมีนักเตะหลายคนที่สามารถเล่นได้ทั้งสองตำแหน่ง แต่โดยแก่นแท้ของตำแหน่งนั้นมีความต่างกันในรายละเอียดอยู่
ทีม DevOps
มุ่งเน้นที่การปรับปรุงกระบวนการพัฒนา software โดยรวม ทำหน้าที่ปิดช่องว่างหรือทำลายกำแพงระหว่างทีม development และทีม operations เพื่อให้ developer สามารถส่งมอบ software ได้เร็วและมีคุณภาพมากขึ้น
ทีม DevOps จะดูแลกระบวนการทั้งหมดตั้งแต่การ build, test, deploy, monitor ไปจนถึงการ operate โดยจะใช้ทั้ง CI/CD pipeline, automation, infrastructure as code (IaC) หรือ container orchestrator เป็นต้น
ทีม Platform
มุ่งเน้นไปที่การสร้างและดูแล platform กลาง (หรือ platform API) ที่ใช้โดย developer ภายในองค์กร หรือก็คือ internal developer platform (IDP) โดย platform นี้จะรวบรวม tools, services หรือ infrastructure เอาไว้ให้ทั้งหมดแต่จะซ่อนความซับซ้อนเอาไว้ ทำให้ developer สามารถ interact กับ infrastructure ได้ด้วยตัวเอง ช่วยลด cognitive load ลง ทำให้ทีม developer ทำงานได้เต็มประสิทธิภาพมากขึ้น
ทีม platform จะออกแบบและพัฒนา platform โดยคำนึงถึงความต้องการของ developer เป็นหลัก เป้าหมายคือการสร้าง platform ที่ใช้งานง่าย, ปลอดภัย, มีความยืดหยุ่น, รองรับการ scale และสามารถ integrate กับ tools ต่าง ๆ ได้
โดยสรุป ทีม DevOps จะโฟกัสที่การสร้าง software delivery pipeline ให้ดีที่สุด ส่วนทีม platform จะโฟกัสที่การสร้าง platform (environment) ให้ developer สามารถทำงานได้อย่างราบรื่น และทั้งสองทีมจะต้องทำงานร่วมกันเพื่อให้ผลลัพธ์นั้นสำเร็จ เพราะเป้าหมายทั้งสองทีมนั้นเหมือนกัน นั่นคือการช่วย developer ให้ทำงานง่ายขึ้น
ยกตัวอย่างหน้าที่ของแต่ละทีม
ทีม Development:
- ออกแบบ software architecture
- รับผิดชอบในการพัฒนา features ใหม่ ๆ ของ application
- แก้ไข bug และปรับปรุงประสิทธิภาพการทำงานของ application
- ทำงานร่วมกับทีม QA ในการทดสอบ application
ทีม DevOps:
- สร้างและดูแลระบบ CI/CD เพื่อให้สามารถ build, test และ deploy application ได้อย่างราบลื่น
- Configure และดูแล infrastructure ต่าง ๆ เช่น Kubernetes cluster, load balancer, message queue และอื่น ๆ
- Monitor ทั้ง infrastructure และ application เพื่อให้มั่นใจว่ามี availability และ performance ที่ดี
- ช่วยทีม development ในการ troubleshoot ปัญหาต่าง ๆ ของ application
ทีม Platform:
- สร้าง internal developer platform (IDP) เพื่อให้ทีม developer สามารถ self-service ได้
- รวบรวม tool ต่าง ๆ ที่ใช้ในการ build, deploy หรือ monitor application เข้ามาไว้ใน IDP
- สร้าง template และ workflow สำหรับ deploy application ในรูปแบบต่าง ๆ ได้ง่ายขึ้น
- ช่วย configure policy ต่าง ๆ ร่วมกับทีม SecOps เพื่อให้มั่นใจว่าระบบมีความปลอดภัย
- รับ feedback จาก developer เพื่อนำมาปรับปรุง IDP อย่างต่อเนื่อง
บทสรุป (Conclusion)
นอกจาก DevOps แล้ว platform engineering ก็กำลังกลายเป็นแนวคิดที่สำคัญและเติบโตขึ้นเรื่อย ๆ เพราะช่วยแก้ปัญหาและอุปสรรคที่ทีม developer มักเจอ ทำให้ developer สามารถโฟกัสกับการส่งมอบ business value ได้อย่างเต็มที่
การมี platform จะเหมือนเป็น enabler ให้การทำ software delivery ในยุค cloud native เป็นไปได้อย่างราบรื่น, รวดเร็ว, และปลอดภัยมากขึ้น แม้จะมีเรื่องยุ่งยากมากมายเบื้องหลังก็ตาม แต่การนำ DevOps เข้ามาปรับใช้ก็ไม่จำเป็นต้องมีทีม platform engineering ด้วยเสมอไป องค์กรอาจทำ DevOps ได้โดยไม่ต้องมีการสร้าง self-service platform สำหรับ developer ก็ได้
และในบทความถัดไปผมจะลงรายละเอียดเกี่ยวกับ platform ซึ่งก็คือ product ที่ทีม platform engineering เป็นคนออกแบบ, สร้าง, และดูแล ซึ่งในที่นี้เราจะเรียกว่า internal developer platform (IDP)
หรือใครจะขยายความเพิ่มเติมในส่วนของ platform as a product ก็สามารถตามมาที่ link ได้เลยครับ