現在、特定客向けのチェックシステムを作成している。
普通は、完全カスタマイズなしで導入なのだが、いかんせん発展途上のソフト、
キャパ以上の会社を受注してしまうと、現状機能、さらには追加機能をもってしてもカバーしきれない。
(うちは、それでも追加費用のかからないソフト販売なので客にとってはいいのだが。)
で、どうしてもカバーしきれない部分を、次の機能が出来るまでのつなぎとして
作っている。
うちの代表が「受託では力がつかない、世界レベルのエンジニアを育てるには研究開発型のビジネスモデルなんだ!」と言っていたけど、いかんせん他企業で働いたことの無い身、正直ピンとこなかった。
しかし、ここで初めて受託開発と研究開発の違いを知る。
何が違うかというと、想定すべき範囲と量が圧倒的に違うのだ。
プログラミングをした事のある人ならわかるかもしれないが、
ぐー、ちょき、パーをランダムで出すシステムを作る場合、
<受託開発>
①1:ぐー、2:ちょき、3:ぱーと、決めてプログラミングしてしまう。
②ランダムで1,2,3を選ぶ
となる。
ここで考えるのは、小さいころやっていた、たとえば
ピストルの形
ようするに、グーチョキパーの混ざった最強の手!!
まあ、ガキのたわごとなのだが、でもピストルの形を発想したことはすごいわけですよ。
でも、上記だと後から
『システム開発者』 が①に 4:ピストル という定義を追加するわけ。
ガキがピストルとか、もしかしたらハンマーとか考えても、実行できないわけです。
しかし、うちの開発では自由な発展の可能性があるなと思ったら、
<うちの開発>
①DB(データベース)に1:グー,2:ちょき 3:パー、というデータを入れておく
②DBに追加でデータ入れることの出来るソフト部分を作る
③ランダムでDBから1,2,3を抜き出す
というシステムを作っちゃう。
で、後からガキがピストルを考えついたら、④4:ピストルを②のソフト部分よりDBに追加
で実行できるようにするわけです。
要するに、
『ユーザー』 がやるだろうことを前もって実行できる仕組みにしておくわけです。
(もちろん、最強のシステムは④を自動的に思いついて追加、削除して発展してくれるシステム。
そこまできたらもう人間だ。。)
(後者も、設定のめんどくささや、作るのにより時間がかかるなどデメリットはある)
こんな単純な例でも、1ステップは増えてしまう。これが企業向けだと。。。
ちょっと泣きそう(T_T)
で、今関わっている仕事で感じたのは、まさに上記。
1月で働く時間外労働の限度値を決めるのに、色々なユーザーのことを想定して、
限度値 ← 定義を集めたグループ ← 組み合わせた定義 ← 勤務体系、部署、役職etc
という構成で自由に作れるようにしているのに、
今のお客様の話なら
限度値 ← 勤務体系
終わりなわけ。
プログラム難易度が本気で8倍以上違う。(プログラムは一つの条件入れることで乗数的に難しくなると思う。)
今のお客様の業務は後者で決まってるから、他の部分は余分。作る必要ない。
さらに、勤務体系のコードはお客様が決定していくことだから、こちらはそれを確認して
それを実現するプログラムを『書く』だけ。
(書くだけ書いて、客が思っていたのと違うと書き直さないといけないからそれがまためんどくさい)
うちの会社のやり方に慣れていたから、反対にそんなに簡単に書いてしまって
いいのかビビッて上の人に聞いたぐらいである。
経験したのは一端だけど、全然違うことだけは理解出来た。
時間もそんなに長くかけれる仕事ではないし、ちょうどいい経験をしたかもしれない。