🐼

一介の平社員が脱レガシーを唱えて新規開発プロジェクトを全て潰した結果マネージャーになった話

2024/02/29に公開

2020年、現在の会社にジョインしました。
それまでは小さな広告代理店の1人ぼっちの社内SEだったので、チームでシステムを構築することを夢見ての転職でした。

当時の私は、php / golang / node(ts) がそこそこ書けて、一人でシステム構築ができるくらいの腕でした。
基礎の知識を重要視していたので、低レイヤーの話やプロトコル、ネットワークなどの知識はありましたね。

AWSはたくさんお金かかりそうで怖くて触っていませんでした。
1人ぼっちだったのでgitを使用する必要すらなく、dockerなども触ったこともない。

思い返してみるとレベルは低かったと思います。
ジョイン前に必死に勉強したのを思い出します。

期待から失望へ

素晴らしい開発を体験できると期待に胸を膨らませての最初の仕事が、営業部からシステム部への社内で使う見積依頼システムの改修でした。

使われている言語はphpでした。しかしphp5.2だったのです。
配列を[]で書けないことにストレスを感じました。

社内で使用するモノだからメンテが後回しになったのだろう。自社開発のシステムの仕事が楽しみだ。
すぐにそのタイミングがきました。

FuelPHP?あまり聞いたことのないフレームワークだ、CakePHPとかLaravelとか触ってきたしなんとかなるだろう。

そんなことを思いながらコードを覗くと、そこには素晴らしくも怖ろしい光景が広がっていました。

  • composerのvendorディレクトリがコミットされている
  • フレームワークのコアファイルが編集されている(バージョンアップどうしてるんだろう)
  • FuelPHPの機能を中途半端に使っている(使いこなせていない)
  • そもそもデータベースの正規化が下手くそ
  • php5.6である

そのシステムは5年ほど稼働しているらしく、ちゃんと新機能の追加などは行われている模様。

ようやく気付きました。作るだけで保守することのできない、そういった風潮のない会社なんだと。それに対して危機感が一切ないことも驚きでした。

聞くところによると、エンジニアの多くはここ数年の間に新卒で入社した子たちばかりらしい。
先輩エンジニアによる研修や若いエンジニア同士のナレッジ共有などは全く行われていませんでした。

素晴らしい福利厚生にあやかって、自己研鑽をすることもなく、ぬるま湯に浸かっている状態でした。外の世界と時間が数年ズレていることに気付けていないようでした。

一部の優秀な子たちは先輩ガチャで当たりを引いたと言っていました。

正直失望しましたね。このままだと優秀な人を採用してもすぐ出て行ってしまうと直感しました。

脱レガシーの決意

まず着手したのが研修・ナレッジ共有です。
現状の社内文化に私は絶対に馴染みたくないと思ったので、社内文化の方を私に合わせるように推し進めました。
1週間に1時間程度、勤務時間中に研修の時間を設けたい旨を上司や社長に伝えOKをもらいました。

研修の内容にはあまり困りませんでした。
Webのシステムを開発しているが、そもそもWebの仕組みはわかっているのだろうか。
ローカルの開発環境がなく、わざわざアップロードしてサーバー上で確認しているが、Dockerなどの便利なツールは使えないのだろうか。
composerの使い方を知っているのだろうか。gitの使い方を知っているのだろうか。

見事にみんな知りませんでした。数年エンジニアとして働いていてこれらを知らないのはどういうことなのか理解に苦しみました。これは先輩エンジニアたちが教えてないのが悪いので、新卒入社の子たちは被害者でしかない・・・と考えたい。

これが脱レガシーの第一歩目です。
事態は急展開を迎えます。

そのころはITP関係で様々なトラブルが起こっていたようで、私もその対応に駆り出されました。
自社の提供するポータルサイトがどういうわけか、様々なドメインで公開されていました。

  • www.example.net
  • www.example.co.jp
  • www.example.ne.jp
  • www.example〇〇.com
  • △△.sample.ne.jp
  • □□.sample.ne.jp

これではcookieを引き継げずに予期せぬ挙動をするのは明白です。
どうにかしてほしいと頼まれましたが、ドメインを統一するしかないです。
そのためには、複雑に絡み合う様々なシステムを全て修正しないといけないこともわかっています。
問題はその複雑に絡み合うシステムの全体を理解している人間がいないことでした。

それとは別で、とある新規サービスのプロジェクトが難航していました。
携わっている営業・エンジニア・デザイナーの全てがやる気を失っていました。
私も感覚的にあまり売れる見込みのないサービスだなと感じていました。

もうこのタイミングしかないと出した結論が 「新規サービスのプロジェクトを全て停止し、主力サービスであるポータルサイトとその管理画面のシステムを全く新しく作り直してリプレイス」 でした。

既存のモノをアップデートしていくやり方は心が病むので、やるならリバースエンジニアリング的な手法です。

根回しと決裁

実現の最大の壁が社長の説得です。

