合同会社DMM.com イノベーション本部オンラインサロン事業部
価値提供スピードを上げるための技術的負債への向き合い方 https://dmm.connpass.com/event/284374/
© DMM開発者体験から見える技術的負債オンラインサロン事業部 澤 道人
View Slide
© DMM自己紹介2015年入社2021年08月からオンラインサロン事業部にエンジニアとして参画趣味:走ったり、山に登ったり2澤 道人
© DMM今日お話しすること• 技術的負債って?• 実例紹介(どのような機能か)• 開発を進める上でどんな課題があるか?• なぜこの構成になってる?• 開発はどうやって対応してる?• 今後どうしていきたいか• まとめ3
© DMM技術的負債って?4● コード負債● 設計負債● テスト負債● 要件負債...etc開発プロセスの中で生じた課題に対して簡単な(限定的な)解決策を選択した結果生み出されるもの今回は開発を進めている中で良くないな、効率悪いなと感じる部分を実例を見ながらご紹介します。時間がかかるより良いアプローチを使用する代わりに、今すぐ簡単な(限定的な)解決策を選択することで生じる追加の手直しの暗黙のコストを反映したものである(引用元: wikipedia)
© DMM実例紹介(どのような機能か)5オンラインサロン開きたいんです!運営スタッフどのようなサロンかをユーザーに伝えて、入会してもらうためのページを作成してみましょう。管理画面から入力してみたけど実際のユーザーにはどのように見えるんですか?管理画面から入会ページのプレビューを見ることができます。プレビュー機能をご利用ください。実際の入会ページ運営スタッフPC SPサロンオーナーサロンオーナー
© DMM 入会画面に変更が加わると都度、管理画面に取り込む必要性がある 取り込みの手間、処理の変更 開発者体験の悪化 コード管理が分割されているが、 オーナー管理画面からユーザーが利用する入会画面をプレビューとして閲覧してもらいたい。開発を進める上でどんな課題があるか?6前提として、コード管理( gitのリポジトリ)が分割されています。● オーナーが利用する管理画面● ユーザーが利用する入会画面変更内容ユーザーが利用する入会画面の変更 オーナーが利用する管理画面に取り込み取り込み時に処理を変更(元データの取得など)HTML/CSS/JS/画像 HTML/CSS/JS/画像取り込み忘れがち...
© DMMなぜこの構成になってるのか?7開発当時のエンジニアは異動、または退職済みのため分からない。。。● リリースに向けて時間がなかった● 入会画面に更新が入ると思っていなかった● コード取り込みなんて簡単だ もしかしたら他に何か理由があったのかもしれない。 分からないことに悩んでも時間が過ぎるだけなので意味はなさそう。
© DMM1. 取り込み漏れを発生させないために、タスクのテンプレートに以下のチェックを入れている以下の観点で影響範囲調査を実施したかプレビュー修正要否(入会画面変更時、サロン詳細変更時)2. 対象画面に変更があった場合はタスクにプレビュー修正タスクを追加例え入会ページに関係ないタスクでもプレビューのことを一瞬考えなくてはいけない。。。 タスク作成時の体験悪化現在はどうやって対応してる?8● 入会ページの変更があるたびにオーナー管理画面のプレビュー機能に変更を取り込む● 急ぎの変更が入会画面にあると取り込み漏れが発生することもあるこの課題に向き合うためにやってること
© DMM 少し考えただけでプレビュー機能という単純な言葉の裏にこれだけの要件が出てくる。 開発当初もさまざま検討した結果、現在の解決策を取るしかなかったのかもしれない … 課題の大枠は見えてきたので少しずつ課題を潰して、効率的に開発を進めていきたい。 コードを取り込むのではなく、オーナー管理画面から入会ページを直接参照する仕組みにする? コードの2重管理はなくなりそうだが、他の課題が見つかりそう。今後どうしていきたいか9● 管理画面へのコード取り込みをやめたい○ コードの2重管理の廃止○ 取り込み漏れ発生の抑制○ タスク作成時の影響調査の廃止● 複数の異なるオーナーがいるので他のオーナーのプレビューは見せてはいけない● ユーザーに作りかけのプレビューページを見られたくない(検索エンジンにも)● あくまでプレビューだけで入会ボタンやリンクはクリックできないようにしたい● PC/スマホのプレビューを1画面で切り替えたい
© DMM 技術的負債を残したいエンジニアはいない 要件を決めるときに課題を洗い出そう 限定的な解決策を選ぶと後に響くことはよくあるし、開発者体験を悪化させる● コードを2重管理したいと思っているエンジニアはいない● コードの2重管理は開発者体験を悪化させる(対応コスト、影響範囲の確認...etc)● 要件は単純な言葉でも当たり前の要件が隠れている● 当たり前の要件が課題になって簡単な(限定的な)解決策を選択した可能性があるまとめ10