製造とは何か。
ソフトウェアを開発しているときに前提となるPJT管理方法や会計の考え方の多くが「製造」を前提としています。
よく「製造とソフトウェア開発」「エンジニアは工場で働く製造とは違う」という話がありますが、そもそも製造というものに対する理解はどの程度あるのでしょうか・・・?
あまり踏み込んだ議論はしませんが、そもそも製造ってなんだっけ?ソフトウェア開発と何が違うんだっけ?を明らかにしてみようかと思います。
製造が前提としているもの=大量生産
多くの生産管理や会計の考え方が大量生産を前提としています。例えば、プラスチックのコップを作る工場を考えてみましょう。100円均一で売ってそうな奴。
工場での工程は大なり小なり似ていて、①要件分析②設計・計画③段取り④製造(量産)⑤検品⑥出荷という感じです。イメージがわくようにもう少し具体的に見てみましょう。
まず、①どんな形のコップにするか・価格はいくらにするか・どのくらい作るか・・・などを決めます。その上で②金型や生産計画や作業工程を設計します。③実際に工員を雇ったり金型を機械に設置したりして、④ざーっとラインを流して量産、⑤不良品をはじいて⑥出荷という感じです。
量産するときは、例えば1万個とか10万個とかの製品がざーっとラインを流れて、倉庫に製品が積みあがるわけですね。
ここでポイントは、同じものが10万個できるってところです。ちなみに、設計を間違うと使えないコップが10万個できて泣きます。
ソフトウェア開発で開発しているもの=製造工程
旧来、と言っても100年たってないですが、生産管理をソフトウェア開発に適用してきました。ソフトウェアを作るのと製造が似ていると思われていたからですね。しかし、本当に似ているのでしょうか?
ソフトウェア開発はいくつかの点で製造とは異なっています。
アウトプットが毎回違う
量産をすると10万個同じものが出てきます。しかし、ソフトウェア開発はどうでしょうか?同じプログラムのコードを10万回作っているのでしょうか?そういうわけではないですね。製造は、10万個の同じ製品がアウトプットされますが、ソフトウェア開発は毎回違うものをアウトプットしています。
価値を提供しているのは人ではなくソフトウェアやシステム自体
大量生産を前提とした製造を考えるとき、価値は製造してできた製品にあります。100円のコップは100円で売れます。プラスチックを人の手でコップに変えることで価値が生まれます。
一方で、自社サービスを提供している場合、ユーザが払う対価はユーザが受けたサービスに対して支払われます。この場合、サービスを提供しているのはもちろんマネーフォワードだったらマネーフォワードなのですが、具体的にサービスを淡々と提供し続けているのはサーバやシステムやソフトウェアです。ユーザが入力した情報をもとに、付加価値を提供し続けます。
ソフトウェア開発は、工場の製造工程自体を作る作業と言ってもよいかもしれません。
ソフトウェアで忘れられがちなこと: 売れる商品を作る
なぜ、ソフトウェア開発は遅れ、思ったものが完成せず、売り上げが上がらないのでしょうか。思ったものをゼロベースで期日通り作ることはものすごく困難で、人類史上そんなことできたのかなというのは割と疑問です。
あらゆる製造において、多品種少量生産は少品種大量生産に比べてコストがかかります。
家電を作るときどうするか
大手メーカーの人と話すると、大抵の製品は企画から出荷まで2年程度かかるといいます。最近は小ロット生産が可能になってきているので、販売価格を無視すれば1年くらいでもできるかもしれません。
実際、何が起きているのか見てみましょう。
まず2万個くらい売れないと困る。ただし途中での変更は困難。
3万円の製品だと2万個売れても6億円なので、結構しょっぱいです。ここに部品を提供する人たちは、たとえば1パーツ高くて300円とか1000円とかなので、だんだん厳しくなってきますね・・・・ので、何をするにしてもまずはボリュームありきです。じゃないと、あっというまに赤字。
しかも、途中で何かに気づいて設計変更をしたとしましょう。回路変更一発300万円、部品の形状が変わろうものなら全工程にわたる変更で数千万円・・・・なんてこともなくはない話です。
工程が変わると、歩留まりも変わり、それがまたコストにはねて・・・・悪夢ですね・・・
実際、ソフトウェア開発でも人件費を考えたらそのくらいかかってたりするんですが、大抵会計管理がざっくりしているのでほとんどの場合「スケジュールの遅れ」くらいにしか認知されません。
リスクを下げるための長い工程
思いついたからいきなりプロダクションに突っ込む・・・・なんて愚かなことはしません。前項の通り、いちいち気分でリリースしているとあっという間に1億10憶とかかってしまうので、ちゃんと手順を踏みます。
詳細は、元cerevo、shiftallのCEO岩佐さんがながーいブログ書いているのでそちらをご覧いただくとして、ざっくり言うと製品ができるまでの工程はだいたい下記です。相当リスク取って、部品の先行発注とかも工夫したうえで、最短1年、普通は1.5年、安全圏は2年とかでしょうか・・・・
- 企画、基本的な市場調査、インタビューとか(1~2か月)
- PoC開発(3~6カ月)
- 企画の練り直しやPoC継続(3か月~6カ月)
- まだこの時点でProductionの話にすらなってない(苦笑)
- EVT。量産に向けて、全要件がミートするかを検証する設計作業(3か月~5カ月)
- DVT。量産に向けて、量産向けの設計・検証をする(3か月~5カ月)
- PVT。量産ができるかどうか全工程を検証する。(2か月)
- 量産(1か月?ものと量による)
前半1年くらいがほとんど企画に関するところで、後半1年以上が製造にかかわる部分ですが、Productionが動き出すまで延々と設計検証してます。なんでこうするかというと、前述の通りでカジュアルに失敗していると永遠に黒字プロジェクトにならないからですね・・・・
もちろん、ソフトは違うだろって言われたらその通りです。高速PoCをproduction環境で行いやすいのがソフトの良いところです。しかし、それで利益は最大化されるのでしょうか?
まず売れる商品を特定しなければならない
リーン開発、アジャイル、スクラム・・・・こうしたものの陰で忘れがちな基本ですが、まずは売れる商品を特定しなければなりません。そして、むやみやたらと新しい商品を増やしてはいけません。それらはすべてコストだからです。
プロダクトを増やす場合は、最低限度、投じるコスト・経営への寄与・オペレーションの設計が含まれているべきです。逆に、これを検討するコストがもったいないくらいの小粒な企画はそもそも落としてもよい気すらします。
カジュアルな変更は、新しい売れるプロダクトを作ることにフォーカスされるべきです。ダメだったらさっくり閉じましょう。高速にPoCをして売れる商品を特定し、大量製造に回してガッと利益を上げる。この2つのプロセスをうまく回す工程が必要です。
製造工程、価値提供の工程の改善にこそソフトウェア開発が充てられるべき
家電で一番簡単に儲ける方法は、儲かる製品を特定し、売れる限り量産ラインを流し続けることです。ソフトウェアではどうでしょうか。
基本は家電でもソフトウェアでも同じです。さらにすごいことに、ソフトの良いところは電気を与え続ければ永遠に価値提供が続くところです。利益の最大化を考えるのであれば、ソフトウェア開発は、この製造ライン=価値提供のプロセスそのものに充てられるべきです。
PoC部隊と製造最適化部隊は明確に分けてもいいかもしれない
PoCは言ってみれば使い捨てです。外注でもなんでも使ってさっくり商品を特定することこそが肝です。
一方で、製造最適化は利益の根源です。自社のノウハウがここに詰まっているといっても過言ではないでしょう。価値を提供するプロセスを技術的に改善していく研究開発をしていくべき部分でもあります。
まとめ
この投稿では、大量生産を前提としたこれまでの生産管理の概要を説明したうえで、ソフトウェア開発における相違点・共通点をざっくり説明しました。
また、見出した共通点から、売れる製品を特定することの重要性と、製造工程・価値提供プロセスの改善にエンジニアリソースをフォーカスすることの重要性を説明しました。
うっかりすると、ウォーターフォールの良しあしやら、アジャイルの流派なりに議論が集中しがちですが、一度基本に立ち返って製造というものについて思いをはせてみることは、きっと役に立つのかなと思いました。