ROBOT PAYMENT Engineers Blog

株式会社ROBOT PAYMENTのテックブログです

完全外注していたWebサービス開発を内製化した話

はじめに

こんにちは!!

ロボットペイメントさん(以下RP社)にて
約3年半お世話になっておりますSES的エンジニアN岡です。

新卒で営業マンから25歳で某WEB会社へ転職→からのフリーランスとして なんだかんだでこの業界に入って約20年経過しているおじさんエンジニアです。

WEBアプリ開発におけるデザインからフロント、サーバサイドまわりの実装、要件、DB設計等 ひろくあさく(たまにはふかく)、とりあえず開発ならなんでも屋さんとして
請求管理ロボ(以下ロボ)チームのエンジニアとして日々修行を積んでおります。

「ぜひとも内製化したい!お力をいただきたい!」

とのRP社PMからの熱いお誘いをいただきまして以前にいたリサーチ系会社のSESから撤収し現在に至っております。

内製化をしてから約3年が経過しておりますが優秀なエンジニア仲間(SES+社員含む)が参画した経緯もあり、かなり効率的に開発がまわっているかと思います。

この記事ではRP社にて「ロボの内製化」に至った経緯から問題点、内製化した結果どうなったか?についていろいろ語っていきたいと思います。

これからWEBアプリケーションを内製化してみたいな。。。って方への一助になれば幸いです。


目次


なぜ内製化?→内製化に至った経緯

内製化導入理由としては、ごくありがちな理由でいたってシンプルです!!

・ スピーディにリリースしたい(無駄なやりとりに疲弊)
・ よりクオリティを高めたい(社内であればさらに高めることが可能)
・ コストを削減したい(これは外注先の金額にもよりますが・・)  

など。。

内製化前はとある開発ベンダー(以下ベンダー)へ「外注」しておりまして
「開発におけるソースコードを改修できない(こちら側ではリリースできない)」

という契約上大きな制約がありました。(責任の所在がわからなくなるため)

内製化前の社内開発体制は以下のような感じです。

・ 設計者(コードは書かない):4名
・ モック作成:1名 (モック=HTML+JS等フロントまわりの静的画面)

内製化前のリリースまでの開発の流れ

1.RP社:設計者がRFP的なものを作成
  ↓
2.ベンダー:見積+スケジュール検討
  ↓
3.RP社:要件定義・モック作成
  ↓
4.ベンダー:実装+結合テスト
  ↓
5.RP社:受入テスト
  ↓
6.ベンダー:リリース

という感じで、たとえば画面のテキスト数文字程度修正する際にも
上記のやりとりが発生し、かなり「無駄なコスト」が生じてしまいます。。

バグが発生した場合のやりとり等イレギュラーが発生した場合には上記のやりとりに加えさらにややこしくなります。。

当時の優秀なRP社の設計者たちは上記の無駄なやりとりにかなり「疲弊」しておりまして 皆口を揃えて「早く内製化したい!!」という言葉を80000回くらい聞いていた記憶があります。😂


内製化の準備

ごそっとコードをもらって、じゃあとはよろしく!!
という状況だとちょっと厳しいですよね・・😂

内製化をするためにはいうまでもなく「以下の準備」が必要になるかと思います。
→何をもって内製化完了とするか?的な 「ゴールの設定」

 1.「社内で開発できるようにする=開発体制」を構築
 2.ロボの仕様把握(ソースコード・データ構造・画面・外部連携、、諸々)
 3.インフラ(サーバ)まわりの管理体制、契約状態の確認と引き継ぎ
 4.ベンターとの契約解除の準備  

■1.開発体制の構築について

  • 個人環境構築

    • ローカル上にてロボが動作、デバッグができるようにする
    • 仮想環境構築(当時はVagrant 今はdocker)
    • PhpStormの推進(任意。他のエディタ利用エンジニアもおります)
  • ドキュメント整備

  • ソースコード管理 *gitの導入

  • プロジェクト管理

    • Backlog
    • Slack
  • 開発フロー

    • 要件定義からリリースまでの流れ
  • 諸々の規約

    • コーディング規約とかのもろもろルール
  • リリース方法、手順作成

その他諸々。。

※上記内容は内製化直前から直後の体制です。
現状は上記に加えさらにパワーアップしている環境になってます。

■2.ロボの仕様把握

  • ドキュメント精査
  • ソース解析

という感じになると思いますが、、

いくらドキュメント、コードをながめたところで
やはり「一連の開発実装」をしないといまいち把握しきれませんし
他のエンジニアにもうまく実装方法を伝達することができません。。

こちら側では改修ができない!!(本番環境のコードを触れない)という制約もあるので
「開発のシミュレーション」を実施し、一連の流れを把握できるようにしました。

■3.インフラ(サーバ)まわりの管理体制と契約状態の確認・引き継ぎ

ベンダーが契約しているサーバホスティングサービスを
こちら側がそのまま引き継ぎ、監視体制の把握等を行いました。

※現在はトレンディーでカジュアルなAWS環境にて実装しております。
※SREチーム田中さんの記事参照
https://tech.robotpayment.co.jp/entry/2019/08/23/151708

■4.ベンターとの契約内容の再確認、契約解除の準備

SESである私があまり契約に関しては口は出せませんでしたが
内製化のスケジュールを引くためにもこの契約期間・内容をあらかじめ把握する必要がありました。

また、ベンダーが開発中の案件もあるのでその辺についても内製化後にどのように扱うかについて 確認・検討する必要がありました。(保証期間や瑕疵対応について等)


問題点

基本的な問題点はほぼ「ベンダーとのやりとり」でした。

  • 契約解除後に不明な点はベンダーに聞くことができない

  • 契約期間中はコードを改修しこちらがリリースできない(こちらはすでに前述済)

  • 契約解除後のバグ修正対応はベンダーに頼ることができない (これは契約がそのようになっていたためですが・・契約内容もう少し見直せばスムーズだったかもしれません)

  • 内製化(契約解除)が決まってからベンダーが急に冷たくなった😂

内製化した結果

  • 業務のスピードアップ

  • 外注コストの削減

    • 約40%削減に成功
  • 社内技術力の向上・知的ノウハウの蓄積

    • ただし内製化したことにより技術者採用を常にウォッチしていかなければなりません。。

もちろんサービスによっては内製化がマッチしないケースもあるかと思いますが
その辺はビジネス要件にあわせて選択するのが一番よいかと思います。

内製化してから3年経過したこともあり
優秀なエンジニアも増え、開発手法も進化し続けている状況です。

※田本PMさんのスクラム開発導入記事参照
https://tech.robotpayment.co.jp/entry/2019/09/20/153736

今後もさらによりよいサービスを世に提供していくために
RP社さんとともにエンジニア業に精進していきたいと思います!!。

ご覧いただきありがとうございました!。