blog

システム開発のスケジュールの立て方を書いてみた。1

post image
システム開発会社の方がまず第一に悩まれるのが、見積もりの出し方だと思います。
 
ざっくり○○万円でできるだろうなぁーなんて思った金額の2倍の値段にしてーー、、、というアバウトな出し方です。のちのちに仕様を固めていくと、この機能が欲しい、こういった仕様じゃないとそもそも出来ないじゃん!!!というときは、当たり前の機能は作らないとか、どうしても必要なものであればあの手この手でゴネるだけです。
 
 
「最初に言っていなかったこの機能については別途費用がかかりますよ。」
 
「○○を○○にしたいのであれば別途費用ですよ」
 
 
 
とまぁ、普通こういった機能はこういうものじゃん!とプロダクトオーナー(お客さん)が当たり前だとおもっていたことをすべて別途にしてしらーっとする方法ですね。開発あるあるといえますが、当然開発者もそれがわかっているだけではなく、さらにこういうふうに昇華させるともっと面白い機能になるじゃん?なんてことを思ったとしても口にだしません。出してはいけないのです。工数が増える分だけ利益が減りますからね!
 
そんな構造なので、開発会社は見積り段階がすべて勝負です。
 
「●●の技術は非常に難しく工数がかかる」などとハッタリをかましながら工数を増やすとともに、いかに自社が技術力があるかをアピールしたり、ブラフをいれたりします。ゆえに、プログラムに対する知識がないプロダクトオーナーだったり、制作に関するノウハウをしらなければ、制作会社のカモにされる可能性もあります。
 
このたった一枚の”予算”というフィルターがかかることによって、お互いに利益は反することとなり、プロダクトよりも、どうやって利益をとるかしか考えられなくなります。プロダクトオーナーは安く、開発会社を勘ぐりながらどんな技術が必要なのか調べたり、どう開発したら安くなるかなど、半ばSEのようにプログラム開発について調べることになるでしょう。本来であればそれらの開発業務はすべてプロ任せプロダクトオーナーはビジネス全体の仕組みづくりはビジネスを作っていかなければならないのにもかかわらず、、です。
 
そういうったことから社内にプログラムに詳しい開発担当者をつけたり、自分がSE業務にまわる際は、営業企画担当をつけたりと、社内に無駄に費用を重ねることになります。
 
実際私も、プロダクトオーナーだった身が故に、こういったせめぎ合いを経験し、実際に雇用したほうがいいや。。ということで勉強とともにSE生活が始まることになったわけです。
 
最近では、レンタルプログラマー、レンタルSE、はたまたラボ型開発、といった具合に開発にあたり必要なものをすべて用意してくれるサービスまで出てきました。社内で雇うかのようであり、社内でやとうリスクもないという触れ込みですが、管理が出来なければただ無断な開発をつづけることになるので、優秀な人物かどうかの見極めが大切です。
 
ちなみに、このレンタルであれば、プログラマ最低一人25万円、そこに会社利益、会社経費などをのせると50万円程度からとなります。一人雇用で50万円を高いととらえるか安いととらえるかといった点で、私はオフショア開発でIT会社を作ることにしました。
 
自社で雇うだけではいいプロダクトはできるとは限りません。いいプロダクトを作るためにはきちんとした設計とスタッフを管理できなければなりません。そこで私は一番簡単な方法としてアジャイルという開発手法をとりました。
 
アジャイルとは全体のシステム設計をおこなって、すべてのものが終了したら納品するという従来の方法ではななく、機能ごとに最低限のシステムを作り、リリース。また設計をしてまたリリースしてと、設計とリリースを細かく反復して理想のものをつくっていく。という手法です。この方法であれば、思っていたものが変り、こういうふうにしてくれない?といった要望に対応できるというメリット以外に毎日毎日イメージしたものが納品されるので、雇っているような感覚に近いものになるし、なによりも常に製品ができあがっていくことに面白みを感じることになります。
 
 
では具体的に当社で行っているスケジュール管理を説明していきたいと思います。
 
 
サンプルとして、楽天のようなモールをつくってショップを集めて売り上げをつくろう!というビジネスモデルをお題にしてみます。
 
そうすると、
・ショッピングモールに入るショップ用のシステムが必要
・ショッピングモールにくるユーザー用のシステム、サイトが必要
・モールを宣伝してくれるようにアフィリエイトシステムをつくらなくちゃねー
・モールを全体の売上管理や、ショップが不正したときにショップに注意する会社用のバックグラウンドシステムをつくらなくちゃね
 
などと漠然としたものがイメージされてきます。当然、今話しながらも次々とあぁーいうのがほしー。こういうのがほしー。といったものは出てきますので、そこは後で追加していきます。
 
 
で、まずはショッピングモールに入るショップ用のシステムってなんぞや?と考えたときに、
 
 
・ショップの名前や、お店のカテゴリなど我がモールに入るショップの登録申し込みページを作ろう。
・ショップが商品を登録できる商品登録できたりカスタマイズできるシステムを作ろう
・お店がバナーなどを簡単につくれるツールをつくろう。
 
 
などと掘り下げることができるわけです。では、お店の名前や、お店のカテゴリを入力する申し込みページをつくるためには何が必要か?というと
 
 
・データを入力したりするためのデータベース設計、設定
・申し込みページのUI設計、デザイン開始
・データベースと連携するためのシステム開発、打ち込み
 
 
といったことが必要になってきます。ここまで詳細に落とし込むと、例えばデータベースの設定って約○○分でおわるよね?といったところまで落とし込むことが出来ます。そのようにして、
 
 
やりたいこと→必要な設計→必要な機能→必要なデータ→実装する項目
 
 
まで細かく細分化することで、その機能、そのやりたいことを完了させるためにどのぐらいの時間、日数がかかるのかということが明確に詳細に出てきます。
 
うちではその詳細に細かくして、実作業として分数単位ではかれるところろのタスクに落とす作業表はgooglesheetをつかっています。
 
 
 
 
ちなみにこのような作業工程にするために全体の詳細を把握しながら落とし込むレベルは一週間~二週間程度で終わる作業までにして、作業が完了しそうだなと思ったら、また2週間先ぐらいまでの工程表をつくっています。
 
 
 
 
 
そして、これらの工程わけ作業が終わったところで、それらのタスクを、チケットに記載して各プログラマーに渡していきます。俗にいうチケット駆動式です。
プログラマーにはこのチケットが毎週ドカンと降りてくるわけですw
もちろん、実際は手渡しでなくオンラインツールでこのチケットの管理を行う事で、チケットが終了していること、いまどのへんまで進んでいるのかを一目でわかるような社内管理プログラムを導入しています。
 
 
 
 
 
そしてこのチケットを終わらせないと帰れない!逆に早く終われば帰れる!という社内のルールになっているおかげで早く作業をおわらさせるように努力してもらいます。
プログラマも早くおわらせることに意義を感じなければ、何もルールを守りません。お互いに気持ちよく仕事をこなす仕組みづくりが必要だと考えるからです。
 
 
うちの工程管理、制作管理はこんな具合にやっています。