Slide 1

Slide 1 text

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

Slide 2

Slide 2 text

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

Slide 3

Slide 3 text

#sapurimeetup スタディサプリ/Quipper オンラインミートアップ #2 自己紹介 01

Slide 4

Slide 4 text

#sapurimeetup スタディサプリ/Quipper オンラインミートアップ #2 ➔ iOS アプリエンジニア ➔ 2020年6月にQuipperに入社 ◆ 新規プロダクト開発 iOS担当 ◆ 小中高大学受験向けスタディサプリの一部運用を担当 @motoshima1150 / 中島元成

Slide 5

Slide 5 text

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

Slide 6

Slide 6 text

#sapurimeetup スタディサプリ/Quipper オンラインミートアップ #2 プロダクト / iOS チームの紹介 02

Slide 7

Slide 7 text

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

Slide 8

Slide 8 text

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

Slide 9

Slide 9 text

#sapurimeetup スタディサプリ/Quipper オンラインミートアップ #2 プロダクトとチームの関係性 小中高 iOS チーム スタディサプリ 2週に一度リリース 開発期間:5年以上 コード量:114,207行 構成:MVP / UIKit / RESTful API 新規プロダクト 未リリース(開発中) 開発期間:1年半(完全新規開発) コード量:43,656行 構成:MVVM / SwiftUI / GraphQL EM

Slide 10

Slide 10 text

#sapurimeetup スタディサプリ/Quipper オンラインミートアップ #2 品質向上への取り組み 03

Slide 11

Slide 11 text

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

Slide 12

Slide 12 text

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

Slide 13

Slide 13 text

#sapurimeetup スタディサプリ/Quipper オンラインミートアップ #2 KAIZENの概要 ➔ 対象:スタディサプリ ➔ 方法:KAIZEN向けissueをペアで作業する ◆ PdMがissueのストックを用意 ◆ 実際に着手するissueはペアで決める ➔ 頻度:週に1時間程度 ◆ 月に1度振り返りを行い、ペアの組み合わせをローテーション ➔ 実績:2020年9月から開始して 58 issuesをclose ◆ およそ1週間に一つ以上issueをcloseしている計算 ◆ ストックは 57 issues

Slide 14

Slide 14 text

#sapurimeetup スタディサプリ/Quipper オンラインミートアップ #2 新規開発のチーム4名は入って1年が経ちますが、新規開発の比重が大きく現行 のスタディサプリのコードにほぼ触れる機会がありませんでした。 規模の大きい現行のスタディサプリのサポートやリリース業務・サービス全体のド メイン知識は社内で必要なスキルです。 そのため、着手し、調べ、知ることも進捗として捉えています。 KAIZENで意識していること ドメイン知識の伝承 / コードベースの改善

Slide 15

Slide 15 text

#sapurimeetup スタディサプリ/Quipper オンラインミートアップ #2 KAIZENで得られた体験 ➔ スタディサプリ担当と新規プロダクト担当の組み合わせで、教わりやすい ◆ 環境やユーザーデータ周りのノウハウの継承 ◆ 普段の開発フローを経験できる ◆ 関係各所を知ることができる ➔ Sprintに入れづらいissueの消化 ◆ テストケースの追記、Warningの除去、リファクタリング ➔ 過去のissueの呼び起こし ◆ 限定的な条件のため優先度が低い issueなどを消化するきっかけ ◆ 中には Apr 9, 2019 (約2年前)のissueも

Slide 16

Slide 16 text

#sapurimeetup スタディサプリ/Quipper オンラインミートアップ #2 Quality Budget Native Engineerチーム (Android / iOS) での改善活動

Slide 17

Slide 17 text

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

Slide 18

Slide 18 text

#sapurimeetup スタディサプリ/Quipper オンラインミートアップ #2 Quality Budget の流れ 木曜日 金曜日 Check-in 一同に集まって着手したい issueを宣言する場 Check-out 一同に集まって着手したissueの 成果を発表する場 17:00 16:00 良い週末を👋

Slide 19

Slide 19 text

#sapurimeetup スタディサプリ/Quipper オンラインミートアップ #2 例えば… ➔ [iOS] TestFlightの配信で自動でBranch/Issue/PR番号を更新する ➔ [iOS] ログを端末(実機・シミュレーター)で確認できるようにする ➔ [iOS] Xcode 12.5 対応 ➔ [iOS] SPM をキャッシュする

Slide 20

Slide 20 text

#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 の概要

Slide 21

Slide 21 text

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

Slide 22

Slide 22 text

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

Slide 23

Slide 23 text

#sapurimeetup スタディサプリ/Quipper オンラインミートアップ #2 まとめ(2つの改善活動の共通点) ➔ 改善活動の時間を先に確保しておくこと ◆ それぞれ別のプロダクトが改善に当てる時間を Product Managerと相談して確保している ◆ 特にスタディサプリでは定期的に issueを見ているため程よい関与を得られている ◆ Quipperの文化として負債解消への理解がある ➔ 漸進的な変更と相性がいいこと ◆ 新規開発を止めずに、新しい方針を既存の画面へ反映する機会ができる ◆ 限られた時間で対応できない issueも、細分化し次に着手しやすいように状況を記す ➔ ちょっと違う視点があると気づきを得やすいこと ◆ 別のプロダクト担当者同士で組む(同じ iOSだが、普段のプロダクトが違う) ◆ Android, iOS合同で行う(同じプロダクトを見ているが、コードが違う) ◆ 普段気に留めていない部分の 新たな手法や見落としなどが見つかり良い体験 につながっている

Slide 24

Slide 24 text

#sapurimeetup スタディサプリ/Quipper オンラインミートアップ #2 チームごとに取れる選択肢に違いがあると思います。 今日紹介した方法がすべてのチームで合うわけではありませんが、どこか一つで も良さそうなところや持ち帰れるところがありましたら幸いです。 また、私達もより良い方法を探っておりますので、取り組みなどをご共有いただけ ますと嬉しいです。 最後に

Slide 25

Slide 25 text

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

Slide 26

Slide 26 text

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