AbemaTV Developer Conference 2016

76
炎上プロジェクトの立て直しの風景 2016.10.15 AbemaTV Developer Conference

Transcript of AbemaTV Developer Conference 2016

Page 1: AbemaTV Developer Conference 2016

炎上プロジェクトの立て直しの風景2016.10.15 AbemaTV Developer Conference

Page 2: AbemaTV Developer Conference 2016

@yasitashiki

● 板敷 康洋 (Yasuhiro ITASHIKI)

● フリーランスのエンジニア兼開発コンサルタントとして、プロジェクト立ち上げや立て直

しの手伝いなど

● 2013年、(株)サイバーエージェントにサーバサイドエンジニアとして入社

● 現在は、エンジニアリングマネジメントをメイン

● AbemaTVでは、開局前の障害対策/負荷対策を担当

自己紹介

Page 3: AbemaTV Developer Conference 2016

今日話すこと

Page 4: AbemaTV Developer Conference 2016

炎上プロジェクト立て直しの事例を紹介していくのですが、

Page 5: AbemaTV Developer Conference 2016

AbemaTVの話はありません!

Page 6: AbemaTV Developer Conference 2016

AbemaTVはあまり炎上してないですから。

Page 7: AbemaTV Developer Conference 2016

では何を話すのか

Page 8: AbemaTV Developer Conference 2016

過去経験した炎上プロジェクトの中から、

よくある業務系のSIer案件ではなく、

Web業界の炎上事例を主に紹介したいと思います。

Page 9: AbemaTV Developer Conference 2016

Web業界の開発は自社内で完結することが多い分、

業務系のように契約等がはっきりしておらず、

柔軟な反面、あいまいな部分が炎上に結びつくケースがあります。

Page 10: AbemaTV Developer Conference 2016

風景その1

Page 11: AbemaTV Developer Conference 2016

権力者の厄介な介入がある風景

Page 12: AbemaTV Developer Conference 2016

それは突然の依頼でした。

Page 13: AbemaTV Developer Conference 2016

● 現在開発中の某ソーシャルゲーム

● 開発中の成果物を確認したところ、iOS/Android間で仕様が違う。

● また、αバージョンでリリース予定の機能も違う。

○ iOSのみβリリース予定の機能が搭載されている、逆にαリリース予定の機能

が入っていない

● 状況整理し、軌道修正を手伝ってほしい。

依頼(初期情報)

Page 14: AbemaTV Developer Conference 2016

なんで仕様にずれが生じているのか調べた。

Page 15: AbemaTV Developer Conference 2016

普段の開発風景

プロデューサ

iOSエンジニアAndroidエンジニア

開発チーム

チーフプロデューサ

Page 16: AbemaTV Developer Conference 2016

普段の開発風景

プロデューサ

iOSエンジニアAndroidエンジニア

普段は介入してこない。複数PJかけもち。

開発チーム

過去ヒット作を産みだしてしており、社内権力者。

チーフプロデューサ

Page 17: AbemaTV Developer Conference 2016

普段の開発風景

プロデューサ

iOSエンジニアAndroidエンジニア

普段は介入してこない。複数PJかけもち。

開発チーム

仕様はプロデューサが決める。 チーフプロデューサ

過去ヒット作を産みだしてしており、社内権力者。

Page 18: AbemaTV Developer Conference 2016

普段の開発風景

プロデューサ

iOSエンジニアAndroidエンジニア

仕様の共有

普段は介入してこない。複数PJかけもち。

開発チーム

仕様はプロデューサが決める。

仕様の共有

チーフプロデューサ

過去ヒット作を産みだしてしており、社内権力者。

Page 19: AbemaTV Developer Conference 2016

普段の開発風景

プロデューサ

iOSエンジニアAndroidエンジニア

仕様の共有

普段は介入してこない。複数PJかけもち。

開発チーム

仕様はプロデューサが決める。

仕様の共有

仕様のずれなし

普段は仕様の決定、情報共有が一元化されており問題ない。

チーフプロデューサ

過去ヒット作を産みだしてしており、社内権力者。

