当たり前だけど、自分がスタートアップで立ち上げる時は基本的には大きな失敗にならないようにしているし、実際今まで大きな失敗は起きていない。
アドバイザーなどの立場で外部の会社の案件を眺めていると「危ないなぁ」「ヤバそうだなぁ」と気づく時がある。 結果的に豪快に失敗してしまった案件もあり。やっぱりかぁと思ったりする。
自分がヤバそうだなぁと気づく時は割と早い段階で、この気付きのポイントをまとめてみる。
発注者側の失敗ポイント
誰も技術な知識を有していない、システム開発経験がない
別にコーディングできる人材が必須というわけではなくて、Webサイト開発なら、プログラミングしてサーバに置いてクライアントとHTTP通信するんだよね。くらいの認識という本当にベースの部分の知識がないと難しい。
トップを含め、システム開発経験がないのも、コーディングをした経験の有無ということではなくて、発注者として開発業者と一緒に作った経験でもよい。
実際にあったコト
- 詳しいからと連れてきた人がWebサイトを複数知っている程度で、作る側になったことがない人だった
- ランディングページやコーポレートサイトを作った経験があるから行けるでしょう。としていたケースが複数あったけど、それは別物。
静的なWebサイトは制作であって開発ではない。静的なサイトはWebデザイナーだけで作れる。 ソフトウエアエンジニアがプログラミングしてDBが絡む動的なサイトを開発することとは全く違う。
発注者のトップが畑違い
発注者のトップは、お金の使い方を決める決裁権者であり、開発されたものが本当に望んだものなのか判断する重要な立場。
この重要な立場の人が結構畑違いの人がアサインされることが結構多かった。
実際にあったコト
- ハードウエア業界の人が開発マネージャーになっていた
- マーケティングの事業部長が開発のトップになっていた
- プロジェクトが上手く行っていないと聞いて初めてミーティングに出た場で、プロジェクトマネージャーが 「じゃあ、xxxさんお願いします」だけ言って、プロジェクトの概要から体制の説明、状況説明まですべてを外注者にさせた。しかもこの外注は近日中にプロジェクトを外れるとのこと
契約内容や支払い条件が言われるまま
経験がないことから発生することだけど、契約内容と支払条件が開発会社の案をそのまま受け入れてしまう。
実際にあったコト
- 納期を過ぎた稼働は、収めたものがバグだらけであっても追加稼働費が請求された
- 契約金額を先払いした
- 納品物が要件を満たしていない場合のリスク回避の項目が契約にない
開発側の失敗ポイント
基本的には、ウソ、ごまかし、不誠実な対応あたりになる。 元々スキルを有していなかったは論外。
ちょっと人間の倫理的な要因だけど、でもやっぱり大きな要因。
実際にあったこと
- 他の案件のソースを許可なくまるごと流量、2つ目のgitコミットが膨大だった
-
リソースのごまかし 一人しか稼働していない gitコミットが1名だけ
-
開発が間に合わなかったことをレビュー会議の冒頭に報告。レビューできずその場全員の稼働が無駄。 「向かう電車の中でもコーディングしてきたんですけどね」というエンジニアの言葉。 一緒に来ていたはずの営業はその場にいない。決裁権者を捕まえて新たな営業をしていた。 発注者側も怒らず・突っ込まず
-
レビューサイトがhttpステータス 500 を出していると指摘されているのに認めようとしない。発注者が動画キャプチャーを送って初めて認めた。そこまで数週間経過
- レビューするために発注者を開発会社に呼んで最初の操作でエラーが出る
平気でウソをつく業者は日常的にそうしているのだろうけど、gitやコードを見ればウソはバレる。
だいたいエンジニアがごまかしの言葉を発した時点でまずいなと思う。
解決策はあるのか?
発注者側に、開発経験があってちゃんとリリースまで行ったという成功体験のある人をトップに据えれば、開発会社のウソやごまかしも見抜けるし、その開発会社を外すという決断もできる。
ただ、そもそも社内でできないから外注するのであって、そういう人を正社員で確保するのは難しいだろう。
本当に誰もいない時はアドバイザーでもいいから外部のプロに発注者側に入ってもらえば失敗率は大幅に下る。 週1日プロジェクトをチェックしてもらうだけで良いので、予算から月額20〜35万円くらい確保しておけばよい。
感覚的には、そのままプロジェクトを進めると失敗率80〜90%、ほぼ間違いなく失敗する。 アドバイザーが入れば40%くらいまで減らせる。
それでも失敗率が結構な大きさになるのは、システム開発を外注する事自体が不確実性が高いから。
一番失敗しないのは、社内に開発チームを作ること
開発会社と契約をするとその枠組の中で行うことになるので、途中の変更や契約期間以降の稼働に対して弱くなり失敗につながる。
経験上、一番失敗しない形態は、社内に開発チームを作ること。
正社員にソフトウェアエンジニアがいなければ、外部のフリーランスのエンジニア複数名と契約してチームを作る。
開発のトップには正社員が望ましいけど、開発マネジメント経験があり、リリースした経験がちゃんとある人を外部でもいいから据える。
途中の変更にも対応でき、発注側の経験、要件、仕様検討の不足も質問して補ってくれる。
開発経験がちゃんとあるフリーランスエンジニアやマネージャーは、100万円/月〜。外注した場合に比べすごく安くなるわけではない。
ただ、発注者側の不足点は失敗につながり、失敗コストや失敗率を下げてくれる効果を含めると、トータルで最も安いと言える。
エンジニアは稼働単価x時間の契約が多いので、自分のパフォーマンスが単価に直結している。ウソやごまかしをしても意味がないし、パフォーマンスが悪いと途中で外されるリスクもある。
そもそも私の知っている優秀なエンジニアは、ウソをついたりごまかすようなことはしない。
フリーランスやプロを上手に使って新しい開発アプリーチをしましょう
日本では「システム開発は開発会社に外注するもの」という固定観念がまだまだ強い。だから失敗率が高いまま変わらない。
でも、スキルや経験のある人はどんどん独立していていて、フリーランスとして世の中の新規システム開発案件に携わっている。
「スキル・経験を持った人たちと一緒に開発する」という時代になったと思っている。
社内に開発経験がなく、システム開発をどうしようか悩んでいるは、この新しい開発アプローチを検討してみてはと思う。
「どうやってフリーランスのエンジニアを見つけて、チームを作るか?」 「どんな契約でどうやって進めればよいのか?」 「どういうマネジメントが必要なのか?」 など実際に検討してみたい場合は、いつでもコンタクトフォームから相談ください。