エンジニアが責任を持つHowの正体

おおつかです.twitterは@moguaiyukiでやってます.

「エンジニアが責任をもつHow」とはなんなのか,ずっと引っかかっていたので,久々にnote書きます.

プロダクトはWhatなのか,それともHowなのか.プロダクトに対してエンジニアがどうか関われば良いのかを疑問に持っていたので,一旦自分なりに整理したいと思います.

PMがWhatとWhy,開発チームがHowに責任をもつ

PM(プロダクトマネージャー)はWhatとWhyに責任を持ち,開発チームはHowに責任を持つという話はよく聞いたことがあります.

ただ,このWhatやWhy, Howが実際に何を指しているのかよく分かっていませんでした.

Whatがプロダクト,Howは実装という勘違い

自分はこれまで,Whatをプロダクトの仕様,HowはWhatのコードレベルの実装だと思ってました.

自分の認識の例をあげるなら, 

【PMの仕事】
「紙をおいてボタンを押したら,画像を認識して,適切な場所に印鑑を押すロボット」(What)を提供する.
なぜなら,「顧客が人の手による押印作業に時間を取られている/自動化したい」(Why)からだ.
【開発チームの仕事】
「そのロボットを実装するための画像認識アルゴリズムの選定,オブジェクトの設計」(How)をする.

のようなものだと思っていました.

この時,すでにロボットを作るということが決まった状態で開発チームに要求がくるため,開発チームはその制約の中で,画像認識のよりよい実装手段を考えます.

つまり,自分の関心毎は,Howを実施すること=機能(What)をアウトプットすることとなっていました.

Howを実施すること=課題を解決すること

さまざまな本を読んでるうちに,Whatは顧客の何を解決するかという課題であり,Whyはなぜその課題を解決したいのかという理由,そしてHowはその課題の解決する機能の実現方法なのかなと認識を改めました.

つまり先ほどの印鑑ロボットの話の例は,

【PMの仕事】
「承認フローに時間とコストがかかり,ビジネスにおけるスピードが失われている」(What)という課題を解決する.
なぜなら,「ハンコを押して承認するというフローにより,印紙を買ったり,紙で郵送したり,ファイルで管理したりしなければならない」(Why)からだ.
【開発チームの仕事】
「暗号化通信やファイルの暗号化,本人確認技術によりクラウドで完結する」(How)ソフトウェアを提供する.

このように変わります.

これは開発者にとっては,ロボット×画像認識で自動で押印するという方法もあるが,PMの言うWhyを考慮すると,クラウドで実現させた方がよいという選択の余地が与えられていることを意味します.

「レガシーコードからの脱却」や「INSPIRED」では以下のように述べられています.

【レガシーコードからの脱却】
目的とやり方を繋ぐのは,やり方についてよく知っているソフトウェア開発者だけ
【INSPIRED】
現在では,機能がテクノロジーを決めるのと同じくらい,テクノロジーが機能を決めている(実現していること)を私たちは知っている.

この場合の開発チームの関心毎はHowを実施すること=顧客の課題を解決するということになります.

結果として,開発チームは機能というアウトプットではなく,顧客の課題を解決したかというアウトカムを重要視できるようになるのかなと思います.

プロダクトはHowでもWhatでもない

ここまできてようやく,プロダクトとはHowでもWhatでもWhyでもなく,それらの情報を合わせて作りあげるものなのかと気付きました(遅い)

つまりプロダクトに対して,PMはWhatとWhy,開発チームはHowについて情報追加を行い,共同で作っていくのかなと.

自分が犯してきた過ち

自分は実装というHowに責任を持つ(コードのバグは自分の責任)と考えていたため,仕様に関して具体的に決まっていなかった場合(どの権限の人がこのボタンを押したらどうなる?やフラッシュメッセージの文言どうするなど)よくPMに戻していました.

一つの機能に対して,要求仕様差し戻しサイクルを素早く回すという謎な俊敏さを発揮していました.アジャイル でもなんでもない.

これはユーザーに詳しいPMが仕様を決めるのが良いと思っていたからですが,よく考えるとやり方に詳しいのはエンジニアなので,仕様に対して双方からユーザーの情報とその実現手段に関する情報を追加していかなければならなかったのかなと.

PMからWhatやWhy, Whoの情報を引き出し,Howの提案に責任を持つことで,仕様が確定し,より素早くユーザーに求めれられるものを作れたのかなと思います.

つまりプロダクト(仕様)を決めるのはPMでも開発チームでもなく,両方がそれぞれの責任を果たした結果出力されるものなのかな.


この記事が気に入ったらサポートをしてみませんか?