いかに会社のキャッシュ・利益を増やすか
ちょっとした自己紹介と、問題意識
初めに私の会社は、
・めっちゃ小さい・若い会社
・受託開発とか自社サービスとか
・メインの売上はまだ受託開発
てな感じです。
そんなわけで、エンジニアでありつつも、人材獲得・工数/原価管理・要件定義・営業、、、とやることが沢山あります。
小さくて若い会社なので、課題は山積です。
必然的に課題の優先順位付けが重要となります。
(もちろんでかい会社でも同じことですが、小さい会社は課題の優先順位づけを間違うと即死しかねないので)
そもそも何が目標か?
優先順位をつける前提として、そもそも何を目標とした課題か?と、考えると
・キャッシュ・利益
・理念の実現
が、会社の大目標となると私は思います。
問題を単純化するため、ここではキャッシュ・利益に焦点を絞ります。
それでは、いかにして会社のキャッシュ・利益を増やすか?
「ゴール」という本を読んだことがあるでしょうか?
工場の生産性向上のお話です。
要点としては
・工場のキャッシュ・利益を増やすために何をすればよいか?
・ボトルネックが、売上を決めるため、ボトルネックの生産性を改善すること以外の努力は、売上を増やす目的にとっては無意味
・コスト削減も、従業員をクビにできないんだったら無意味。コスト計算方法(指標)はキャッシュ・利益を増やす目的に沿っていなければ有害
というお話です。
この、お話では、ある装置がボトルネックとなっていて、その装置の稼働率を上げること
で工場をたてなおすというストーリーになっています。
システム開発に工場のアナロジーは使えるか?
「ゴール」のストーリー中の問題設定は非常に単純です。
果たしてこんな簡単なモデルをシステム開発に持ち込むことができるのでしょうか?
結論としては、アナロジーが使えると思っています。
しかし、システム開発と、「ゴール」に登場する工場の間には違いがあります。
エンジニアは複数のスキルを持っています。凄いエンジニアの中には、営業・要件定義・設計・実装・テスト全てができてしまう人もいるでしょう。
特定の作業しかできない、工場の機械とは違います。
ステップ1 まず、アサインの最適化
システム開発は工場よりももっと混沌としています。
整理のために、受託のスマフォアプリ開発を前提として工程をかんがえてみましょう
営業・企画→要件定義→設計→機能大枠(APIやDBの部分等)実装→細かい処理実装→デサイン等の入れ込み・表示調整→出荷
※テスト・修正は各工程に含みます
と分けると、熟練エンジニアは設計〜デザイン等の入れ込み・表示調整までの工程にアサイン可能、
一方開発を始めたばかりのエンジニアは、デザイン等の入れ込み・表示調整くらいしかできない、となります。
開発を始めたばかりのエンジニアに、機能の大枠実装を任せた場合、汚いコードで工数は増大してしまうでしょう。
少々単純化した上記のような前提だと、スキルの少ないエンジニアからタスクを割り当てて行くと、アサインの最適化ができます。
ステップ2 調達が容易なエンジニアを獲得する
すると大抵の場合は、熟練エンジニアが足りなくなります。
エンジニアチームの状況によっては、熟練エンジニアはデザイン等の入れ込みにまで入り込むことになり、回せる案件の量は頭打ちになります。
各工程で、人材調達の難しさは異なります。
デザイン等の入れ込み・表示調整であれば、IDEの使い方を教えれば、比較的短期間でできるようになります。
一方、API連携やDB設計・クラス設計がまともにできるようにするには、長い時間を要します。
調達が容易な(育てやすい・獲得しやすい)工程のエンジニアを捕まえることで、熟練エンジニアをより、難しい工程に集中させることができます。
ステップ3 熟練エンジニアを獲得する
人材を獲得することで、熟練エンジニアは難しい工程に集中できるようになります。
しかし、熟練エンジニアの更なる獲得に成功しなければ、熟練エンジニアがボトルネックであり続けます。
なぜならば、熟練エンジニアは代替不可能だからです。
このステップの状態では、設計→機能大枠(APIやDBの部分等)実装が終わり次第、速やかに残りの工程が処理され、製品は出荷されていきます。
スキルの比較的少ないエンジニアの稼働はあまり激しくなく、時には仕事が無いこともあります。
ステップ4まで辿り着いた場合、熟練エンジニアを育てるか、魅力的な報酬で熟練エンジニアを引っ張ってくる必要があります。