Upgrade to Pro — share decks privately, control downloads, hide ads and more …

リモート下における内部品質向上への取り組み

 リモート下における内部品質向上への取り組み

スタディサプリ/Quipper オンラインミートアップ #2

iOS チームではスタディサプリと新規プロダクト開発の2つのコードベースを管理しています。
5年以上続くスタディサプリは、現在ではほぼSwiftに移行されていますが一部Objective−Cも残る歴史の長いプロダクトです。
対して、新規開発はSwifUI+GraphQLをベースにベストな選択肢を探りながら開発しているプロダクトで、それぞれプロダクトの特性が大きく違います。
こうした状況の中、リモート下で担当プロダクトを横断した改善活動や継続的な品質向上への取り組みについて話します。

motoshima

July 27, 2021
Tweet

Other Decks in Technology

Transcript

  1. #sapurimeetup スタディサプリ/Quipper オンラインミートアップ #2 リモート下における 内部品質向上への取り組み Motonari NAKASHIMA @motoshima1150 スタディサプリ/Quipper

    オンラインミートアップ #2(iOSエンジニア)
  2. #sapurimeetup スタディサプリ/Quipper オンラインミートアップ #2 Agenda | 01 02 03 04

    自己紹介 プロダクト / iOS チームの紹介 品質向上への取り組み まとめ
  3. #sapurimeetup スタディサプリ/Quipper オンラインミートアップ #2 自己紹介 01

  4. #sapurimeetup スタディサプリ/Quipper オンラインミートアップ #2 ➔ iOS アプリエンジニア ➔ 2020年6月にQuipperに入社 ◆

    新規プロダクト開発 iOS担当 ◆ 小中高大学受験向けスタディサプリの一部運用を担当 @motoshima1150 / 中島元成
  5. #sapurimeetup スタディサプリ/Quipper オンラインミートアップ #2 期待値の調整 ➔ 話すこと 🗣 ◆ リモート下のiOSチームの働き方

    ◆ 内部品質向上への取り組みとして2つ紹介 • KAIZEN: iOSチーム内での改善活動 • Quality Budget: Native Engineerチーム(Android / iOS) での改善活動 • 2つの取り組みの共通点 ➔ 話さないこと 🙏 ◆ iOSの技術的なテクニックやTipsなど • 技術的な部分でお話したい場合は事後アンケートからカジュアル面談大歓迎です!
  6. #sapurimeetup スタディサプリ/Quipper オンラインミートアップ #2 プロダクト / iOS チームの紹介 02

  7. #sapurimeetup スタディサプリ/Quipper オンラインミートアップ #2 2つの iOS プロダクトについて ➔ スタディサプリ ◆

    小学生、中学生、高校生、大学受験生が対象の学習アプリ ◆ サービス全体では2020年度は150万人以上が利用 ➔ 新規プロダクト ◆ 学習系アプリ ◆ 未リリース(開発中)
  8. #sapurimeetup スタディサプリ/Quipper オンラインミートアップ #2 iOS チームについて ➔ Engineering Manager1名、メンバー7名 ◆

    主にスタディサプリを担当するエンハンスチーム: 2名 ◆ 主に新規プロダクト開発を担当するチーム: 5名 ◆ ご意見のピックアップやリリース作業は全員で持ち回り ➔ 全員がフルリモートによる勤務 ◆ iOS チームの Daily / Weekly の通話で状況を共有 ➔ チーム規模拡大中 ◆ 新規プロダクト開発チームのうち 4人はQuipper入社1年前後
  9. #sapurimeetup スタディサプリ/Quipper オンラインミートアップ #2 プロダクトとチームの関係性 小中高 iOS チーム スタディサプリ 2週に一度リリース

    開発期間:5年以上 コード量:114,207行 構成:MVP / UIKit / RESTful API 新規プロダクト 未リリース(開発中) 開発期間:1年半(完全新規開発) コード量:43,656行 構成:MVVM / SwiftUI / GraphQL EM
  10. #sapurimeetup スタディサプリ/Quipper オンラインミートアップ #2 品質向上への取り組み 03

  11. #sapurimeetup スタディサプリ/Quipper オンラインミートアップ #2 KAIZEN iOS チーム内での改善活動

  12. #sapurimeetup スタディサプリ/Quipper オンラインミートアップ #2 例えば… ➔ TableViewの  constraints warningを 修正する

    issue
  13. #sapurimeetup スタディサプリ/Quipper オンラインミートアップ #2 KAIZENの概要 ➔ 対象:スタディサプリ ➔ 方法:KAIZEN向けissueをペアで作業する ◆

    PdMがissueのストックを用意 ◆ 実際に着手するissueはペアで決める ➔ 頻度:週に1時間程度 ◆ 月に1度振り返りを行い、ペアの組み合わせをローテーション ➔ 実績:2020年9月から開始して 58 issuesをclose ◆ およそ1週間に一つ以上issueをcloseしている計算 ◆ ストックは 57 issues
  14. #sapurimeetup スタディサプリ/Quipper オンラインミートアップ #2 新規開発のチーム4名は入って1年が経ちますが、新規開発の比重が大きく現行 のスタディサプリのコードにほぼ触れる機会がありませんでした。 規模の大きい現行のスタディサプリのサポートやリリース業務・サービス全体のド メイン知識は社内で必要なスキルです。 そのため、着手し、調べ、知ることも進捗として捉えています。 KAIZENで意識していること

    ドメイン知識の伝承 / コードベースの改善
  15. #sapurimeetup スタディサプリ/Quipper オンラインミートアップ #2 KAIZENで得られた体験 ➔ スタディサプリ担当と新規プロダクト担当の組み合わせで、教わりやすい ◆ 環境やユーザーデータ周りのノウハウの継承 ◆

    普段の開発フローを経験できる ◆ 関係各所を知ることができる ➔ Sprintに入れづらいissueの消化 ◆ テストケースの追記、Warningの除去、リファクタリング ➔ 過去のissueの呼び起こし ◆ 限定的な条件のため優先度が低い issueなどを消化するきっかけ ◆ 中には Apr 9, 2019 (約2年前)のissueも
  16. #sapurimeetup スタディサプリ/Quipper オンラインミートアップ #2 Quality Budget Native Engineerチーム (Android /

    iOS) での改善活動
  17. #sapurimeetup スタディサプリ/Quipper オンラインミートアップ #2 QBは既にQuipperに文化として存在していました。 新規プロダクトチームで取り入れるきっかけとなったのは、同新規プロダクトの Webチームを追従してNative Engineerチームでも取り入れました。 業務の15%を品質改善に充てる経緯から 頻度を2週間に1日(おおよそ10%)としています。

    Quality Budget (以降 QB) とは 定期的に品質改善の時間を確保すること
  18. #sapurimeetup スタディサプリ/Quipper オンラインミートアップ #2 Quality Budget の流れ 木曜日 金曜日 Check-in

    一同に集まって着手したい issueを宣言する場 Check-out 一同に集まって着手したissueの 成果を発表する場 17:00 16:00 良い週末を👋
  19. #sapurimeetup スタディサプリ/Quipper オンラインミートアップ #2 例えば… ➔ [iOS] TestFlightの配信で自動でBranch/Issue/PR番号を更新する ➔ [iOS]

    ログを端末(実機・シミュレーター)で確認できるようにする ➔ [iOS] Xcode 12.5 対応 ➔ [iOS] SPM をキャッシュする
  20. #sapurimeetup スタディサプリ/Quipper オンラインミートアップ #2 ➔ 対象:新規プロダクト ➔ 方法:Check-inで翌日対応するissueを宣言、Check-outで結果を共有 ◆ Check-inは30分程度、Check−outは振り返りも含めて45分程度

    ◆ 参加は任意、Android / iOS 合同で開催 ◆ QB中は基本的にはSprintのissueは着手しません ◆ QB用のissueは、普段から気にかかっていることを issue化しています ➔ 頻度:隔週に1日 ◆ 木曜日の17時からCheck-in、金曜日の16時にCheck-outを行います ➔ 実績:2020年10月から開始して 108 issuesをclose ◆ およそ1回あたり6 issueをcloseしている計算 ◆ ストックは 43 issues Quality Budget の概要
  21. #sapurimeetup スタディサプリ/Quipper オンラインミートアップ #2 ➔ 開発を進めながら、業務効率化を進めることができる ◆ 要件ではないが動作確認の際に役に立つもの • デバッグメニューでの環境切り替えなど

    • CI機能の充実 ➔ 実装方針の軌道修正がしやすい ◆ SwiftUIでの実装において、試行錯誤の部分や OSのバージョンアップなどで方針を 変えることがあった ◆ 新規実装部分と既存実装部分で実装方法に乖離が生まれても、 QBの期間で実装 の統一を図ることができた ➔ 週終わりの区切り、達成感がある ◆ issueを消化し区切りを作ることで、業務自体にもメリハリがつく(感想) Quality Budget で得られた体験
  22. #sapurimeetup スタディサプリ/Quipper オンラインミートアップ #2 まとめ 04

  23. #sapurimeetup スタディサプリ/Quipper オンラインミートアップ #2 まとめ(2つの改善活動の共通点) ➔ 改善活動の時間を先に確保しておくこと ◆ それぞれ別のプロダクトが改善に当てる時間を Product

    Managerと相談して確保している ◆ 特にスタディサプリでは定期的に issueを見ているため程よい関与を得られている ◆ Quipperの文化として負債解消への理解がある ➔ 漸進的な変更と相性がいいこと ◆ 新規開発を止めずに、新しい方針を既存の画面へ反映する機会ができる ◆ 限られた時間で対応できない issueも、細分化し次に着手しやすいように状況を記す ➔ ちょっと違う視点があると気づきを得やすいこと ◆ 別のプロダクト担当者同士で組む(同じ iOSだが、普段のプロダクトが違う) ◆ Android, iOS合同で行う(同じプロダクトを見ているが、コードが違う) ◆ 普段気に留めていない部分の 新たな手法や見落としなどが見つかり良い体験 につながっている
  24. #sapurimeetup スタディサプリ/Quipper オンラインミートアップ #2 チームごとに取れる選択肢に違いがあると思います。 今日紹介した方法がすべてのチームで合うわけではありませんが、どこか一つで も良さそうなところや持ち帰れるところがありましたら幸いです。 また、私達もより良い方法を探っておりますので、取り組みなどをご共有いただけ ますと嬉しいです。 最後に

  25. #sapurimeetup スタディサプリ/Quipper オンラインミートアップ #2

  26. #sapurimeetup スタディサプリ/Quipper オンラインミートアップ #2 ご清聴ありがとうございました