Page 20: AbemaTV Developer Conference 2016

チーフプロデューサ

チーフプロデューサが介入してくる風景

プロデューサ

iOSエンジニアAndroidエンジニア

開発チーム

Page 21: AbemaTV Developer Conference 2016

チーフプロデューサ

チーフプロデューサが介入してくる風景

プロデューサ

iOSエンジニアAndroidエンジニア

開発チーム

(不定期で成果物を確認)

ほほぅ、今こんな感じで作ってるのか

Page 22: AbemaTV Developer Conference 2016

チーフプロデューサ

プロデューサ

iOSエンジニアAndroidエンジニア

開発チーム

サクッと修正して。

成果物を見たチーフから

エンジニアに直接修正指示。

(しかもiOSのみ…)

チーフプロデューサが介入してくる風景

Page 23: AbemaTV Developer Conference 2016

チーフプロデューサ

プロデューサ

iOSエンジニアAndroidエンジニア

開発チーム

サクッと修正して。

成果物を見たチーフから

エンジニアに直接修正指示。

(しかもiOSのみ…)

了解いたしました!

チーフプロデューサが介入してくる風景

Page 24: AbemaTV Developer Conference 2016

チーフプロデューサ

プロデューサ

iOSエンジニアAndroidエンジニア

開発チーム

サクッと修正して。

成果物を見たチーフから

エンジニアに直接修正指示。

(しかもiOSのみ…)

了解いたしました!

プロデューサは把握していない

チーフプロデューサが介入してくる風景

Page 25: AbemaTV Developer Conference 2016

チーフプロデューサ

プロデューサ

iOSエンジニアAndroidエンジニア

開発チーム

サクッと修正して。

成果物を見たチーフから

エンジニアに直接修正指示。

(しかもiOSのみ…)

了解いたしました!

プロデューサは把握していない

共有漏れ

仕様ズレ

チーフプロデューサが介入してくる風景

Page 26: AbemaTV Developer Conference 2016

やったこと

● 仕様決定、伝達フローの整備

● 定期的な成果物レビュー会の実施

Page 27: AbemaTV Developer Conference 2016

仕様決定、伝達フローの整備

● 仕様はプロデューサとチーフプロデューサの間で決定する。

● 開発チームの窓口はプロデューサとする。

チーフプロデューサ

プロデューサ

iOSエンジニアAndroidエンジニア

開発チーム

Page 28: AbemaTV Developer Conference 2016

仕様決定、伝達フローの整備

● 仕様はプロデューサとチーフプロデューサの間で決定する。

● 開発チームの窓口はプロデューサとする。

● 全ての仕様、修正依頼はプロデューサからエンジニアへ。

チーフプロデューサ

プロデューサ

iOSエンジニアAndroidエンジニア

仕様の共有

開発チーム

仕様の共有

仕様のずれなし

● 仕様決定、集約場所が明確に

● エンジニアへの情報伝達フローを一本化

Page 29: AbemaTV Developer Conference 2016

定期的な成果物レビュー会の実施

● 定期的にチーフプロデューサとエンジニアが直接対話する機会を設けた。

○ チーフプロデューサの微妙なニュアンスがエンジニアに届くようにする。

○ プロデューサも同席することでその場で仕様変更の決定を行えるようにする。

チーフプロデューサ

プロデューサ

iOSエンジニアAndroidエンジニア

微妙なニュアンスを直接伝える

定期レビュー会

Page 30: AbemaTV Developer Conference 2016

定期的な成果物レビュー会の実施

● 定期的にチーフプロデューサとエンジニアが直接対話する機会を設けた。

○ チーフプロデューサの微妙なニュアンスがエンジニアに届くようにする。

○ プロデューサも同席することでその場で仕様変更の決定を行えるようにする。

チーフプロデューサ

プロデューサ

iOSエンジニアAndroidエンジニア

同時に聞くことで認識のずれなし

微妙なニュアンスを直接伝える

その場で仕様変更決定

定期レビュー会

Page 31: AbemaTV Developer Conference 2016

定期的な成果物レビュー会の実施

