A Day In The Boy's Life -89ページ目

A Day In The Boy's Life

とあるエンジニアのとある1日のつぶやき。

どんなシステムであれ、構築・リリースしてから徐々にシステムの老朽化は進んでいき、そうなる前にリプレイスされたり、その役目を終えて廃止もしくは別のシステムへと統合されていったりするわけですが、どう運用していっても最初は完璧だと思われていたそのシステムは、徐々に崩壊への道をたどっていきます。


最初は最新機能を兼ね備えたぴかぴかの家電製品でさえ、5年も経てば一気に色あせ、それはまだ動くにしろ時代とともに淘汰されていく運命にあったりします。

それは、システムとて同様のこと。

ただ、システムはその運用の中で著しく崩壊への時間が短縮されるイベントが多々あります。



つぎはぎだらけのシステム改修


華々しくリリースしたシステムでも、徐々に利用者からその機能やUIに不満というものが出てきます。

わがままな利用者の声に答えるべく対応した改修作業は、場合によってはそのシステムの寿命を縮めることにもなったりします。


機能拡張の仕様の中には、当初の設計上想定されていなかったものも含まれたりするため、半ば力技での対応になったり、上塗りするようにつぎはぎして拡張されていく場合もあります。

それは、設計思想が崩れたことであり、システム開発のルールが適用できなくなったことを意味したりもします。


一度生まれた例外は、また新たな例外を生む結果にもなったりするため、それまで綺麗に整理整頓されていた開発環境は一気に崩壊していきます。

最初は「こうすべき」と定義したルールが、「基本的にこのようにします」と変わり、最終的にはルールを遵守することへの疑問が深まっていく結果になったり。


また、何も利用者からの要望だけでなく、潜在的なバグが表面化したことによる改修も同様のことが言えるでしょう。

その対応もまた、つぎはぎを生む結果となるわけです。



想定外のイベント


当初の設計というのは、推測だらけで始まります

利用者数やアクセス数、キャパシティへの見積もりなど過去のデータから類推したり、それまでの統計データからある程度の精度の予測を立てることはできますが、それはある想定に従った場合という条件付のものだったりします。

ある想定というのは、今の環境が変わらなければとか、類推したデータからの予測値を大きく外れるようなイベントが起きなければ、といったものだったりです。


しかし、当初の予測どおりにそのまま順調にシステムが利用されていくのはまれです。

もともと、このシステムだけでしか使わないと決めていた環境が、予算の都合とか政治的なやり取りの中で統合されたりもします。

想定していなかった利用者数によるリソースの使用率の増加や、システム統合や追加によるキャパシティの変化などはよく起きるイベントです。

それは、喜ばしいことでもあるのですが、そのシステムでは耐えられる期間を短くすることになり、同時に崩壊への時間を狭めます。


そうなってくると、まったく当初の予測から外れた結果になっていくことは明らかです。

5年持つと計算されていたのが、それらのイベントによりより速い時間で持たない状況に追い込まれることになるわけです。



運用ルールの変革による崩壊


開発ルールの崩壊と同様に、運用者たちが取り決めたルールによってもシステムは陳腐化していきます。

システムの運用ルールは、内部的な要因だけでなく法律やお客さんからの要望など外的要因で大きく変わっていくことがあります。

内部統制系の話によりシステムの利用ルールを厳密に決めることになったり、セキュリティを気にしたお客さんからシステムへのアクセス制限の強化や利用報告を求められるかもしれません。


変わった運用ルールに対応するために、システム/非システムいづれでも業務そのものの変革が起きてきます。

要はシステムだけでなく、そのシステムに関連する業務そのものがつぎはぎになるわけです。

しばらくは、変わったルールに対応するためになんとか頑張ろうとするかもしれません。

しかし、業務自体が非効率になっていく過程で、負担が大きくなりシステムに改修を入れる施策が持ち上がったり、もっと大きな業務改革のプロジェクトが立ち上がったりもします。


業務が変わっていくことでその道具であるシステムも同じ道を辿ることになるわけです。



時代遅れ


