Android Developer Meetup 1.0 สิ่งที่น่าสนใจ และแกะเทปมาให้อ่าน

Paranee Apiromsanee
Android Developer Meetup TH
3 min readDec 24, 2019

สรุปสิ่งที่น่าสนใจจากงาน

  • Testing ของ Grab มีการทำ testing โดยให้ QA เขียน test case ที่เดปจะต้องเทสให้ผ่านก่อนที่จะส่งมายัง QA เพื่อเทสอีกที จากนั้นจะมีทีม Security ตรวจสอบก่อนดันขึ้น Internal Test ซึ่งมี A/B testing และมีการ release เฉพาะ region เพื่อทดสอบก่อน ถ้าไม่ stable ก็จะใช้ฟีเจอร์เก่าก่อน
  • วิธีแก้ปัญหา Buildtime ใช้เวลานาน
  1. แบ่ง module
  2. พยายามไม่ใช้พวก Generated Build Time เช่น Dagger
  3. ลดการใช้ Library บางตัว เช่น Roboelectric หรือ Mockito โดยอาจจะทำ mock มือแทน
  4. 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 จริงจังกับการทำงานมาก ต่างจากคนไทยที่มีการคุยเล่นกันบ้าง

ขอลาไปด้วยภาพ

นะคะ

--

--