まずは社長の前に、力を持っていそうな社員を味方につけることにしました。

  • これまでかかっているコストとそれを回収するのにかかる年月が妥当か
  • 本当にターゲットはそのサービスを望んでいるのか
  • このままだと優秀なエンジニアやデザイナーが離れていく
  • 新機能を付けたくても作りがゴミすぎてもう無理
  • php5.6はもう新しめのパッケージから見捨てられているから、システムに寿命があると思った方がいい
  • システムだけでなく社内の文化・風土もレガシーだ

こういった説得の言葉と数字を武器に戦いました。数字のマジックは素晴らしいです。
数字は嘘をつかないが、嘘をつく人間は数字を使うとはよく言ったものですね。

社員の多くが「よく言ってくれた」「ずっとそうするべきだと思っていた」と味方になってくれました。みんな心の中でそう思っていたなら行動してくれよ・・・。と愚痴の1つも出そうになりましたが、どうしても権威に逆らえない人間もいるのは仕方ない。と飲み込むことにしました。

あとは社長の説得です。一世一代のプレゼンが終了し、一度持ち帰らせてほしいと、結果を待つことになりました。
ここまで新規サービス開発に時間をかけてしまっているので、コンコルドの誤りが発動してしまう可能性があります。経営者として損切りの概念を持っていて欲しい。そう願うばかりでした。

結果は意外とすんなりと脱レガシーに舵を切ることに決めたということでした。

脱レガシー始動

早急にリプレイス対象をリストアップし、基本的にサーバーレスで保守性を意識したつくりとする方向で部内のコンセンサスを取りました。

保守できる信用がないので、機能を分割してマイクロサービ化を進めることに。

データの流れの把握やインフラ構成・使用する技術の選定、新しくするなら新しい機能がないとユーザーが納得しないので新機能の考案。
言い出した手前、率先してこの会社が培ってきた全てを凝縮したシステムを再設計しました。

ポータルサイトと管理画面のシステムは膨大な作業量を伴うもので、これは1年でどうにかなる問題ではなかったので、歯を食いしばって現行のシステムをアップデートしていくチームと、同じ以上の機能を有する新しいシステムを作るチームを構成しました。

ここまでエンジニアらしいことを書いてないので一応、すごいざっくり設計を書いておきますね。

管理画面のシステム構成は、バックエンドにgolang、フロントはreactでBFFにnodeを採用し、処理の柔軟性と守りたい機能のセキュリティ向上を目指します。
gRPC(Protocol Buffers)やGraphQLを使ったスキーマ定義とコードの自動生成に頼ることで保守性を向上させることにしました。

ポータルサイト側はNext.jsでフロント・BFFのシームレスな開発に加え、バックエンドはgolangでデータベースのR/Wを行うこととしました。

BFFなんて用意しないでデータベースから直接データを読み出せば作るもの減って楽になるのにと思われるかもしれませんね。
プライベートなトラフィックのgRPCリクエストでデータを提供してくれるバックエンドがあることのありがたみは大きく、他システムからも利用しやすいバックエンドなのです。
そこにフロントのための機能を入れると責務が増えてしまうので、BFFにその責務を負わせているのです。

システムだけでなく総務や営業などの仕事のやり方にも、勅令が入り一気に見直しが入りました。作業の効率化や自動化が進められ、この1,2年で様々なことが改革されていきました。

会社全体で脱レガシー運動が起こり始めたのです。

気付いたら私はただの平社員から段階を踏まずに、エンジニアとデザイナーの統括マネージャーとなりました。
百年戦争時のジャンヌダルクが何故かイングランド王から勲章を授かったみたいな話ですよね。特に意味はないです。

脱レガシーに集中したいのに全く別の仕事が舞い込むようになりました。
でも味方になってくれたみんなに頼って何とかやってこれています。

そして今

まさに佳境を迎えています。(いやまだ終わってないんかって思いますよね)
当初はあまりに壮大過ぎて現実味がありませんでしたが、やはりモノが出来上がってくると言いようのない気持ちがこみ上げてきます。

現在は現場のエンジニアやデザイナーが全力でプロダクトに集中できるように、外部からメンバーに降りかかる火の粉を払いながら即断即決の決裁を心掛けています。

メンバーのタスクに納期を設定せずに発破をかけることを信条としています。
納期があるとそんなにかからんやろって仕事も納期に合わせて終わるようにやっちゃいますよね。プロビジョニングよりもオンデマンドの方がクリエイティブには合っている気がしています。

あとは人が育つ社内の風土とは何かを日々自分なりに研究しています。正式には言われてないですが、勝手にVPoEを名乗っています。
隔月の1on1で個々人の目標設定を手助けして、とにかくどんな会社でも生きていけるレベルを目指すようサポートしているつもりです。

こうやって書き連ねてみると意外とマネージャーっぽいことしてますね。
エンジニアとしてのスキルはマネージャーになる前だったら社内25人中3番目くらいと胸を張って言えたかもしれませんが今は5番目くらいですね。

でもやっぱりプログラム書くのが好きで、隙あらば小さな脱レガシーをこそこそやっています。

この脱レガシーというデカい決断をしてくれた社長や助けてくれた会社のみんなには感謝ですね。今までにない経験ができて、私自身の成長も日々実感しています。

駄文でしたが、お付き合いいただきありがとうございました。

Discussion