SE Can't Code

A Tokyo based Software Engineer. Not System Engineer :(

何のために開発するのか.

僕はSIerで受託開発をやっているが、配属された最初のプロジェクトからずっと思っていたことがある。それは、何のために開発しているのか、ということ。

最近になってもそれはよく思う。というか昔に比べて考えることが多くなったんだけど、その開発の目的がやっぱりたまに見失われることがある。目先のクライアントの満足を満たす為に開発をすることがあり、その度に一体このプロダクトは何なのだろうという疑問が生まれる。

理想を言えば、僕たちが提供したいと考えているユーザー体験や価値を実現し、市場に評価されるアプリケーションとして成功することで、クライアントの利益になること、だと思う。要はエンドユーザーに価値を与えることが出来るかどうかが全てだと思っていて、それがクライアントへ提供する価値だと思っている。

ただ、その目的が見失われるような設計/実装が存在する。決められたリリースに間に合うためだけの設計/実装がされることがある。

たとえば、プロダクトの一機能を使ってユーザーにある価値を提供したいと考えるとする。それを実現する為には高度なアルゴリズムが必要であり、検証や設計に時間がどうしてもかかってしまう。こうしたケースで、リリースをオーバーすることが確実であった時に、どう判断を下すのかがPM(プロダクトマネージャー)の腕の見せ所だと思うが、多くの場合はリリース日は梃子でも動かないので、リリースまでに間に合うレベルの実装が行われることになる。つまり、納品することがゴールとなっていて、ユーザーのことなんかこれっぽっちも考えられていない。ただのクライアントの顔色を伺った開発で、そういったプロダクトは大抵がいらない機能などが入っていて目も当てられないことが多い。

受託開発の壁で、市場の評価を受ける前にクライアントの評価が先に入るので、どうしても顔色伺いな開発になりがちだし、納品することが最終ゴールみたいなところが出てきてしまう。ただ、プロダクトの本当の価値を判断するのはあくまでもエンドユーザーなので、そこを忘れて開発してはいけない。

もしそれを忘れてしまい、プロダクトを作っている過程の中で何も疑問に思わなかった時、エンジニアとして何かが終わる気がする。少なくともエンジニアとしての成長は終わる気がする。だって、納品がゴールになった時点で、チャレンジングなことはしていないはずだから。

ここまで述べてあれだけど、エンジニアとしての一番大事なことは、自分が作りたいと思うもの、面白いと思うものを作ることだと思う。結局は自己顕示欲の世界で、多くの人の役に立ってドヤ顔するために僕らは日々技術を身に付けているんじゃないかと。少なくとも僕はそうだけどね。

Remove all ads