![見出し画像](https://assets.st-note.com/production/uploads/images/127249813/rectangle_large_type_2_d37ace741a56d3bbb8033c1b09c43490.png?width=1200)
「事業をエンジニアリングする技術者たち(1章)」 の読書メモ
本の概要はこちらから
この本に期待していたこと
具体的な事例を通して、事業にインパクトを与えるようなエンジニアリングのカルチャーや手法を学んで真似したい。
事業をエンジニアリングするとはどういう意味か、フルサイクル開発者とはどんなエンジニアか、のヒントを得たい。
「第1章 fluct 広告配信の舞台裏の技術者たち」より
2010年頃、広告配信システムのうち、SSP(Supply Side Platform)と呼ばれるWEB広告の掲載側で利用される仕組みを提供するサービスの開発のお話。
開発スタイルの変化
最初はWBSを基準に機能をすべて埋めてローンチした。進め方は2週間に1回リリースする小さなウォーターフォールのような方式だった。
手動のデプロイだったものからMakefileで半自動化、その後Jenkinsを導入し、デプロイ頻度があがっていった。
とりあえず使ってみる文化
makeやJenkinsなどの導入は上が決めたことではなく、「とりあえず使ってみて」うまく行った結果、徐々に活用する人が増えていった。
データ処理に使用していたのはオンプレのHadoopだったが、これもAmazon ERMやGoogle BigQueryを試しに使ってみて、処理の早かったBigQueryへ移行していった。
MEMO:検討するよりも、試してみる方が早い。自分の経験にもなる。
DevOps
インフラを見ていたSER部門を、開発本部と統合した。DevとOpsが分かれているのが悪というわけではなく、同じ目的を共有するチームの間で「依頼」が発生するのが本意ではなかった。開発でインフラを自然と使えたり、ペアで一緒にインフラを作れた方がよいと考えた。
MEMO:DevOpsはフルサイクル開発者への一歩
SRE(Site/Service Reliability Engineering サイト/サービス信頼性エンジニアリング)に対する考え方
障害に対する恐れが大きくなると、デプロイが怖くなる。デプロイを減らすと、さらに恐怖が増して事業の成長スピードが落ちる。細かく早くリリースし、それに適応して経験を積むことで、チームもプロダクトも成長できる。
オブザーバビリティ
問題が起きた時、それに気づけるようにしないとデプロイが不安になる。デプロイ頻度を上げるだけでなく、問題にいち早く気づけないと意味がない。
サーバー側のメトリクスだけでなく、アプリケーションに関するメトリクスも取得する。
また、障害が起きたときは「このメトリクスが取れていればよかったのでは?」と振り返る(ポストモーテム:検死)
技術的負債との戦い
リリースから時間が経ち、システムの複雑性が増していった。システムのどこを変えると何が起きるのか、だんだん見えなくなっていった。それに伴い、既存システムに対する影響範囲を調査する時間が増えていった。もっと読みやすく、早くしやすく、書きやすいコードに変えていく必要がでてきた。
リファクタリング類語
リファクタリングは、ソフトウェア自体の挙動を変えずに、理解・修正しやすいよう内部構造を変化させること。
リアーキテクティングは、リファクタリングの一種だが、リファクタリングよりもスコープが広く、サービス全体の構造改善やモジュールの責務整理などを指す。
リプレースは挙動も含め、ソフトウェアそのもの全体を書き換える行為。
実際のリファクタリング
IDEや静的解析ツールによるコード探索がしやすくなるよう、PHPのrequire_onceを撤廃してuseにしたり、PSR-4準拠のレイアウトに変更した。
HTML + jQueryだったフロントをReact + JSONによる画面に書き換えた。
長らくメンテナンスされていないOSSの使用をやめ、テストしやすいライブラリやミドルウェアに変更した。
リファクタする腕力
「時間が無限にあればやりたいが、今は緊急の対応を進めないといけないからできない、暫定的な実装」を繰り返さない、許さない。まずは例外処理の統一化から手をつけた。重要だけど緊急ではないから誰も手をつけないところ、をゴリゴリ巻き取っていく力、放置しない力が必要。また、何か技術的負債の返済ができそうな時に、それをやってもいい!と思える環境もあると良い。
MEMO:プロダクトの成長スピードを鈍化させないためにも、クリーンなコードを保つ必要があるのでは
感想
まだ一章しか読んでいないのに、なんて中身の濃いインタビュー本なんだろう。事業やチームのために必要なことは重要なことだ。面倒なことでも放置せずに取り組もう。
この記事が気に入ったらサポートをしてみませんか?