【実体験】失敗しない！技術導入 プロセス×スタンスのマニュアル

## 始めに
お久しぶりです、るんるんです。

私の実体験に基づいて、今日は新しい技術を導入する際の手順や心構え等を紹介したいと思います。

トレンド技術に興味は合っても、いざ使用すると様々な障壁にぶつかります。その障壁を乗り越える方法を大公開します！！

いいね貰えると嬉しいです！🥰

こちらにも様々な記事を公開しています。ぜひご覧ください！！

https://runtech-blog.netlify.app/


## 本記事での「技術導入」の定義
本記事での技術導入とは、

**導入実績のない技術やサービスを、既存製品ないしは新製品に組み込もうとする行為**

とします。

例:
- 追加開発にて、サーバーサイドを Rust で書いてみる
- 新製品開発にて、DB に AlloyDB を導入する
    - AlloyDB の導入については、[こちら](https://runtech-blog.netlify.app/importing-technology/) で詳しく書いています。ぜひご一読ください！


## メリット・デメリット

次に技術を導入することのメリットとデメリットを見ていきましょう。
メリットに関してはある程度ご認識頂いていると思いますが、デメリットは見逃されがちです。

### メリット

##### 製品に新たな可能性が生まれる
新たな技術を導入することで、その製品のポテンシャルそのものを引き上げることができます。

できることが増加して新たな価値を生み出すきっかけとなるのが、技術導入です。

##### 開発スピードの向上
元々煩わしかった作業が新技術を導入することで改善することだってあります。
これらは主に業務効率改善系のライブラリやサービスにあたると思います。

例えば、Python のライブラリマネージャーの [poetry](https://python-poetry.org/) などでしょうか

こういった開発スピード向上に繋がる技術導入は積極的に行いたいですね！

##### 競争優位性の向上

新しい技術を導入することで、市場での差別化を測ることができます。つまりトレンド技術を使用することはステータスなのです。

これは技術的な優位性だけでなく、採用活動でも効果を発揮します。エンジニアというのはトレンド・最新技術に弱い生き物ですから、会社のアピールポイントにすることだってできます。


---

### デメリット

##### リソースと時間を要する

例えば、新規プロジェクト内で新しい技術を導入するとなると、それだけで初動が遅れます。

スピード感を求められる開発現場での技術導入というのは極めて困難です。

##### 開発スピードの低下

メリットの方でスピードが向上すると言いましたが、反対に低下するパターンもあります。

新たな技術を導入することで、自分を含めたエンジニアに学習コストがかかります。
そうなると、開発作業全体でみると開発スピードが低下してしまう可能性があります。

ただしこちらは導入初期に見られる傾向で、しばらくすると元に戻る or 向上します。

##### サポート体制の不足
新しすぎる技術だと、公式からのサポートやドキュメントが整備されていない可能性があります。

未知のバグ等もあり、本番環境に向かない可能性があります。


## プロセス

それでは技術導入を行う際の手順について紹介します。

### 1. 調査
対象の技術について調査します。
主に以下のことを調べます。

- 要件にあった技術なのか
- 特徴は？
- 似た技術はあるのか？何が違うのか？

これらを調査して、良さそうなら次のステップに進みます。

注意すべきなのは、ここで**時間をかけ過ぎないことです**。もちろん入念に調査することは大切ですが、実際に触ってみないと分からないこともあります。また実際に触ってみて分かったことや問題点こそ一番大事です。

### 2. 実験

調査しただけで 「さぁ導入！」とはなりません。
調査したことは氷山の一角です。実際に使ってみないと分からないことだらけです。

要件にあったサービスなのかを検証する必要があります。

実験方法に関しては様々ですが、場合によっては検証用環境を作成から始まることもあります。

以下のことを調査した内容と見比べながら、逐一記録を付けていきます。

- コスト面
- 使いやすさ（なるべく客観的に）
- 速度
    - 例1: DB クエリ実行速度
    - 例2: Compute Engine のインスタンス生成速度


### 3. 導入実験

要件にあっていることを判断できれば、導入実験に入ります。

ここでは主に製品に組み込むことができるかを実験します。

方法としては、例えば、製品開発ブランチから検証用(DO NOT MERGE)ブランチを切って実装してみるなどがあると思います。

導入実験することで見込める成果は、既存で使用しているライブラリとの衝突やバージョンの互換性が取れないなどの問題を発見することができることです。

いきなり導入して実装しようとしても手戻りが発生するだけなので、導入実験フェーズで問題を洗い出すことが出来ます。

### 4. 導入

導入実験時にて問題を発見して、問題を解決できた(or できそうなら)、やっとここで導入作業に入ります。

新技術を導入するということで、他の開発者への周知を忘れはなりません。
場合によっては、新技術を動かすためのマニュアル等が必要になるかもしれません。


![コーディング.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3518711/bec159dc-3aa6-9863-e6e1-b9b0af854a94.jpeg)


## スタンス
最後に、新技術の導入を任された際の心構えを紹介します！
これで、「明日から技術導入の仕事よろしく！」「...やめさせてもらいます」とはならず済みます！

ではいきましょう

#### 導入する技術に固執しない

技術導入をする本来の目的は **「製品やプロジェクトを成功させる」** ことです。
技術導入はあくまでも手段にすぎず、目的としてはなりません。

また、調査している技術を疑い続ける必要があります。
本当に導入する必要があるのか？
既存で使用している技術・サービスで解決できないか？
導入するならこの技術で良いのか？もっと最適なものはないか？

これらを念頭に調査から実験、導入まで行う必要があります。

#### スケジュールを整理して周知する

技術導入は一筋縄では行きません。
**はっきり言って、工数やスケジュールが読めないです。**
予想もつかない角度からの問題やバグが発生するものです。

だからと言って、スケジュールを有耶無耶にしてはなりません。

常にチームや上司に状況を共有して、問題が発生すれば、すぐにリスケをする。スケジュールが読めなくても、 **社会人として当たり前をしっかりやろう** ということです。

#### 自分のキャリアにとって、大きな経験になる

「技術導入をした」という経験は非常に強いです。

私が新しい DB を導入した際のモチベーションはここにありました。

もし新しい技術を導入したいという案件が目の前に転がっていたら、それは飛びついた方が良いでしょう。**経験ダイヤの原石** かもしれません。


## 総括
如何だったでしょうか。

今回は技術導入について語ってみました。

難易度的にも高いタスクで大変なことは間違いないですが、その分得られるものも大きいです。世の原理ですね。

私は社会人2年目で、AlloyDBや共有VPCといったクラウドのサービスを会社に導入できたことを自信に思っています。
この経験を糧にネクストステップでも頑張っていきます！

![階段-矢印.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3518711/9a6ab115-97b0-d736-b93f-c3c7974c9229.jpeg)