価値を生み出せるエンジニアになる

## どんなエンジニアを目指したいか

エンジニアといっても、多種多様なエンジニア像があると思います。特定の技術に精通したエンジニア、顧客からの要求を引き出すのがうまいコンサル的なエンジニア、チームビルディングが得意なスクラムマスター的なエンジニア。

人それぞれ目指したいエンジニアの像はあると思いますが、どれも共通して「価値を生み出せるエンジニア」になることは共通の目的ではないでしょうか。しかし、価値といってもこれまた色々な捉え方ができますね。お金、生活が楽になること、楽しい時間。普遍的な価値ってものはあるのでしょうか。

## 価値とは？

Wikipediaの定義は以下のとおりです：

> 価値とは、あるものを他のものよりも上位に位置づける理由となる性質、人間の肉体的、精神的欲求を満たす性質、あるいは真・善・美・愛あるいは仁など人間社会の存続にとってプラスの普遍性をもつと考えられる概念の総称。 殆どの場合、物事の持つ、目的の実現に役に立つ性質、もしくは重要な性質や程度を指す。

なにかプラスのことではありそうですが難しいですね。わかりやすくするために、こんな例があります。

- 以下はどっちが価値があるでしょうか？
  - 1カラットのダイアモンド vs ミネラルウォーター500ml

この記事を普段の生活の中で呼んでいるなら間違いなくダイアモンドを選ぶと思います。でも、もし砂漠で遭難して生死の境をさ迷っているなら？価値は不変ではなく普遍でもないんです。状況、文化、時間、人によっていくらでも変わります。

## そんなあやふやな存在である価値を生み出すとは？

私はエンジニアなのでサービス開発を通じて価値を生み出すことが求められます。なのでそのサービスが生み出す価値が正しいものかを知っていないと、そもそも生み出すことができないとも言えます。

> 価値を生み出せるエンジニア≒価値が正しいと知っているエンジニア

ただ、そういった物事の価値をはじめから正しいと判断できる人間はいません。今までの経験からの推測はできますが、推測にすぎません。サービスは世に出して、ユーザーに使ってもらうことではじめてその価値がわかるものなのです。なので、その価値の検証の仕方をよく知っているエンジニアであることが実は大切なことなのです。

> 価値を生み出せるエンジニア＝価値が正しいと検証できるエンジニア

## 今までのサービス開発

エンタープライズ系といわれるような開発においては「ウォーターフォール型開発」を中心に進めていました。いくつかフェーズがあり、それぞれに対してそれぞれのプロフェッショナルなチームが担当します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/89911/08eadc27-bf10-740d-ad64-157b92c3fc02.png)

なにかサービスを作るときに仮に以下のような時間がかかるとしましょう。

1. 要件定義: 1ヶ月
2. 設計: 2ヶ月
3. 実装: 3ヶ月
4. テスト: 3ヶ月

全部でリリースまで9ヶ月です。年度初めの4月に開始して、12月には終わる、聞こえによっては早いかもしれません。

ここで価値の話に戻ります。リリースまで9ヶ月ということは作ってから9ヶ月立たないと実際のユーザーに触ってもらえないということになります。言い換えるなら価値の検証に9ヶ月かかる、ということです。これは検証に9ヶ月分のコストがかかるということで、リリースして失敗したらそれは丸々損になってしまう、ということです。

今までは9ヶ月でも良かったといえます。いわゆるSoR(Systems of Record)は、既存の業務のシステム化などが多く、やれば最終的なユーザーに価値を提供できることが約束されていました。例えば以下のような場合です：

- 紙ベースの業務のシステム化
- 対面での作業をオンライン化
- データの集計を自動化

## 変わってきたサービス開発

でも近年、システムの性質は変わってきました。SoE(Systems of Engagement)と呼ばれる、人と人との繋がりのためのサービスです。TwitterをはじめとするSNSやソーシャルゲーム、マクドナルドや楽天のスマホアプリもSoEの一部と言えます。これらサービスはユーザーに触ってもらうまで価値は不透明といえます。