● 定期的にチーフプロデューサとエンジニアが直接対話する機会を設けた。

○ チーフプロデューサの微妙なニュアンスがエンジニアに届くようにする。

○ プロデューサも同席することでその場で仕様変更の決定を行えるようにする。

チーフプロデューサ

プロデューサ

iOSエンジニアAndroidエンジニア

同時に聞くことで認識のずれなし

微妙なニュアンスを直接伝える

その場で仕様変更決定

チーフプロデューサ介入の場を意図的に作ることで、介入の影響を局所化した。

定期レビュー会

Page 32: AbemaTV Developer Conference 2016

学んだこと

● 意思決定、情報の集約は一元化しよう○ 複数箇所で行うのは混乱のもと。意思決定者が複数いる場合、最終決定は

同じ場で行うことが望ましい。

○ また決定した内容の情報集約も一元化し、どこに最新の情報があるか分かる

状態にする。

● 権力者とはうまく付き合おう○ 介入が避けられない場合、影響を局所化する、限定的にするなど仕組みで

解決する。

Page 33: AbemaTV Developer Conference 2016

風景その2

Page 34: AbemaTV Developer Conference 2016

要件がいつの間にか進化する風景

Page 35: AbemaTV Developer Conference 2016

それは突然の依頼でした。

Page 36: AbemaTV Developer Conference 2016

● 某アパレルチェーンの在庫管理システム

● ウォーターフォールで進めているが、詳細設計で大幅に遅れている。

● 状況整理し、立て直し案を提出してほしい。

● ちなみにチェーンの10周年に合わせるのでリリースタイミングは絶対動か

せない。

依頼(初期情報)

Page 37: AbemaTV Developer Conference 2016

自分:「在庫管理システムの設計が遅れていると伺ったのですが」

クライアントとの初回やりとり

Page 38: AbemaTV Developer Conference 2016

自分:「在庫管理システムの設計が遅れていると伺ったのですが」

クライアントとの初回やりとり

クライアント:「えーと、在庫と連動したレコメンドサービス、ですね」

Page 39: AbemaTV Developer Conference 2016

自分:「在庫管理システムの設計が遅れていると伺ったのですが」

クライアントとの初回やりとり

クライアント:「えーと、在庫と連動したレコメンドサービス、ですね」

自分:「レコメンドサービス?(聞いてたのと違うな・・・)」

Page 40: AbemaTV Developer Conference 2016

お客様 店員

在庫問合せする

基本的なユースケース

Page 41: AbemaTV Developer Conference 2016

店員

在庫問合せする

店員

対象商品の在庫、同種類の色違い在庫、近隣他店の

在庫情報を手元の端末で表示して見せる。

基本的なユースケース

お客様

お客様

Page 42: AbemaTV Developer Conference 2016

店員

在庫問合せする

店員

対象商品の在庫、同種類の色違い在庫、近隣他店の

在庫情報を手元の端末で表示して見せる。

お客様 店員

対象商品の在庫がある場合、他在庫と組み合わせた、

「トータルコーディネート」一式を提示。

基本的なユースケース

お客様

お客様

Page 43: AbemaTV Developer Conference 2016

店舗にある在庫を組み合わせたレコメンドとは珍しいサービスだなと思いヒアリングを続けていると・・・

Page 44: AbemaTV Developer Conference 2016

クライアント

お客様から在庫の問い合わせが来たら、その場で迅速に回答したい。

対象商品の在庫に加え、色違い在庫、近隣他店の在庫情報も回答したい。

要件進化の過程

この時点で見積もり終わり開発スタート。

Page 45: AbemaTV Developer Conference 2016

クライアント

クライアント

お客様から在庫の問い合わせが来たら、その場で迅速に回答したい。

対象商品の在庫に加え、色違い在庫、近隣他店の在庫情報も回答したい。

手元の端末に商品の詳細な画像も表示されるなら、お客様に見てもらえばより購

入に結びつくかも!

要件進化の過程

エンドユーザ向けにデザイン刷新が決定!

この時点で見積もり終わり開発スタート。