技術革新の流れについていく事が目的というわけではありませんが、システムが最新の(そして安定した)技術を利用しているに越したことはありません。

技術が最新であるかどうかは、技術者視点にとっての重要性でしかありません。

しかし、利用者からの要望の中には最新のWebサービスに感化されたためか、その最新の技術をで作られた機能の実装を求めてくる場合もあります。


数年前にリリースし、すでにその技術そのものがレガシー化した状態で、最もホットなサービスにあるような機能を付け加える事への対応が難しくなってきます。

もちろん、いくら技術の進歩が早いとは言え、数年前の技術が使い物にならないぐらいになっているかといえばそんなことはありません。

応用すれば、最新サービスが提供しているナウでヤングな機能も実装できるでしょう。

ただ、そのシステムがうまく対応できるかどうかは別の問題。


最新の環境であれば、数時間で対応できるようなことが数日かけて作る羽目になったり、対応そのものが力技になってたりもするわけです。

これは、システムの寿命そのものを直接的に縮めているわけではありませんが、一気にシステムが色あせて見えることになる結果をもたらすことにもなります。



まとめ


結局、そうならないためにも最初の設計凄く大事、って事に結びついたりもするんですが、同時に当初想定していたシステムのライフサイクルってほとんど当てにならないから、拡張性や柔軟性に優れた設計や開発手法を取り入れてた方がいいでしょう、と思ったりもします。


100年持つシステムというのはありえません。

システムそのものを100年動かすということであれば、達成できるかもしれませんがそれを利用するサービスや業務そのものが100年前と同じ事を続けているということはないでしょう。

その変化そのものを受け入れ、崩壊への道ではなく発展・進化の道を辿っていくような工夫が常に求められていくんだと感じます。




プログラマーであれシステムを構築する上では、まずそのシステムを作りたいと願う人との対話から始まります。

システム屋であれば、まずはどういったシステムを作るのかというところに興味がいったりもするもんですが、そればかりに目が行くと、何のために作るシステムなのかを見失い、結局作ったもので当初の目的を実現できないということにもなったりします。

そうならないためにも、システム屋が非システム屋と話すときには得意分野であるシステム領域の話を一旦忘れるぐらいの心積もりも必要かなと思ったりします。



背景をはっきりさせる


非システム屋でさえ、自分たちが作りたいサービスや業務改善を実現するためのシステムに対し、過大な幻想を描いていたりします。

業務フロー図を見ると、複雑な矢印のINとOUTにマジックボックスのように設けられたシステムという文字で、あたかも全てが解決してしまうような図を見せられることは良くあったりもするものです。


そんなところに自分の得意分野の話を先に進めてしまうと、何を作るかよりどう作るかの方が先行し、できたはいいけど結局うまくいかなかったということにもなりかねません。

そもそも、システムに魔法は存在せず、あるのは処理の繰り返しだけです。

何のために作るものなのか、現在どんな課題があるからこのシステムを作ろうとするきっかけになったのか、はっきりと背景を聞き出しておくことが重要になるでしょう。



システムの話には乗らない


システム屋を乗り気にさせるためか、非システム屋の中にも単刀直入にどんなシステムを作りたいのか、その構成図を広げて見せてくる場合があります。

それは、こちら側から見ればたどたどしく欠点がふんだんにあるように見えるわけですが、それを赤ペンで修正するようになってしまったら、ある意味思う壺にはまってしまいます。

そこから生まれる会話は、どうやって作るかということが中心で、結局その目的も誰が使うのかもどのように使うかの想定さえもすっ飛ばしてしまいます


システムというのは道具と考えれば、どうやって作るのかはある意味、予算次第でどうにでもなってしまうところでもあります。

話に乗るだけ乗って、その後に「これだけのことをやるには、これだけのコストがかかりそうですけど出せますか?」って笑顔で答え、相手の表情を強張らせるのも良いかもしれません。

しかしそれは、どうすればよいのかという落としどころさえも見つからない、双方にとって無駄な時間にもなりかねません。

一旦そこは話に乗らず、しっかりとした背景や目的を聞き出すことに専念することが最初にやるべきことになるでしょう。



