作成: 更新:

Webエンジニアという生き方① 〜「目的駆動」を中心に生きる〜

このPOSTは約6分で読めます。

対象読者

  • Webエンジニアになろうか迷ってる素人
  • 将来のキャリアに迷う新人Webエンジニア

「Webエンジニア」って何よ

そもそも「Webエンジニア」とはどう言う職業なのだろう?というところから。「いや知ってるよ。エンジニアって"ホームページ"や"スマホアプリ"を作る人でしょ?」非エンジニアの大半のイメージがこれだと思う。本当にそうか?そもそも「エンジニア」というのはどう言った意味なのだろうか?出典を見てみる

エンジニアリング、または工学とは
「数学と自然科学を基礎とし、ときには人文社会科学の知見を用いて、公共の安全、健康、福祉のために有用な事物や快適な環境を構築することを目的とする学問である。」

出典:8大学工学部を中心とした 工学における教育プログラムに関する検討

とあったりする。難しいこと書いてるが要するに「数学とかで人が抱える問題を解決すること」なのである。つまりエンジニアとは本質的なアウトプットとして「人が抱える問題の解決」であり、手段として数学的アプローチをとっているのに過ぎない。別に「ホームページ」や「スマホアプリ」というのは、人が抱える問題を解決する手段の一つでしかなく、別にホームページやスマホアプリ「も」作るが、それが本質的な仕事ではない。ホームページを作成する裏では、「コロナ禍で不況で客足が遠のいてる」という問題と「ECで新規ビジネスを打ち立て新たな商流を確立するための広告やフロントが欲しい」という対策を設定している。それらを設定・検討する段階からエンジニアが携わる。なぜなら、問題が発生している人自体はWeb技術に関して素人であり、そのビジネスに対して、Web技術を使った適切なアプローチを知らないからだ。

ホームページ作るとしても、最適なコストになるための導入方法は?どういうアプローチを取れば、ホームページが問題解決に貢献できる?そもそもホームページは必要なの?ECシステムかもしれないし、スマホアプリかもしれないし、全く別の概念かもしれない。何も作らなくてもいいかもしれない。ってことも大いに考えられる。作らないで解決できるのが問題を抱える人にとっては一番コストがかからず最高だ。(※1)

本当に顧客が必要なものを把握するために、Web技術を中心に、補助的なアプローチとして統計学・経済学・行動心理学なども使ったりすることもある。
私の文脈においてWebエンジニアリングという語を使った場合、上記のようなことを指しているのを大前提として考えていただきたい。

じゃあどう問題に取り組むの?

じゃあWebエンジニアとして早速身につけた技術を用いて問題を解決していこうとする。お客さんが来た。「ホームページを作ってください!」との依頼に答え、ホームページを作った。結果として売上は落ちた。丹精込めてホームページを作ったとしても、お客さんの信用は下がる。なぜか?お客さんが本来解決したかった問題は「コロナで売上が低下している」ということで、それに対して「とりあえずホームページを作れば、いろんな人に知ってもらえるんじゃないか」という苦肉の選択であった。が、しかしホームページを作るだけじゃ新規客の流入にはもちろん繋がらないし、SNS運用を頻繁に行ったりした方がまだマシだ。ホームページの運用コストだけが嵩む。顧客は、問題設定に対しても技術アプローチの選定に対しても素人である。それが故に間違った依頼をおこなってしまったのだ。

(少し雑な例だったが)このように最初の問題設定を間違ったが故に、最高のホームページが完成したとしても、期待とは真逆の結果を産むことは、エンジニアだと常日頃遭遇する。最初の問題設定が間違うと、100%アプローチも間違うことになる。ということで最初の問題設定が肝心なわけだ。ここの精度を高めていかないと、いつまで経っても根本の問題を対応することができない。

別にこれは自分に対しても、である。エンジニアであれば日々直面する。追加要件の実装でも、バグ対応でも、新しく技術を学ぶ際も「その要件は実装する価値があるのか」「そのバグは今治す必要があるのかどうか」「今その技術を本当に学ぶ必要があるか」という判断を迫られる。自分が一日で考えてコーディングできる量、つまり作業量には限界がある。そして人員増加するにもコストはかかる。(※2)
ということで、そもそも問題に取り組む前に「正しい問題設定」を行うことがスタートである。それができるようになって初めてアプローチを決定するわけである。

じゃあ「正しい問題設定」とは何か?まず、その問題が発生した背景には「対象」と「目的」が必ず存在する。例えば私が所属するサウナコンサル・サウナイベントの事業団体「.sauna」のホームページを例にとる

サウナで、つながる。
私達はサウナをテーマに様々なコンテンツを企画・開発しております。
そしてコンテンツに触れた人たちに少しでもサウナの不思議な "魅力" を知っていただきたい。
そしてすでにサウナ愛好家いわゆる「サウナー」の方々にも新しい発見を与えることのできるコンテンツを提供したい。

というコンセプトがあった。つまり

サウナを知らない人(=対象1)に、サウナの魅力を知ってもらい(=目的1)、サウナ愛好家(=対象2)には新たな発見を与えたい(=目的2)

と分解できる。もしこの「サウナでつながる」というコンセプトがあることを知らずにさまざまな問題設定をしてしまったらどうか?場当たり的な問題設定をしてしまい、結果的に無駄な問題に取り組む可能性もある。つまり対象と目的の把握をしてから、問題設定を行う、という順番で取り組まないと「正しい問題設定」ということは不可能である。(※3)
このように、常に対象と目的を把握し、正しい問題設定をできる状態にしておくことを私は

目的駆動

と呼んでいる。目的駆動で常に動ける状態が、Webエンジニアとしてのキャリアのスタートラインだと私は思っている。

まとめ

  • エンジニアリングとは、「人の問題を解決すること」であって、手段として「プログラミング」を使ったりする
  • 問題設定の精度を上げないと、無駄なシステム作ることになる
  • 問題設定の精度を上げるには、常に「対象」と「目的」を振り返る

注釈

  • (※1): ここではエンジニアというものの哲学・思想としての話をしている。だから「作らない」って選択肢も発生するしそっちの方が健全。そしてその思想は割と理にかなっていて「金をせしめてやろう」は長期的に不利だと気付きました。それはまた別の話
  • (※2): 人員増加が開発を促進するとは必ずしも言えないがそれはまた別の話、「人月神話」「two pizza team」とかで調べればいいと思う
  • (※3): 注釈1にも関連するが、私は「顧客として関っている状態であれば、目的を共有することなど不可能」という結論に至った。言い換えると「収益点は同一」じゃないとうまく行きません(Aはユーザからの収益、BはAからの契約金、とかだとうまくいかないってこと)なので私はSIer不要論者です。み○ほ銀行や、セブ○ペイなど歴史もそう語っているが、それはまた別の話