Page 46: AbemaTV Developer Conference 2016

クライアント

クライアント

お客様から在庫の問い合わせが来たら、その場で迅速に回答したい。

対象商品の在庫に加え、色違い在庫、近隣他店の在庫情報も回答したい。

手元の端末に商品の詳細な画像も表示されるなら、お客様に見てもらえばより購

入に結びつくかも!

店舗の在庫情報が全部わかるのであれば、在庫だけで組み合わせた

「旬のおすすめコーディネート」をセットで提案したい!

クライアント

要件進化の過程

エンドユーザ向けにデザイン刷新が決定!

在庫連動したレコメンドサービスの開発が決定!

この時点で見積もり終わり開発スタート。

Page 47: AbemaTV Developer Conference 2016

「これは・・・スコープクリープなんて甘いもんじゃなくて仕様の進化・・・ッ」

Page 48: AbemaTV Developer Conference 2016

やったこと

● プロジェクトゴールの再設定

○ 本来の目的である在庫管理に注力。レコメンドは第二期開発とすることにし

た。

○ 本来の目的「お客様からの在庫問合せに迅速に回答する」

● やらないことの停止。第二期開発への引き継ぎ。

○ 幸い在庫、レコメンドシステムともいい設計で、戻りはほぼ発生しなかった。

○ レコメンドの設計は区切りのいい段階までやりきり、第二期開発用に引き継

ぎ資料として残した。

Page 49: AbemaTV Developer Conference 2016

学んだこと

● このプロジェクトで何を解決したいのか?目的を常に考えよう○ 仕様が少しずつ追加される状態は危険なフラグ

● 目的が変わるようであれば仕切り直し or 別プロジェクトとし、

スコープを明確にしよう。○ 途中で出てきたアイデアが良いものであればあるほど、クライアントはそこを

ゴールとみなし、それ以下のアウトプットには物足りなさを感じてしまう。

Page 50: AbemaTV Developer Conference 2016

風景その3

Page 51: AbemaTV Developer Conference 2016

大規模プロモ直前なのに

システムが落ちまくってる風景

Page 52: AbemaTV Developer Conference 2016

それは突然の依頼でした。

Page 53: AbemaTV Developer Conference 2016

● 某SNSサービスで、2ヶ月後の年末年始に大規模プロモーションをやること

が決まった(CMなど)

● システムキャパが心配である。今も高負荷で頻繁にダウンしている。

● プロモーションに耐えられるよう、100万同時接続にまでキャパを上げてほ

しい。

○ 当時のキャパは1.5万同時接続程度だった

● ちなみに、CMはもう決まったのでスケジュールは絶対守らなければならな

い。

依頼(初期情報)

Page 54: AbemaTV Developer Conference 2016

● 指示されたゴールは「100万同時接続」

● 社内的な注目度も高く、「今何万同時接続ですか?」と日々色

