要件定義の進め方

システム開発の大炎上を防ぐために、上流工程(前工程)に位置する「要件定義」について、考えていくブログです。

要件定義書の作り方
PDCAサイクルではなく、PDCサイクルを回そう
あるべきV字モデルについて整理した
スコープを決めてから、QCDの議論をしよう

設計者に求められる能力

システムエンジニアといったら、まず頭に浮かんでくるのが、設計者だ。システムに関するエンジニアはいろいろな種類存在するが、世間一般では、システムエンジニア=設計者の図式が成り立っているように思える。システムエンジニアで検索をすると、「システムエンジニア きつい」とか、「システムエンジニア やめとけ」という検索ワードがおすすめされる。やはり、きつい職種なのであろうか。今回は、設計者に求められる能力を整理する。

設計(設ける、計る)という言葉が示す通り、設計者に求められる能力は、システムを具現化するために必要な能力である。筆者は下記3点が必要と考える。

  1. 論理的思考力
  2. 文章作成力
  3. 認識共通化

論理的思考力について

これについては、言わずもがなである。正しいロジックを構築できなければ、ソフトウェアは動かない。

文章作成力について

プログラマに求められる能力は、プログラムを正しく書くために必要な能力だ。一方で、設計者に求められる能力は、設計書を正しく書くために必要な能力だ。前者と後者は決定的に異なる。その書を誰が読むかという点が異なるため、求められる能力が異なるのだ。

  • 設計書:その書を読むのは人間である
  • プログラム:その書を読むのは機械である

プログラムを読むのは機械だ。機械は文句を言わない。何度でもプログラムを読ませることができる。そして、書いたプログラムを機械に読ませれば、動くかどうかすぐわかる。一方で、設計書を読むのは人間だ。設計書をプログラマに読ませた後、プログラマは自身の解釈をもとにプログラムを書く。適切な設計書を書けなければ、プログラマは仕様を誤解釈し、正しいプログラムを書けなくなってしまう。だからこそ、文章作成能力は、大変重要な能力となる。

認識共通化力について

req-definer.com

上記記事でも述べたが、ある程度の規模の開発をしようとした場合、分業が行われる。大まかな分け方をすると、要件を定義する者、設計者、実装者に分けられる。この3人は、それぞれ、自身の考えでもって、システムを具現化しようとする。

 

req-definer.com

そして、3者の思い描くシステムは違う。違うからこそ、上記の記事でも述べたように、思っていたのと違うシステムが出来上がるのだ。

そうならないよう認識の修正をする必要があるのだが、その役割を担うべき存在が設計者である。なぜならば、設計者は、V字モデルの真ん中に位置しており、要件定義者との関わりを持ち、かつ、実装者との関わりも持っているからだ。3者の認識のすり合わせは、設計者しかできない。

要件定義者とプログラマが思い描くシステム像が一致したとき、理想のシステムが完成する。システムは要件定義者の定義通りに動作し、振る舞いに関する不具合など存在しない。俗にいう仕様不具合というものを撲滅するために、認識共通化力は必須能力なのだ。

もちろん、上記3点以外に必要な能力はたくさんあると思うが、また別の機会で紹介したい。ここでは、上記3点の能力有無によるパターン別で人材を紹介する。

設計者として欲しい人材

f:id:req-definer:20220121213811j:plain

設計者に求められる能力

設計者に求められる能力として、3点の能力をベン図で表現した。ベン図上には、①から⑧までの番号を振った。3点の能力のあるなしにより、①~⑧に分類される。

  • ①:認識共通化力あり、論理的思考力あり、文章作成力あり
  • ②:認識共通化力あり、論理的思考力あり、文章作成力なし
  • ③:認識共通化力あり、論理的思考力なし、文章作成力あり
  • ④:認識共通化力あり、論理的思考力なし、文章作成力なし
  • ⑤:認識共通化なし、論理的思考力あり、文章作成力あり
  • ⑥:認識共通化なし、論理的思考力あり、文章作成力なし
  • ⑦:認識共通化なし、論理的思考力なし、文章作成力あり
  • ⑧:認識共通化なし、論理的思考力なし、文章作成力なし

①について

この中で欲しい人材といえば、もちろん①だ。彼らは論理的思考力も文章作成力も高いので、要件定義者側からもプログラマ側からも信頼されている。彼らは、要件定義者が思い描いているシステム像とプログラマが思い描いているシステム像を汲み取り、認識が異なっていそうであれば速やかに軌道修正する。そのため、システム開発は炎上せず、ほとんどボヤで済んでしまう。

②について

次に欲しい人材は、②だ。文章作成能力に難はあるものの、彼らは、皆が思い描いているシステム像を一致させることができる。頭も良く、会議を開催させたら能力を存分に発揮する。ただし、ドキュメント作成には興味がない。興味はないが、なんとかシステムを成功にもっていく。

③について

その次に欲しい人材は、③だ。論理的思考力に難はあるものの、認識を合わせる力と文章を作成する力はあるので、会議体をうまく活用することでシステムを作り上げていく。

④について

その次に欲しい人材は、④だ。設計者というよりは、プロマネだ。設計者といいつつ、PMOとか、事務局をやってもらうとよい。

⑤について

その次に欲しい人材は、⑤だ。認識を合わせる力は弱いものの、合わせなくてもうまく進められる人がときたまいる。

 

⑥⑦⑧について

その次に欲しい人材は、、、いない。論理的思考力だけならあるとか、文章作成力だけならあるとかだと、設計者として生計を立てていくのは難しいのではないかと思われる。

 

タイプ別に説明する。

⑥について

考える人である。彼らは、特に何もしない。

画像の出所:考える人 (ロダン) - Wikipedia

f:id:req-definer:20220121221322j:plain

考える人

⑦について

文章は作成できる。が、その通りに作られたシステムは動かない。

⑧について

「設計」者ではないと思う。

設計者に必要なのは、認識を合わせこむ力である

システムを実現するために設計者として必要な作業は、

・要件定義書の内容を正しく理解し、設計書に落とし込むこと

・落とし込んだ設計書を、プログラマ正しく理解させること

である。上記の作業をやりきるためには、「自分の認識」を要件定義者とすりあわせることが必要だし、「相手の認識」を相手(実装者)とすり合わせることが必要である。とどのつまり、コミュニケーション(情報伝達)力が必要ということだ。

世間一般では、コミュ力というと友達を作る能力のように認識されているようだが、システム開発で必要なコミュ力は、情報を伝達し、認識を合わせこむ力なのだ。

結論:設計者なら、相手と認識を合わせながら開発を進めよう