Android Developer Meetup 1.0 สิ่งที่น่าสนใจ และแกะเทปมาให้อ่าน
สรุปสิ่งที่น่าสนใจจากงาน
- Testing ของ Grab มีการทำ testing โดยให้ QA เขียน test case ที่เดปจะต้องเทสให้ผ่านก่อนที่จะส่งมายัง QA เพื่อเทสอีกที จากนั้นจะมีทีม Security ตรวจสอบก่อนดันขึ้น Internal Test ซึ่งมี A/B testing และมีการ release เฉพาะ region เพื่อทดสอบก่อน ถ้าไม่ stable ก็จะใช้ฟีเจอร์เก่าก่อน
- วิธีแก้ปัญหา Buildtime ใช้เวลานาน
- แบ่ง module
- พยายามไม่ใช้พวก Generated Build Time เช่น Dagger
- ลดการใช้ Library บางตัว เช่น Roboelectric หรือ Mockito โดยอาจจะทำ mock มือแทน
- Remote build ไปเครื่องอื่นแล้วค่อยส่งกลับมา
Speaker :
1. K.Watcharin Sripongpunkul (Senior Software Engineer) @ Grab
2. K.Verachad Wongsawangtham (Lead Mobile Developer) @ Fastwork Tech.
3. K.Jirachai Hongthong (Android Developer) @BAY (Krungsri Consumer) แอพ U-Choose
Question : Architecturee ที่ใช้เพื่อรองรับ Scalable และมีการวางรูปแบบการทำงานยังไงบ้าง
Answer:
Fastwork : มีการแบ่งทีมตาม platform ทำ kotlin multiplatform MVVM ผสมกับ State management โดยดึงเอาคอนเซปของ Redux มาใช้ร่วมด้วย
Grab : แบ่งเป็นทีมย่อย แยกเป็นโมดูล Core หลักใช้ Node Architecture เช่นจะใช้ view ไหนก็ attach/detach เวลาทำงาน cross ทีมจะมี agreement ให้ไปทางเดียวกันก่อน
BAY : แบ่งทีมตาม feature ใช้ clean architecture มีส่วน View (ใช้ MVP) Domain (Usecase) Data เน้นการ reuse
Question : ทำไมถึงใช้ Cross-platform และข้อดี-ข้อเสีย
Fastwork : ข้อจำกัดของ timeline marketing ต้องเสร็จภายใน 4 เดือนทั้ง iOS และ Android ซึ่งจากประสบการณ์ของทีมใช้ Kotlin อยู่แล้วจึงเลือกใช้ Flutter จึงทำให้การ Deliver เร็วมากขึ้น และคุณภาพงานที่ได้มาก็เหมาะสม
ข้อดี : ใช้ Lib เดียวก็ซัพพอร์ดทั้งสองแพลตฟอร์ม
ความรู้ใหม่ๆ
ข้อเสีย : มีความ Challenge ทางด้านเทคนิค
สำหรับ 3rd Party อาจจะต้องดิบเอง
Grab : ข้อจำกัดทางด้าน UX จึงใช้ Native เขียนเพื่อให้ User ได้รับประสบการณ์การใช้งานที่เหมาะสมกับแพลตฟอร์มนั้นๆ
ข้อดี : มีความน่าสนใจ
ข้อเสีย : UX/Performance อาจจะไม่ได้ตอบโจทย์เท่าที่ควร (ในเวลานี้)
BAY : ต้องการพัฒนาแอพในระยะยาว จึงเลือกใช้ Native ซึ่ง Support มากกว่า
ข้อดี : อาจจะเหมาะกับบาง Requirement
คำถามเพิ่มเติมจาก Grab ถึง Fastwork : มองว่า Flutter/Cross-platforn อนาคตเป็นยังไง
Fastwork : ดูจาก Market share, สกิลของคนในทีม ในอนาคตมองว่าสามารถไปต่อได้ 70–80% เพราะยังคงตอบโจทย์สำหรับคนบางกลุ่มอยู่
Question : ประสบการณ์ Tech Issue ที่อยากเล่า
Grab : ส่วนใหญ่พบปัญหาจาก Build time ใช้เวลานานมาก สามารถลดเวลาได้ด้วยการแบ่ง Module พยายามไม่ใช้พวก Generated Build Time เช่น Dagger (อื้อหือออ)
ลดการใช้ Library บางตัว เช่น Roboelectric หรือ Mockito
Remote build ไปที่เครื่องอื่นแทน
Fastwork คำถามเพิ่มเติม : ถ้าเอา Mockito ออกจะทำยังไง
Grab ตอบ : อาจจะ Mock มือ (ยังไม่ได้ตัดสินใจกันในทีม)
BAY เสริม : ตัวที่ gen sub-component มาก็ทำให้ Build นาน ใช้ Build Parellel ก็สามารถช่วยได้
Fastwork : เจอปัญหา Build time เช่นกัน เจอตอนประกอบร่าง Project ขึ้นมา อีกปัญหาคือ Framework บางตัวที่ใช้แล้วแต่ละแพลตฟอร์มไม่เหมือนกัน เช่น Coroutine ฝั่ง iOS เป็น Single-thread ก็ต้องเลือกว่าจะใช้ lazy load หรือยังไงดี
Question : ขั้นตอนการ Deploy แอพเป็นยังไงบ้าง
BAY : กดใน jenkins พราะมี pipeline อยู่แล้ว สามารถเลือกได้ว่าจะขึ้น PlayStore หรือขึ้น Alpha ก่อน
Grab : เมื่อมีการ release feature นึงจะมี QA ตรวจสอบก่อน โดยก่อนที่จะส่งไปให้เทสได้นั้น QA จะลิสต์ test case ให้เดปทำการเทสก่อนที่จะส่งไปหา QA จากนั้นก็จะเข้า internal test ต่อ
Fastwork : jenkins
Question : ปัญหาเกี่ยวกับ Security issue สามารถรับมือและจัดการได้อย่างไร
Fastwork : ยังไม่เคยเจอปัญหาจริงจัง ปกติใช้ Proguard ในแอพอยู่แล้ว ที่เคยเจอคือหลุดมาจาก Backend ก็จะคุย root cause กันยกเว้น Critical issue จริงๆก็จะแก้ไขเฉพาะหน้าเพื่อให้ใช้งานได้ก่อน จากนั้นค่อยมาหา root cause อีกที
Grab : ยังไม่เคยเจอแบบร้ายแรงขนาดนั้น เพราะจะมีทีม Security ตรวจสอบให้ก่อน จากนั้นก็เข้า QA -> internal test ซึ่งมี A/B testing และมีการเลือกเฉพาะ region ที่จะปล่อยเพื่อทดสอบก่อน ถ้าไม่เวิร์คก็จะใช้ฟีเจอร์เก่าแทนก่อน
BAY : มีการตรวจสอบเครื่องก่อนว่า rooted รึเปล่า และมีการเพิ่ม Encryption ฝั่ง Backend ส่วนที่เคยเจอคือล่าสุด Biometric ตรวจสอบลายนิ้วมือ
Question : มีวิธีการเลือกคนเข้าทำงานอย่างไร
Fastwork : ดูจากความต้องการของทีม ภาพรวมงาน cost และ roadmap โปรเจค เบื้องต้นคือต้องมีความรู้ของ platform นั้นๆเยอะ ต้องเปิดใจสำหรับ cross-platform ไม่ senior เกินและไม่ junior เกิน
Grab : ดูว่าทีมขาดอะไร ถ้าเป็น Senior จะมีความคาดหวังบ้าง ต้อง Self-management ในตัวเอง สามารถตัดสินใจได้ว่าอะไรสำคัญ ส่วน junior ก็ขอให้มี Willing to learn ก็ใช้ได้
BAY : ดูจากประสบการณ์ ทัศนคติ การสื่อสาร เน้นการทำงานเป็นทีม Self-management
Question : บริษัทขนาดใหญ่จำเป็นต้องมี Core team หรือไม่ และคุยกับฝั่ง Biz ยังไงให้มี value
Grab : มี core team เป็นอิทธิพลหลัก มี policy/RFC และใช้เหตุผลมาเพื่อเจรจากับ PM
BAY : ไม่เชิงว่าเป็น Core team เพราะมีการแบ่งทีมเพื่อไปจัดการแยกกัน ส่วนเรื่องการคุยนั้น ให้คุยดีๆ
Question : Grab เคยทำของตรงกลางซ้ำกันมั้ย ในการทำงานของแต่ละทีม ทำงานยังไง
Grab : จะมี PM คุยให้ระหว่างทีม ว่าแต่ละทีมทำอะไร ให้อะไรกับอีกทีม โค้ดซ้ำมี แต่ว่ามีการ review อยู่ ถ้าเจอก็จะแก้ไขเลย
Question : มีข้อตกลงอะไรในการทำงานเพื่อไม่ให้ conflict กัน
Grab : ใช้ Git …..
Fastwork : ขึ้นอยู่กับว่า feature ชัดเจนขนาดไหน ถ้ามีการคาบเกี่ยวเชื่อมโยงกันมากๆแสดงว่ายัง break down กันไม่ถูก
Question : ปัญหาบน Production เมื่อใช้ Flutter
Fastwork : ปัญหาภาษาไทย ถ้า iOS ก่อน v9 สระภาษาไทยจะซ้อนทับกันขึ้นไปเมื่อลบ
Question : รูปแบบการทำงานระหว่างประเทศไทยกับต่างประเทศ ต่างกันยังไง
Fastwork : ความหลากหลายของบุคลิก ต่างประเทศมีความจริงจังในการทำงานมาก ซึ่งต่างจากคนไทย และยังมีเรื่องการสื่อสาร การเลือกใช้ภาษาให้ถูกต้องเพื่อคุยกับต่างชาติ
Grab : ที่ SG จริงจังกับการทำงานมาก ต่างจากคนไทยที่มีการคุยเล่นกันบ้าง
ขอลาไปด้วยภาพ