んな人に聞かれていた・・・(;´Д`)

Page 55: AbemaTV Developer Conference 2016

100万同時接続を目指して調査するうち、次の2つのことが新たに判明した。

Page 56: AbemaTV Developer Conference 2016

● 耐障害性、可用性に大きな問題がある

○ 会員登録に関わる外部サービス障害時のバックアップがない

○ 特定機能の障害に引きずられて全体がダウンする

新たに判明した2つのこと

Page 57: AbemaTV Developer Conference 2016

● 耐障害性、可用性に大きな問題がある

○ 会員登録に関わる外部サービス障害時のバックアップがない

○ 特定機能の障害に引きずられて全体がダウンする

● プロモが大成功しても100万同時接続は行きそうにない

○ アクセス傾向とCM計画(ユーザ増予測)を検証した結果、最大でも30万

同時接続程度と推定された。

新たに判明した2つのこと

Page 58: AbemaTV Developer Conference 2016

やったこと

● プロジェクトゴールの再設定

○ 「100万同時接続」→「耐障害性、可用性、性能性とも、プロモーション

に耐えるのに必要な状態にする」

■ 同時接続数は30万目標

■ 耐障害性、可用性で問題ある部分の解消

● ゴール再設定に伴うプロジェクトスコープの再定

Page 59: AbemaTV Developer Conference 2016

性能性

耐障害性、可用性

必要要件(〜30万同接)

過剰要件(30万同接〜)

必要要件 過剰要件

プロジェクト開始時のゴール

Page 60: AbemaTV Developer Conference 2016

性能性

耐障害性、可用性

プロジェクト開始時のゴール

100万同時接続

過剰要件(30万同接〜)

必要要件(〜30万同接)

必要要件 過剰要件

Page 61: AbemaTV Developer Conference 2016

性能性

耐障害性、可用性

スコープ再定義後のゴール

同時接続数は30万目標に訂正。

浮いたリソースで、耐障害性、可用性で

問題ある部分の解消にあてた。

過剰要件(30万同接〜)

必要要件(〜30万同接)

必要要件 過剰要件

Page 62: AbemaTV Developer Conference 2016

学んだこと

● あらかじめゴールが設定されている場合、まずはそのゴール

が最適かの確認をしよう○ 局所的な問題にとらわれず、全体を俯瞰して満たすべき要件を見極める

● 炎上している時ほど、やることとやらないことの線引を明確に

しよう○ 周囲(社内など)がいくら盛り上がっていても現場だけは冷静でいることを心が

ける

Page 63: AbemaTV Developer Conference 2016

まとめ

Page 64: AbemaTV Developer Conference 2016

● 権力者の厄介な介入がある風景 ○ 役割分担(責任範囲)を明確にする ○ 権力者とはうまく付き合う。介入の影響を局所化、限定的にする

3つの事例で学んだことまとめ

Page 65: AbemaTV Developer Conference 2016

● 権力者の厄介な介入がある風景 ○ 役割分担(責任範囲)を明確にする ○ 権力者とはうまく付き合う。介入の影響を局所化、限定的にする

● 要件がいつの間にか進化する風景 ○ プロジェクトのゴールを明確にし、それにそった要件であるか常に意識する ○ ゴールが変わる場合は別プロジェクトとし、スコープを明確にする

3つの事例で学んだことまとめ

Page 66: AbemaTV Developer Conference 2016

● 権力者の厄介な介入がある風景 ○ 役割分担(責任範囲)を明確にする ○ 権力者とはうまく付き合う。介入の影響を局所化、限定的にする

● 要件がいつの間にか進化する風景 ○ プロジェクトのゴールを明確にし、それにそった要件であるか常に意識する ○ ゴールが変わる場合は別プロジェクトとし、スコープを明確にする

● 大規模プロモ直前なのにシステムが落ちまくってる風景 ○ 具体的なゴールが設定されている場合でも、そのゴールが最適かの確認を改めて

する ○ 炎上している時ほど、やることとやらないことの線引を明確にする

3つの事例で学んだことまとめ

Page 67: AbemaTV Developer Conference 2016

よくある炎上パターンは他にも

● 組織的要因 ○ 主に人間関係などが原因でチーム崩壊 など

● 技術的要因 ○ 実現できなかった、品質が上がりきらなかった など

Page 68: AbemaTV Developer Conference 2016

色々見てきた中で特に最悪な状態は、

○ ゴールがブレる、終わりが見えない

○ チームワークが崩壊

のどちらかかなと思います。

Page 69: AbemaTV Developer Conference 2016

逆に言えば、

○ ゴールが明確で日々進捗がわかる

○ チームワークがいい

という状態であれば、

Page 70: AbemaTV Developer Conference 2016

炎上

Page 71: AbemaTV Developer Conference 2016

炎上ある意味

Page 72: AbemaTV Developer Conference 2016

炎上 祭りある意味

Page 73: AbemaTV Developer Conference 2016

そういう意味では、

Page 74: AbemaTV Developer Conference 2016

AbemaTVの開局前もある意味祭りでした!

※個人の感想です

Page 75: AbemaTV Developer Conference 2016

今回の発表が炎上プロジェクトの

防止、火消しに役立てば幸いです。

Page 76: AbemaTV Developer Conference 2016

ご清聴ありがとうございました。