非システムでできることを見つけておく


これはシステム屋にとっては仕事を奪うようなことにもなりますが、そもそも作って無駄になるものを作っても意味がありません。


先ほど書いたマジックボックスのように理想論だけで書いたフロー図はまさに絵に描いた餅のようなもので、そもそもそれを作ったところで実際に活用できるのか、業務がうまく回るのかなどを入念に下調べをしておかなくてはなりません

その中では、何もシステムだけに頼らなくても改善される余地のあるものも多々あるわけで、全てを自動化しなくても一定の効果を挙げることができるものさえあります。

多額の投資をしてまでシステム化したときの効果が果たしてあるものなのかを見極めておく必要もあるでしょう。

であれば、システム化する前の基礎をまずは整備することが必要になります。


業務改善という言葉がこの世から消えていない今、業務自体に何らかの欠陥があったりするのは明らかなことで、それを棚に上げてシステム化への幻想だけを振りまくことへ注意を促さなくてはなりません。



感情に流されない


忙殺される業務の中で何とかそれを改善するシステムに抱く期待というものは小さくありません。

しかし、担当者の苦労話に付き合って目の前にある苦労を取り除くだけのシステムを作ることはあまり意味がなかったりもします。

根本的にその業務では何をしなくてはならないものか、アウトプットとなるものは何なのか、何のためにやっているものなのかをはっきりしておかないと、小さな苦労を改善するものだけを作っても、次の新たな問題が浮上するだけになります。


業務改善のためにシステムを作るということになった場合、大抵はその業務の苦労話を聞かせられるものです。

それは確かにその通りでしょうが、その感情にだけ付き合っていたら本来の目的を見失うことにもなります。

一度、そのミクロな視点の問題にとらわれず、全体を鳥瞰して何故そこがボトルネックとなっているのかを考えてみる必要もあるでしょう。



自分たちに期待していることは何なのか


システム屋に期待することだから、システムを構築したり保守・運用してもらうことを期待しているのだろうというのは時に思い違いを引き起こすことにもなったりします。

中には、構築案件で発注する業者との折衝についてアドバイザーのような立場で入ってほしいと期待されている場合もありますし、単に現行システムの課題について保守・運用の立場から意見が欲しいという場合もあります。


いづれにせよ、自分たちがどういう立場でそのプロジェクトに参画し、何に対して意見すればいいのかということをはっきりしておかないと、一人違う方向に突っ走ってしまうことにもなりかねません。

システムを作っていくフェーズの中でも、それぞれ多岐にわたる役割があるもので、その役割ごとに視点も変えていく必要があります。

業者が入り仲介する立場であれば、提案内容についての妥当性を判断していく必要があるでしょうし、外部サービスを利用する場合は、現行環境や業務についての課題や問題点の解決策を探っていく必要も出てくるでしょう。


自分たちができることだけでなく、自分たちがその与えられた役割の中で期待されていることは何なのかをはっきりさせておくことで、対応やとるべき行動もスムーズに行われることになると思います。



まとめ


結局は、システム屋視点を離れ非システム屋の領域に踏み込んだニュートラルな考えを持っておく方が双方にとって良いものが作り上げられるでしょう、ということです。

システム屋から見れば、それを作る作業というものは楽しいものだったりもしますが、作る作業だけを楽しんでも結局それが使われなかったり、設計上の欠陥があれば互いに不毛な時間を費やすだけの結果になったりもします。


作ることが目的とならず、目的を達成するために何を作るのか、ということを忘れないよう常に留意しておく必要があるのだと感じます。




また、プログラマー35歳定年説の話題が流行っているので、少し遅れながら便乗してみる。

とりあえず、自分は社内エンジニアなので、その観点から。



単価という概念がない世界


そもそも社内エンジニアにとっては単価という概念がありません。

社内売りたてるところがあったとしても、額面上で計算されたものであまり厳密に計算されたものでもなかったりしますし、そもそも客(社内の人)から単価が高いって言われることもありません。


