見出し画像

経営者のためのAI & CS講座 1:システム開発になんでそんなに時間とお金がかかるの?

AI&CS講座にしては、いきなり何の話?と思うかもしれませんが、自分でプログラムをバリバリ書けない経営者の皆さんが常日頃思ってるだろう最大の疑問に関して、僕なりの意見を書こうと思います。多くのCTOのみなさんを敵に回すかもしれませんが、日本のため、仕方なしで、思うままに書いてみます。当然ながら全ての会社に当てはまる訳でなく、僕が思うより遥かに開発スピードが早い会社も多々あると思いますのでご了承を。

経営会議で、こんなシステムを作りたい!と決まって、開発責任者に、「開発期間どれくらいかかる?必要な予算は?」と聞くと、「え〜〜〜〜そんなに!!!」となった経験がある方は多いのではないでしょうか?または、ちょっと動いてるシステムの仕様を変更したくなって、同様に開発期間と予算はと聞いて、「え〜〜〜〜そんなに!!! 嘘でしょ!」という経験をした方も多いはず。僕の会社でも、ちょっとした仕様変更の際、開発者から平気で「1ヶ月かかる」と言われることがあります。「おい!そりゃないだろ。これこれこうやって、ああやって、あーすれば、1時間で終わるはず。長くても1日!」と激詰めすると、本当に数時間で終わることがあります。もちろん動いてるシステムが綺麗に書かれてないと始まらないのですが、いいプログラマーが作ったシステムであれば、ちょっとした仕様変更は、ほぼ確実に数時間で終わるものが多いです(テスト時間は除く。テスト規模はシステムの規模次第なのでとりあえず一旦話題から外します)。僕の会社は、僕もプログラマー経験長いし、それなりにいいプログラマだった(多分)ので、かなりいいコード書いてたし、悪いコードもたっぷり見てきたので、どんな変更がどんな感じか大体予想ができるので、プログラマーやれプロジェクトマネージャやれがつく嘘に対して、強く反論できます。しかし、プログラミング経験がない、または少ない経営者は、開発責任者がいう「数名で数ヶ月かかります」に反論できないですよね。

こういう勿体無い(コストも時間も機会損失も)ことが多発することには理由があります。その理由を理解してちょっと工夫すれば、プログラムが書けるようにならなくても、開発効率を上げることができます!

僕が思うこの手の問題の1番の解決策は、ズバリ「保守的なスケジュールを出さなくていいカルチャーに変える」ということ。特に多くのSIer出身の開発責任者たちには、「お客様に出したスケジュールを死守する」というカルチャーが根付いています。そりゃそうですよね、お客様と開発会社の関係性において、元々決めたスケジュール通りにものが完成しないと大問題になります。プロジェクトは赤字になり、お客様からも叱責されます。なので、どうしても開発スケジュールが保守的になり、かなりの工数のバッファを自然と見込むようになります。これは悪意なく身に付く習慣ですので、仕方ないこと!だと思います。なので、CEOーCTO間のコミュニケーションにおいて、スケジュールが遅れても怒らないからチャレンジングなスケジュール出して!というだけで、随分と無駄のないスケジュールになると思います。「そんな訳ない!」と思う方もいらっしゃるでしょうが、この話をプログラマー目線で考えてみます。一流のプログラマーと一般のプログラマーの開発の生産性ってどれくらい違うと思いますか?僕の経験では軽く10倍は違います。他社のプログラマー構成は分かりませんが、普通1人や2人いいプログラマーはいるものです。いいプログラマーにとって、プロジェクトマネージャが作る一般のプログラマー向けのスケジュールなんて、ちょー楽勝もいいところ。普通のプログラマーの1か月分のコード量は、1週間もあれば簡単に終わる。他の3週間は遊んでるのです!なので、スケジュールタイトになってもいいプログラマーにとってはまだまだ余裕ということが多く、同じものを作るにしても1ヶ月でなく1週間で作ってねと言われても、作れちゃうことが多いです!

関連して、その2の解決策になるのかもしれませんが、例えばプログラマー10名のプロジェクトだとすると、いいプログラマーだけにコード書かせて、その他普通のプログラマーにはコード書かせずにテストだけお願いするというのも効果があります。仕様変更時の難易度は、コードのクオリティ次第なんですが、いいプログラマーが書いたコードは綺麗なコードが多い。一般のプログラマーが書いたコードはぐちゃぐちゃが多い。これは事実。なので、緊急プロジェクトだったり、ちょー大事なプロジェクトは、エースプログラマーだけで書かせると大体のものが、いい仕上がりでみんなで作るより早く完成します。プログラマー育成の観点からは、あまりいいやり方ではありませんが、普通のプログラマーに一流のプログラマーのコードを読ませてテストさせるというのは、スキルアップにつながります。

昔、サンマイクロシステムズに1人の超天才プログラマーがいました。もちろんサンなので、周りのプログラマーも天才です。ですが、その超天才が呼吸をするように書き出すコードを、残りのみんなでデバッグしたという話を元サンのエンジニアから聞きました。ちなみにその超天才は、ジェームズ・ゴスリン。Javaの生みの親としても有名です。経営者のみなさんにはウケるだろうドラマ「会社は学校じゃねぇんだよ」に柄本時生演じる天才プログラマが出てきますが、ほんとあんな感じの天才プログラマーってちらほら存在します。僕の会社にも呼吸をするようにコードを書く天才が何人もいます。

本当は、経営者の皆さんに、ゆっくりじっくりプログラミングを学んで頂き、開発スケジュールも自分で決めて、プログラマーのスキルも自分で見分けられるようになってもらえると良いのですが、そちらは追い追い学んで頂くとして、今日のところは、「スケジュール遅延しても怒らないから、チャレンジングなスケジュール出して」と急ぎのプロジェクトには「一流プログラマーだけにコード書かせて他のプログラマーにはコード触らせいないで!」とCTOと握ってみましょう!
あ〜CTOの方々には読んでほしくない記事になっちゃった!(苦笑)

補足:
1人で10ヶ月かかるだろうシステム開発は、10人がかりで頑張っても1ヶ月で終わらないという真実を語ってる有名な本があります。
https://amzn.to/4anQKO2

経営サイドとしては、「あと何人プログラマー追加したら納期に間に合う?」的な質問をよくすると思いますが、必ずしも数揃えれば完成が早まるわけではないという悲しい現実があります。

素敵な要約もありますのでご参考に!


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