システム開発の業界で、下流工程が大変になるのは、上流工程できちんと仕事ができていなかったためだ、と指摘されるのは何を意味するのでしょうか。システム開発と建設業とは、顧客の希望を聞いて、それを元に設計し、しかる後に施工して引き渡すという四つの工程を踏む仕事という点で類似しています。実際の工程管理のやり方も似通っているものの、仕上がりは建築物に比べてシステムの方が事情が複雑です。というのも、システムの方が、設計に建築士のような資格は必要なく、内部構造の基準があるわけでもなく、見える部分についてもはっきりしません。しかし一番の違いは、建築物は途中で設計変更をするということは初めからやり直しを意味するのに対して、システムはなんとなく表面上は設計変更点です。
さてシステム開発での上流工程とは、顧客の要望を過不足なく汲み取って、尚且つ使い勝手の良い機能を提案したり、あるいは防犯対策や災害対策をきちんと盛り込むことを指します。この上流工程が破たんとなれば、原因の多くはSEが本分を全うしていないことにあるのです。顧客というのは当然ながら素人であり、肝心なことを平気で無視します。そんな時にSEは、何度でも目的に立ち返ってよくよく吟味して、その実現方法を根気強く丁寧に提示しなければなりません。そのため、SEには大事な事をいかにわからず屋の顧客にわからせるか、というコミュニケーションスキルが必要なのであり、またここが腕の見せ所なのです。
そうはいっても、そんなこんなで上流工程が失敗し、補修や拡張を繰り返したなら出来上がりは悲惨です。顧客は新しい建物が出来上がって単純に満足かもしれませんが、ここもあそこも、元を正せば上流工程の不始末なのです。木を見て森を見ず、とはまさにこのことと言えるでしょう。間違えたら簡単に作り替えられるから大丈夫、などとSEとしての一番大切な仕事を忘れて、自分の実力の無さをいい加減に紛らわせているのが諸悪の元凶です。SEの本分とは、すなわち顧客が望む「森」全体を的確に把握して、それを構成する「木」の一本一本を注意深く設計に落としこみ、尚且つここでもう一度全体としての「森」が浮かび上がったかどうかを確認するという、徹頭徹尾気の抜けないものです。
どんなに能力のある人でも、時間に余裕のない時には、普段しないようなしょうもないミスをするものです。まして様々な失敗を犯す危険がそこここに潜んでいるのがわかっているのですから、せめて余裕をもったスケジュール管理で、手抜き工事に走らなくて済むような段取りを心がけましょう。
プログラミングが早い人、ただ早いだけではなく本サイトのテーマの通り、生産性の高いプログラマの特徴を紹介します。生産性の高いプログラマは、広い視野を持って全体を俯瞰しています。目の前にあるコードだけを見るのではなく、最終的な完成形の一部としてプログラムを捉えられるかどうかで、その完成度には違いがでます。コードを書く速度はとにかく毎日書くことにつきます。毎日書いて、かつ、公開することがポイントです。
システム開発プロジェクトにおいて生産性向上をめざすにあたっては、陥りがちな落とし穴にも気をつけなければなりません。仕様も納期も決められた中での開発なのか、開発しながら仕様を決めるケースなのかによっても、生産性向上のための選択は変わります。目的に合わせたものを採用すること、トップダウンで決定しないこと、導入コストを考えること、そして導入後の現状確認を怠らないことが、落とし穴を避ける秘訣です。
プロマネという道を選択したがために、好きなコーディングがなかなかできなくなってしまい不満があるなら、プログラマに戻り、転職やフリーランスへの転身を考えてみるのも一つの手です。ただし、どちらにしても本当に自分がやりたいことを実現できるのかどうかを見極めて行動に移しましょう。転職の場合は選考の時点で確認を行い、フリーランスの場合は目的や方向性がマッチするようであれば多くの案件をこなし、場数を踏んで実績を積みましょう。