人件費では、うるさく言われることも多いでしょうが、そういった場合って、このシステム開発・保守にこれだけの人件費がかかっているからもっと若いエンジニアを利用してランニングコスト下げろってことなんてなく、丸ごと関係会社やオフショアへ出してしまえ、みたいことになったりします。


自分たちが作り上げるサービスが、会社にとっての直接の売り上げなどに貢献することがない、バックオフィス系の仕事をするエンジニアとしては、その単価や給与によって道が閉ざされていくようなことはない気がします。

実際、社内のシステム構築をするような人は、平均年齢が結構高いと思いますし。

まぁ、それはあまり人材が流動的ではないというせいもあるかもしれません。


じゃあ、プログラマー以降のキャリアがないのかというと、そんなこともなくその会社が思い描くキャリアゆえに定年への道が用意されている気がします。

そのエンジニアを育てて行く過程で、プログラマー以降のアーキテクトやプロジェクトマネージャなど、その人のキャリアパスをレールに乗せようとする35歳辺りを転機に、そっちの道へ導こうとするのかなと。


要は、プロマネやってた方がつぶしが利くし仕事の幅も広いだろうということかもしれません。



プロジェクトマネージャという立場への誘惑


新卒の採用でいきなりプロジェクトマネージャ募集!ということをやるところはまずないと思います。

開発の現場をわかってなくてプロマネなんてできるか、ってことでしょうけど、先ほど言ったようにプロマネに仕立てた方が、社内であっても仕事につぶしが利くわけです。


会社としてはプロマネに仕立てたいけどいきなりは無理だから、とりあえずプログラマーとして採用し、その後にその人のキャリアアップと称してプロジェクトマネージャへの道を作るというストーリーを描いているんじゃないかなと。

35歳っていうと、大体大卒で13年ってとこなので、いかに人材が流動的ではないとは言え、そのくらいの年数たてば新卒で入ってきた人の人数も膨れ上がります。

プログラマーとして仕事を継続していっても仕事が足りなくなりますし、何よりそれらの人数を束ねる人を作っておかないと組織として機能しなくなる恐れがあるわけで、そういうポジションの人を育てておかないといけなくなります。


プログラマーとしてだけの能力を評価するよりは、各方面で必要となる能力を持ち合わせているプロマネの立場の方が評価もしやすくなります。

開発の現場もそれなり経験し、レベルが相応になっているその辺りで、上司もそろそろ次のステップとしてプログラマーの引退とプロジェクトマネージャへのジョブチェンジを勧告しようとするのかもしれません。



自分にとって都合のよい状態を探す


自分の周りでは、評価面談の際に「上流工程やるのが嫌」という理由でプログラマーとして仕事し続ける人もいたりしますが、社内の場合プログラマーとしてい続けることも残酷な面も多かったりします。


好きなことを続けやすい環境ではあると思いますが、第三者目線で優秀なプログラマーとしての評価される機会は少なかったりしますし、社内での技術そのものがレガシー化してしまうと身に付けられるスキルも固定化されます。

好きを貫くといっても、ただそれだけでその環境でしか通用しないようなプログラマーにしかなれない場合もあるでしょう。


これは何も社内エンジニアに限ったことではないでしょうけど、そのまま好きなプログラマーとしてやり通したければ、相応の覚悟を持ってその一本道の中で自分を磨き続けなくてはなりません。

いづれにせよ、社会人歴を重ねるごとに与えられるミッションや責任というのは大きくなっていくので、少なからず開発だけやっていく、という立場から遠のいていくことは必然的に起こってきます。


自分はどちらかというと技術に秀でたものがないので、五分五分ぐらいで勝負していきたいな、と思ってたりする方です。

プログラマーを束ねてプロジェクトをやっていくには、その人たちと会話が通じるレベルで技術に精通しておいた方が何かと便利です。

今までやってきた技術そのものを完全に捨て去ることは心情的にできそうもありませんし、プロマネするにしてもそういった知識があるほうがより多方面で役立ちますしね。


結局は、会社都合でつぶしが利く人材となるよりは、自分のその後のキャリアも考えてつぶしが利くようにしておいた方がよいと思ったりするわけです。