Duolingo เป็นแอปเรียนภาษาที่ได้รับความนิยมมากที่สุดในโลก เพราะสามารถเปลี่ยนสิ่งที่ผู้คนเคยรู้สึกว่ายากในอดีตให้กลายเป็นเรื่องง่ายและสนุกสนาน ประสบการณ์การใช้งานภาษาที่ลื่นไหลนี้ต้องมีฟีเจอร์และการทดลองใหม่ๆ อย่างต่อเนื่อง รวมถึงแอปที่ทำงานได้อย่างราบรื่นซึ่งสามารถนำเสนอสิ่งเหล่านี้ได้ทั้งหมด สำหรับ Duolingo แล้ว แอปที่ไม่ตอบสนองในอุปกรณ์ที่ใดก็ได้ในโลกอาจหมายถึงผู้เรียนที่อาจท้อแท้ ซึ่งช่วยให้ทีมมุ่งมั่นที่จะพัฒนาแอปให้ยอดเยี่ยม โดยเฉพาะอย่างยิ่งในอุปกรณ์ Android ที่ผู้เรียน 60% ใช้ รวมถึง CEO ของบริษัทที่ติดตามแอปจากโทรศัพท์รุ่นเริ่มต้น ดังนั้น เมื่อทีมพัฒนา Android ของ Duolingo สังเกตเห็นข้อผิดพลาด "แอปไม่ตอบสนอง" เฟรมหลุด และแม้กระทั่งได้รับคำร้องเรียนที่เขียนด้วยลายมือ ทีมก็ดำเนินการทันที
ในไม่ช้าพวกเขาก็พบแหล่งที่มาของปัญหาด้านประสิทธิภาพของแอป นั่นคือสถาปัตยกรรมซอฟต์แวร์ที่มีอยู่ไม่สามารถปรับขนาดให้สอดคล้องกับการเติบโตของทีมได้ การอัปเดตที่จำเป็นทำให้ประสิทธิภาพของแอปถดถอยลงอย่างมาก นักพัฒนาแอปจึงต้องใช้เวลามากขึ้นในการแก้ไขข้อบกพร่อง และมีเวลาน้อยลงในการเปิดตัวฟีเจอร์ใหม่ๆ ที่สร้างรายได้ สถาปัตยกรรมซอฟต์แวร์ที่ล้าสมัยเริ่มกลายเป็นอุปสรรคที่ยอมรับไม่ได้สำหรับบริษัท ความเร็วของทีม และที่สำคัญที่สุดคือประสบการณ์ของผู้ใช้ โดยต้องสร้างฐานโค้ดใหม่ตั้งแต่ต้น
วิธีที่พวกเขาทำ
ในช่วงแรก ทีมงานมีความคิดเห็นที่แตกต่างกัน ตอนนี้ควรให้ความสำคัญกับเรื่องนี้เป็นอันดับแรกไหม กลุ่มหนึ่งรู้สึกว่าการเปิดตัวฟีเจอร์ใหม่ๆ และการเพิ่มรายได้มีความสำคัญมากกว่า ในขณะที่อีกกลุ่มเชื่อว่าการมุ่งเน้นไปที่การรีบูต Android คือหนทางที่จะก้าวไปข้างหน้า ในที่สุดทีมก็เห็นพ้องต้องกันว่าการต่อสู้กับการถดถอยที่เพิ่มขึ้นอาจทำให้แผนงานทั้งหมดของทีมต้องหยุดชะงัก พวกเขาต้องทุ่มสุดตัว
ทีมจึงเลือกใช้โซลูชันที่ได้รับความนิยมมากขึ้นเรื่อยๆ จึงตัดสินใจเขียนแอปใหม่โดยใช้ Model-View-ViewModel ซึ่งเป็นรูปแบบซอฟต์แวร์ที่ Google รองรับซึ่งช่วยให้นักพัฒนาซอฟต์แวร์ปรับปรุงสถาปัตยกรรมของแอปได้ด้วยการแยกความกังวลอย่างชัดเจน ด้วย MVVM นักพัฒนาแอปสามารถแยกการพัฒนาอินเทอร์เฟซผู้ใช้แบบกราฟิก (มุมมอง) ออกจากการพัฒนาตรรกะทางธุรกิจ (โมเดล) ได้ ซึ่งจะช่วยสร้างรูปแบบที่ชัดเจนและตกลงร่วมกัน ทำให้ทั้งการปรับแนวทางให้สอดคล้องกับฟีเจอร์ใหม่ๆ และการเตรียมความพร้อมนักพัฒนาซอฟต์แวร์ใหม่ๆ เป็นเรื่องง่ายขึ้น
การแบ่งแต่ละฟีเจอร์ออกเป็นโมดูลของตัวเองช่วยให้ทีมกลับมาทำงานได้อย่างมีประสิทธิภาพอีกครั้งอย่างรวดเร็ว เนื่องจากสามารถมอบหมายให้กลุ่มเล็กๆ ทำงานกับแต่ละฟีเจอร์แบบคู่ขนานได้ ซึ่งจะช่วยเพิ่มความเร็วในขณะที่ลดข้อผิดพลาด
โดยได้ใช้สถาปัตยกรรมใหม่นี้กับไลบรารีจาก Jetpack ของ Android ซึ่งรวมถึง Dagger และ Hilt เพื่อช่วยเขียนโค้ดที่ทำงานได้อย่างสอดคล้องกันใน Android เวอร์ชันต่างๆ และอุปกรณ์ต่างๆ การเพิ่ม 2 รายการนี้ช่วยให้ทีมสร้างฟีเจอร์ที่ห่อหุ้มได้ดีขึ้นและใช้โมดูลในตัวของ Android ได้อย่างมีประสิทธิภาพมากขึ้น
ผลลัพธ์
การปรับปรุงประสิทธิภาพเหล่านี้ช่วยปรับปรุงประสบการณ์ของผู้เรียนบน Android และโดยเฉพาะอย่างยิ่งในอุปกรณ์ระดับเริ่มต้นได้อย่างมาก นอกจากนี้ยังช่วยให้แอปตอบสนองได้ดียิ่งขึ้นและมีภาพเคลื่อนไหวที่ราบรื่นมากขึ้นในอุปกรณ์รุ่นเรือธง อัตรา "แอปไม่ตอบสนอง" หรือ ANR รายวันลดลง 41% เปอร์เซ็นต์ของเวลาที่แอปมีอัตราเฟรมต่ำกว่าอัตราเฟรมเป้าหมายลดลง 28% ที่สำคัญที่สุดคือผู้ใช้ได้รับประสบการณ์ความเร็วที่เพิ่มขึ้น 40% เมื่อเลื่อนผ่านหน้าจอหลัก
มือถือถือโน้ตที่ระบุว่า ANR ลดลง 41%, อัตราเฟรมดีขึ้น 28% และประสบการณ์การใช้งานเร็วขึ้น 40%
การยกเครื่องทั้งหมดใช้เวลา 8 สัปดาห์ และทำให้แอปน่าสนใจและน่าใช้สำหรับผู้เรียน Duolingo ทุกคนมากขึ้นอย่างมาก ในช่วง 6 เดือนที่ผ่านมา ทีมไม่พบการถดถอยของประสิทธิภาพใหม่ๆ ที่สำคัญ ทำให้ทีมกลับมามุ่งเน้นที่การจัดส่งฟีเจอร์ที่สร้างรายได้ได้อีกครั้ง การตัดสินใจมุ่งเน้นความพยายามของทีมไปที่คุณภาพได้ผลลัพธ์ที่คุ้มค่า
ความมุ่งมั่นของ Duolingo ในการทำตามพันธกิจทำให้แอปนี้กลายเป็นแอปยอดนิยมอันดับ 1 ของโลกในด้านการเรียนภาษา ความมุ่งมั่นในการสร้างแอปที่ยอดเยี่ยม ซึ่งก็คือการสร้างประสบการณ์ด้านการศึกษาที่ล้ำสมัยโดยไม่กระทบต่อการเข้าถึง เป็นสิ่งที่ทำให้พวกเขาอยู่ตรงนี้
เริ่มต้นใช้งาน
หากต้องการเจาะลึกรายละเอียดเกี่ยวกับวิธีที่ Duolingo ผสานรวมไลบรารีของ Jetpack และวิธีที่ Model-View-ViewModel ปรับปรุงแอปของตน โปรดอ่านกรณีศึกษาทางเทคนิคสำหรับนักพัฒนาซอฟต์แวร์