「ソフトウェア開発」と「プロダクト開発」は違う
執筆をしていて、時々迷うことがある。
「ソフトウェア開発」と書くべきか、「プロダクト開発」と書くべきか。
手元の行為としては同じでも、この2つの言葉の間には隔たりがある。
何げなく使っている言葉であっても、突き詰めて捉えていくと違いに気づくことができる。言葉を丸めたまま扱うと、それ以上理解が深まることはない。大事なテーマであるほど、使う言葉に気を払うようにしたい。「ソフトウェア開発」と「プロダクト開発」この言葉の違いを、置いている「目的」から捉えてみよう。
ソフトウェア開発の目的とは、ソフトウェアを作ることにある。ソフトウェア開発と称して「作らない」ということは稀だろう。どのようにソフトウェアを作るか、という観点に焦点があたりやすい。ときとして、ソフトウェア作りそのものが「こだわり」へと昇華していく。
一方、プロダクト開発の目的とは、プロダクトを利用してもらうことにある。プロダクトを提供し、そこで何らかの価値を見出していけるかが焦点になる。提供のためにたいていはやはり(ソフトウェアを)作ることになるため、開発自体が上手くいかなければ話にならない。
このように目的の置き方に濃淡が生まれやすい。もちろん、ソフトウェア開発でも使う側のことを想定して作るものだ(そういう観点を持つことを開発者には期待したい)。プロダクト開発も作ることはどうでも良いとかそんな極端な話にはならない。地と図の関係のように、目的の置き方で重きが異なりやすいということだ。
こうした違いが、言葉の背負ってきた歴史も踏まえるとより強まってくる。日本におけるソフトウェア開発は、業務システムなどエンタープライズ向けの開発で成長してきたところがある。いわゆる受託開発の文脈が大勢を占めてきた時代があったわけだ。
業務システムの受託開発では、要件定義で必要なものを決めてから作る。業務上必要なものを見定めて、ソフトウェア作りを進めていくため考慮すべき前提や制約も多い。開発は「作る側」が担うところが大きく、「ソフトウェア」という言葉は「作る側」の言葉として育まれてきたところがある。
一方、プロダクト開発は目的に立ち返ると「利用価値があるかどうか」を念頭に置く必要がある。ゆえに、「プロダクト」という言葉は、「作る側」と「使う側」の両者の共有の言葉としてそもそも成り立っている。
以上を踏まえると、「経験深いソフトウェア開発者を集めたのに、プロダクト開発がうまくいかない(期待されたリリースまで辿り着かない)」という問題が起きるのも合点が行く。「プロダクト作り」でありながら、「ソフトウェア作り」に固執するとコミットメントの対象が噛み合っておらず、ちぐはぐになる。
ソフトウェア開発とプロダクト開発では、その目的からそもそもの世界観が異なっており、やろうとしていることとメンタリティがずれていると、まず成果にたどり着けない。
ソフトウェア開発は 「作る」から始まり、その後「使う」を迎える。 プロダクト開発は逆に 「使う」から始まり、「作る」に本腰を入れていく。
プロダクト開発は、まず想定する利用者にとっての価値探索から始める。どんな課題やニーズがあるのかを仮説立て、検証する活動が先立つ。この仮説検証のためにプロトタイプを「作る」こともあれば、早期にMVPを「作る」こともある。ここで言う「作る」は、ソフトウェア作りにおける「作る」とは違う。
プロダクト開発において最初の「作る」はあくまで「使ってみる」「試してもらう」ためであり、その開発量や準備は最小限に抑える。「作る」こと自体が主眼ではない。検証のために「作る」。検証結果でもって、方向性の確からしさを獲得していく。その上で「作る」ことになる(場合によって最初に作ったものは用を成さないと判断し、ゴミ箱に捨てることも十分ある)。
それゆえ、プロダクト開発は継続していくほどに「作る」における負債が溜まりやすい。宿命と言える。
どちらが良いとか悪いとか、勿論そんな話ではなく、何をしようとしているかによって、必要なチーム、組織が異なるということだ。プロダクト組織を目指しながら、漠然とソフトウェア開発組織を作っているとしたら、一向に思い描く姿にはならない。