なぜこう変わってきたのでしょうか？これには2つのデジタル革命があると思います。

1. 2006年のAWSサービス開始
2. 2007年のiPhone発売

AWSの登場で誰でもサービスを開発できる世界、iPhoneの登場で誰でもサービスを利用できる世界が来たのです。これにより、Web系企業の勃興のみならずエンタープライズ周りでもSoEへの取り組みが激増しました。そこで価値の検証の必要性が高まったのです。

## 価値の検証のための3つのポイント

価値を検証できるエンジニアになるためには以下の3つのポイントを抑える必要があります。

1. リーンスタートアップ
2. アジャイル開発
3. フルスタックエンジニア

### リーンスタートアップ

リーン(Lean)とは、「贅肉のない、無駄を省いた」という意味です。トヨタ生産方式を礎とするリーンスタートアップはエリック・リース氏が生み出した起業手法です。

[リーンスタートアップ：エリック・リース著](https://www.amazon.co.jp/gp/product/4822248976/ref=as_li_tl?ie=UTF8&camp=247&creative=1211&creativeASIN=4822248976&linkCode=as2&tag=takahiroyte-22&linkId=3c2c939842854f1cc2fb376ee3ee26b3)

リーンスタートアップとは、一言でいうと「作ろうとしているモノの価値を検証する」ための手法です。アイデア思考やプロトタイピングを繰り返してサービスの「コンセプトの価値」を検証します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/89911/caaa2cb4-3029-a714-95af-174863e69076.png)

コンセプトが正しいかだけを検証するので、実際のサービスを作る必要はありません。ユーザーにプロトタイプを触ってもらって方向性を検証し、価値の方向性が間違っていないことが確認できたら開発に進むのです。

### アジャイル開発

アジャイル(Agile)は、「素早い、機敏な」という意味です。[アジャイル開発宣言](https://agilemanifesto.org/iso/ja/manifesto.html)を元とする、開発のマインドセットや方法論があり、それを実現しやすくするスクラムやXPといった開発方式があります。

アジャイル開発は、一言でいうと「作っているモノの価値を検証する」ための手法です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/89911/8444922c-f1bd-f605-8ce4-2e179dbcced2.png)

### フルスタックエンジニア

フルスタックエンジニアとは、アプリ開発に必要なたくさんの技術を備えたエンジニアを指します。

- フロントエンド（画面側のアプリ）
- バックエンド（サーバー側のアプリ）
- データベース
- インフラストラクチャ（クラウド）
- セキュリティ
- 運用管理
- ネットワーク
- 外部サービス連携

なぜフルスタックエンジニアが重要かというと、リーンもアジャイルも早い段階での「価値の検証」のための手法なので、大人数での開発は難しいです。人数を用意できたとしてもフェーズごとにチームが分かれると情報伝達のロスなど色々問題が起きてしまいます。なので少人数でも色々実現できる力が求められるのです。

フルスタックエンジニアは一言でいうと「価値の検証を実践する能力があるエンジニア」と言えるでしょう。最初からチーム全員がフルスタックである必要はありません。足りないところを補いつつ、アジャイルなマインドで最終的にはクロスファンクショナルチームを目指すことが大切です。

## まとめ

重要な3つのポイントをまとめると以下のようになります：

1. リーンスタートアップで作ろうとしているモノの価値を検証する
2. アジャイルで作っているモノの価値を検証する
3. これらフェーズをフルスタックエンジニアの技術力をもって実現する。

これこそが正しい価値をスピーディーに生み出すエンジニアが取るべき方法の1つです。これらの考え方を体系立ててフレームワーク化した[SAFe(Scaled Agile Framework)](https://www.scaledagileframework.com/)が最近米国を中心に小規模から大規模開発まで対応した方法論として人気が出てきています。私が次書く記事ではそのSAFeについて少し書いてみようと思ってるので、お楽しみに！