エンジニアが「要件定義」を学ぶ意義とは?
ITの上流工程作業の1つである「要件定義」ですが、実は「要件定義」を学習することでコミュニケーション能力や質問力があがり、結果としてより早くエンジニアとしての技術力が向上します。
目次
はじめに
こんにちは。
クラウドソリューショングループのyoshikawakです。
僕も含めエンジニアは「技術力」の勉強を優先にし、技術以外の勉強を後回しにしがちです。
ですが、実は「要件定義」を学ぶことによって、あなたのコミュ力や質問力を向上させ、結果としてより早く技術力の成長を見込むことができます。
そもそも要件定義とは
そもそも「要件定義とは何だろうか」とあまりピンと来ていない方もいらっしゃるかと思います。
要件定義とは、「システムの開発プロジェクトやプロダクト開発を問題なく進めるため、依頼者と開発者が開発作業に取り掛かる前に、依頼者が必要としている機能や開発者が実現可能な機能等の認識をすり合わせる作業のこと」です。
そのお互いの認識合わせを何度か繰り返し両者が合意することで開発作業に取り掛かることができます。
しかし、ここで伝えたいことは「要件定義」は日常生活でも無意識的に行われているということです。
例えば、
あなた「今日はお肉が食べたいな」
お母さん「牛肉?豚肉?鶏肉?何が食べたいの?」
あなた「今日は豚肉の気分かな」
お母さん「じゃあ今日はとんかつにするわね」
あなた「おっけー、ありがとう!」
一見何気ない会話のように思えますが、実はこれも要件定義と考えることができます。
上記の流れをIT業界で置き換えると、とんかつが開発するシステムやプロダクト、あなたが依頼者、お母さんが開発者となります。
相手の欲しがっているものを理解し提案する。
逆に、自分の欲しいものを明確化し相手に伝える。
このような日常的にも行われていることをIT業界では「要件定義」と一言で表しているだけなのです。
「要件定義」が出来るとコミュ力が上がる
この章では、要件定義を学習することで得られる開発者視点のメリットを説明します。
開発者視点においてのIT業界での要件定義は、
「相手の要求や実現したいことを具体的に考え、どのようにして自分の力でかなえられるのか?」
ということです。
日常でも相手が明言するにせよしないにせよ、「常に要件(要求)が発生」しています。
明言をする例としては、先ほど挙げた「とんかつの例」なんかがわかりやすいでしょう。
「お肉が食べたい」という要求から始まっていますので、開発者側であるお母さんは、依頼者であるあなたが「何か食べたい(要求したい)ものがある」と理解することができます。
ですが明言をしない例として、友人が職場の人間関係の相談事を持ちかけてきたというものがあります。
開発者視点であるあなたは、「その友人の性格や状況、口調など様々な情報を総合的に考え、共感を求めているのか解決策を求めているのか、はたまたその他の何かを求めているのか」を、瞬時に判断しなければなりません。
友人は決して「〇〇して欲しい」と明言することはありませんが、何かを求めてあなたに話しかけているのです。
そして会話とは極端に言えば、明言しない「要件定義の繰り返し」です。
発言者は発言に対しての求めている反応が明確だったり、明確じゃなかったり(明確じゃない方が多い)しますが、何かしら”欲しい”反応を求めて発言しています。
初めこそ「会話の要件定義」を適切に行うのは難しいですが、経験やコツをつかんでいき相手の間接的な要求が徐々に分かるようになっていきます。
そしてレベルが上がっていくと、職場においても任された仕事やビジネス上の会話での相手の発言の意図を理解することができるようになっていき、スムーズに仕事をこなせるようになるかもしれません。
「要件定義」が出来ると格段に技術の習得スピードが上がる
さて、今までは要件定義を学習することの開発者視点でのメリットを述べてきましたが、依頼者側にももちろんメリットがあります。
それは「自分の求めているものを、誤解を生じにくく開発者に伝えられるようになる」ことです。
もしあなたがエンジニアの勉強をしていて、分からないところが出てきたらどうするでしょうか?
- ネット検索
- 本で調べる
- 周りの方に尋ねる
- ネットの質問サイトに投稿する
あたりがメジャーな手段じゃないでしょうか?
そしてこの中で特に依頼者側の要件定義の力が試されるのは「周りの方に尋ねる」と「ネットの質問サイトに投稿する」です。
要件定義風に言い換えると、あなたは勉強している途中で「疑問点に対する解答」を解答者(開発者)に要求することになります。
しかし、仮にここであなたが「なぜか分からないけどエラーが返って来ます、どうすれば解決できますか?」みたいな曖昧な質問だと、解答者(開発者)も状況を理解できず答えに窮してしまいます。
一方、「〇〇が〇〇になり、〇〇という状況に陥り、エラーを吐かれました。こういう状況だと〇〇か〇〇が原因だと思うのですが、どうでしょうか?」
といった風に質問すると、解答者(開発者)も質問者(依頼者)のエラーになった状況を理解しやすく、あなたが求めている答えを返してもらえる確率が上がるでしょう。
もちろん毎回こんな完璧な質問をつくることは不可能ですし、解答者も優しい方で詳しい方であれば、回答するのに必要な情報を逆に質問してもらえ、あなたの求めている解答を用意していただけるでしょう。
ですがそれは所詮「運ゲー」ですし、例えるならシステム開発において「自分は予約サイトを作りたいです。後は開発者側でいい感じに作っておいて~」と言うのと何ら変わりありません。
それにより自分の求めている予約サイトが出来上がる可能性は、、、もちろん低いですよね?
要件定義を学習することでこうした依頼者側に求められるスキルを知り、磨くことができます。
それを続けると徐々に質問力が向上し、疑問点に費やす時間を減らすことができます。
こうして技術力の学習時間をより多く費やせたり、的確な解答と質問を整理し準備する過程で得た理解などが相互的に作用することにより、あなたの技術力をより高めることができるのです。
おわりに
以上が要件定義を学習することで得られるメリットです。
要件定義は奥が深く汎用性の高いスキルです、決してIT業界だけではなく日常生活や仕事においてもいかせることができるでしょう。
また恐らく上記以外のメリットも僕が気づいてないだけでまだまだ眠っているはずです。
まず初めに「要件定義」の勉強方法として、Youtubeの動画を見たり本を一冊読んで概要をつかんでみてはいかがでしょうか?
以上です、ありがとうございました。