こんにちは、Tochiです。 最近は、かなり忙しく、、というのは本当なんですけど ちょいサボっていたの業務での学びをアウトプットしていきたいと思います。
はじめに
今日は概念設計の重要性についてまとめます。 一般に言われる概念設計とは少し異なるかもしれませんが、そこらへんは悪しからず。
概念設計とは
一般に概念設計とは、システムやソフトウェアの開発プロセスにおいて、 アプリケーションやシステムの基本的な機能や構造を定義する段階を指します。
ただし、私が普段業務でやっている概念設計は、 アプリケーションやシステムの基本的な機能や構造を定義する前の事業的観点と技術的観点を洗い出し、 タスクの本質を見出した上で設計をおこうなうというものです。
具体的には、タスクを与えられたら以下の項目について整理していきます。
- 一言で何をするのか
- どんな背景があるのか
- 事業的背景は?
- これをやることで事業として何を目指すのか
- ユーザにとってどんな利益がもたされるか
- 技術的背景は?
- どんな技術課題を解消できるのか
- 事業的背景は?
- 理想はどんな状態なのか
- 現状はどんな状態なのか
- 理想と現状を埋める仕様はなにか
- 仕様を実現する上での課題はなにか
- 課題と解決案の選択肢
- 各選択肢のメリデリ
- どの選択肢を選び、なぜその意思決定をしたか
- 上記の意思決定を踏まえた実装方針
一般にPdMの責務になる部分があるかもしれませんが 私の場合は上記のようなことを洗い出してさまざまな意思決定をする必要があります。
思考ポイント
上記で記載した概念設計では思考の幅と深さがとても大切になります。
何も考えずに行うと、例えば「ソート機能を実装する」というタスクがあったときに 下記のような浅い思考での概念設計になってしまいます。
- 事業的背景は、「ユーザがソートをしたいから」
- 技術的背景は、「ソートできるようになる」
なので、私なりに実務で学んだ 概念設計時の思考のポイントをまとめてみました。
思考のポイント1: 視点を変えてみてみること
1つ目のポイントは視点を変えてみることです。
具体的には、「誰が」の視点を変えてみることです。
例えば、ソート機能1つとっても、視点を変えるだけでソート機能の目的が全然変わってきます
- 経理の人
- 金額関係のカラムで全レコードを整理してみたいなあ
- 事業部の人
- 管理者
- 自分と部下の分のレコードを見たいなあ
- 一般者
- 自分のレコードだけを見たいなあ
- 管理者
視点を変えることで、機能がなんのためにあるかを考えやすくなります。
思考ポイント2: シナリオを知る
2つ目はシナリオを知るということです。 砕けた言い方でいえば、「いつどのように」を知るということです。
例えばソート機能は、いつどんな時にどのように使われるのでしょうか。
- 自分に関連するレコードをいち早く見つけるため?
- ある特定のカラムの値でランキングを見たいため?(金額・日付・量)
- 特定の値でグルーピングしてみたいため?
などなど、使い方もそれぞれ異なります。
その機能がいつどのように使われるかを考えるだけでもタスクの本質が大きく変わってくるので、 自分が作る機能が「いつどのように」使われるのか具体的な運用やシナリオを知ることが概念設計では重要です。
思考ポイント3: 前提が崩れる場合を考える
3つ目のポイントは、前提が崩れる場合を考えるです。
あらゆる思考は、ある前提に基づいて構成させれます。
例えば、ソート機能は「並び順を変えることができたら便利」という大前提に基づいて提案されるものです。
このとき、概念設計では逆のこと、つまり「並び替えられると不便」になる場合がどういう場合かを考えてみましょう。 前提が崩れる恐れがある、あるいは崩れると諸々影響が大きそうだぞ、と思った時は十分に注意してください。
なぜなら、ソフトウェアの開発は常に前提が変わっていくので、今考えたその前提の逆が前提になりうるからです。 ゆえに今はソートが必須!と言われていても、後々にソートされると困るなんてことが発生しえます。
(あまり考えにくいのですが)例えば、、ソートの状態を保持できる仕組みを入れた場合に、 ソートさせたくないものが鬱陶しくなるなんてことがあるかもしれません。
このように、概念設計時には原点に戻って前提を疑うことが、 タスクの本質を見出すのに大切になってきます。
まとめ
本当はもっと書きたいのですが、 割り込みタスクが入り込んできたので一旦これで終わり。