「ITアーキテクトに必要な能力はなにか?」という質問を受ける事がありますが、「想像力」と「創造力」をあげる事ができます。
皆さんが良くご存知の通り、ソフトウェアのプロセスは要求>設計>実装という形で進みます。各工程で作られた成果物が次の工程に渡ることで、工程がつながっていきます。
つまり、各工程の作業というのは、前工程のアウトプット(=自分にとってはインプット)を見ながら、それを次の工程のインプット(=自分にとってはアウトプット)に変換していくことと言えます。
要求工程では、顧客へのインタビューがインプットで、要件一覧がアウトプット。
基本設計工程では、要件一覧がインプットで、基本設計書がアウトプット。
詳細設計工程では、基本設計書がインプットで、詳細設計書がアウトプット。
実装工程では、詳細設計書がインプットで、ソースコードがアウトプット。
もちろん、こうした工程は飛ばすことも可能ですが、そうだとしても、なんらかのインプットに基づいてアウトプットを作るということに変わりはありません。
こうしたインプットやアウトプットは何らかの「形」で作られます。つまり、インプットもアウトプットも第三者が評価可能な静的な構造体として定義されます。そうでないと、次の工程に持っていけないから。要件一覧も、基本設計も、詳細設計も、ソースコードも「静的」です。
では、優秀なITアーキテクトは、どういう作業をしているのでしょうか?上の図でいう矢印の部分の能力が重要なのでしょうか?変換効率が良くて時間が早いのでしょうか。あるいはアウトプットされるものが正確なのでしょうか。
もちろん、そうした要素は重要です。ですが、優秀なITアーキテクトが優秀であるのは、成果物に書かれていないことも配慮できるからなのです。それはユーザーや運用やPMや、あるいは他のあらゆるステークホルダーたちが書ききれなかったことへの配慮です。そして、業界の特性やユーザーの未来を鑑み「こう書かれているが、この方が良いのでは」といった逆提案をするのです。
では、優秀なITアーキテクトは、どうしたこんなことができるのでしょうか?それは、自分仕事を「ただ単にインプットをアウトプットに変換する」こととは捉えていないからです。優秀なITアーキテクトは、インプットを読んだら、それを自分の中で「動かし」、動いたものをいかに実現させるためかを考え、その結果をアウトプットにするのです。
これを図にしました。先ほどと異なり、インプットからアウトプットは直接結びつかなくなります。静的なものを、一度、動的に考え、そこから静的にしていくのです。
この時に重要なのが「想像力」と「創造力」です。
「想像力」というのは、インプットに基づくことで現れる未来の姿、つまりビジョンを考える力です。先ほど書いた通りインプットは静的な構造物です。これを自分のフィルタを通して動的なストーリーとして想像するのです。様々なアクターが登場し、時間が流れる中で、彼らがいかに関わり、いかに行動するのかを想像します。
そして、彼らの行動に矛盾はないか、その行動原理に不明な点はないか。そうしたことを確認していきます。これができると「書かれていない事」にも気づくことができるのです。
例えば「ユーザーにAという情報を見せたい」という要件があれば、そのAが誰がいれるのか?Aを手に入れるのにかかる時間はどのくらいか?ユーザーはAをなぜ/いつ/どのように見たいのか?といったことを想像する必要があります。
「Aを見せたいのだから、データベースにはAのテーブルがあって、それって、どういう属性なんだろう」という変換ではダメなのです。
次に「創造力」とは、想像したビジョンの実現手段を考える力です。これは戦略的でなくてはいけません。先ほども書いたようにビジョンには様々なステークホルダーが関係します。エンドユーザーにとってはAが望む通りに見れればよいでしょうが、PMにしてみれば期限も予算も品質も気になるところです。管理者はAを効率よく扱いたいでしょう。エンジニアは他の機能と同じような作りで実現したいはずです。
そういったバランスがとれる最適な方式を創造するのです。これは実現性がなくてはなりません。「こうなったらいいな」というような想像ではなく、明日には取りかかれて現状のリソースでまかなえる必要があります。創造された結果は「明確な形」であることが重要です。
さて、どうしたら「想像力」と「創造力」を上げる事が出来るのでしょうか。
「想像力」で重要なのは「具体性」です。例えばアクターのキャラクター設定を理解し、彼らの行動原理や作業目的を知る事で、より具体的にビジョンを描けるようになります(企業内アクターであれば、どうやったら彼らの給料があがるのかを知るのは大切です)。できれば実際のアクターには会うとよいです。「あの人が使うんだ」ということが分かれば想像力は高まります。
他にも時間を具体的に定義する事もあげられます。1時間、1日、1週間、1ヶ月、四半期、半年、1年、2年、3年といったスケールを定義しながらアクターを動かしてみましょう。時間が過ぎるほどデータが増え、環境は変化していきます。どんな作業であれ、繰り返すのは間違いないので、それがどういうタイミングで起きるのかを考えるのです。
「創造力」で重要なのは「多様な視点」です。例えばレビューをすること。自分の視点だけから見ていると、その創造力は自分の限界に限られてしまいます。だから、ユーザーに見てもらったり、PMやエンジニアに見てもらったり、自分の考えている事が実現できるのか、実現したとして価値があるのかを聞くのです。
創造力は多くの事を経験するなかで培われていくものです。努力を行い、時間をかけただけ創造力は鍛えられます。アイデアが面白いとか、発想がぶっとんでいるとか、そういうことは創造力の一部でしかありません。勘違いしてはいけないのは、創造力とは「実現する力」であり、そのためにあらゆる手段を行う力なのです。発想力がないなら、そういう人を巻き込めばいいだけ。それを繰り返しているうちにパターンが出来てきて、ある程度は自分で出来るようになってきます。
長々と書いてきましたが、想像力と創造力が重要なのはITアーキテクトだけではありません。PMもエンジニアも、誰も彼も仕事をする上では重要な能力だと思います。あなたの仕事は「指示された事を成果物にする」ではないのです。自分の仕事を「指示された事を自分の中で動かし、それを実現する」と捉えると、幅が広がり、仕事の面白さが分かるはずです。そこには想像も創造もあるのですから。
引き続き、人材募集してます!アプライはこちらから。 http://www.gxp.co.jp/recruit/index.html
