先程の記事「顧客と同じ意識に立つ」で書いた、
できるだけ、顧客と同じ意識に立つ。その上で、エンジニアとしての専門性を提供出来る。そういう仕事をしたいと思います。
という文章で、「エンジニアとしての専門性」という言葉を出したので、それって何だろうかと考えてみました。
先程の記事は上流工程を意識していたのですが、エンジニアとしての専門性といって思い浮かんだのは、「MECEを作る」ということでした。
MECE。モレなくダブリなくというやつですが、上流工程の責務である「仕様を定義する」ことにおいて、仕様がMECEであることは何よりも重要なことです。
そこで作る仕様は、顧客が念頭に置いている要件はもちろんのこと、あらゆる例外ケースを網羅しなければなりません。例外ケースをすべて取り上げ、MECEにすれば、その仕様はそのままテスト仕様書にもなるのです。
顧客と同じ意識に立って、さらにエンジニアとしての視点を加えることで、はじめてMECEな仕様が出来る。これが上流工程におけるエンジニアの専門性です。
結局のところ、システムを作るというのは、何が起きても大丈夫な構造を論理的に作ることです。そのような構造を作り上げたあとで、次のステップとして、その構造をソフトウェアとして実装するのです。
仕様を定義する上流工程に対して、ソフトウェアを実装することを下流工程といいます。上流工程における専門性と、下流工程における専門性は、種類が違うのかどうか。
自然言語で定義したMECEな仕様を、より論理的な言語であるプログラミング言語で再定義してみる。上流工程で定義された仕様が本当にMECEなのか検証することが出来ます。こう考えれば、下流工程は上流工程の延長線上にあるものに過ぎず、専門性に違いはないことになります。
一方で、ソフトウェア・システムを実際に稼働させるにあたっては、様々な非機能要件を検討せねばならず、それをソフトウェアとして実現させる手段も必要です。まさに「技術」的な部分です。こう考えれば、上流工程と下流工程の専門性は異なるということになります。
まぁ、そうは言っても、やはり上流工程と下流工程の専門性は違うと思います。ただ、業務アプリケーションのプログラマとかだったら、比較的上流に分類した方が良いかもしれない。上流と下流というより、アプリケーションとインフラくらいの方が素直というか。
今後クラウドが進展していくとすると、クラウドの外にいる人とクラウドの中にいる人で、アプリケーションとインフラといった違いが出てきて、きれいに分業出来たりするのではないかと。
そうやって分けて考えれば、明らかに私はインフラの方は苦手なわけです。だから、業務をしっかり理解できて、それをMECEに組み上げられる人にはなりたいと思います。