仕事詳細
▼業務内容
CPC・ターゲティング型アドネットワーク領域で展開している、国内最大規模のアドネットワークであるnend(ネンド)の開発をお任せします。
高負荷な環境下でも最高のパフォーマンスを発揮できるシステムにすることが、nendを支えるエンジニアに求められています。
・具体的な仕事内容
CakePHPを使用したWebアプリケーション開発
リファクタリング、アーキテクチャ見直し、再設計
問合せ対応、運用効率改善
▼ワークスタイル
・次につくるものはどうやって決めるのか?
プロダクトオーナーから一次アイデアや機能の相談があり、ミーティングやGitHubを介した仕様のやり取りを行って実装に入ります。機能改善やリファクタリングなど開発からの提案で決まるタスクもあります。
次に何をやるかの優先度は、ビジネス的なインパクト等を考慮しつつプロダクトオーナー、プロジェクトリーダー、エンジニアリングマネージャーで協議して決めることが多いです。
・タスクの見積もり、スケジュール管理
見積りや計画は、ストーリーポイントを使ったり、期日設定をしたり、プロジェクトの規模や内容に合わせてマッチしたやり方をチームの裁量で決めています。
細かくて変更に手間のかかるスケジュールは組まず、イテレーションを重ねながら徐々に精度を高めていくアジャイルな手法を取ることが多いです。
大抵の場合は、プロダクトオーナーからヒアリングした内容を元にタスクを分割し、GitHubのIssueで管理しています。
・開発プロセス
>モブプログラミング
ドライバーと複数人のナビゲーターに分かれ画面を共有しながらリアルタイムにコーディングしていくスタイルを取っています。心理的安全性やフロー効率性を高める取り組みです。
>アジャイル
アジャイルフレームワークの手法を厳格に守る事はせず、エッセンスのみ取り入れています。機能の目的をはっきりさせ優先度の高い最低限の機能からリリースしていくことが多いです。
>GitHubのIssue / PRレビュー
コードはすべてGitHubで管理しており、プルリクエストを作成し、2人以上のApproveでリリースと言うルールで、スピードと品質のバランスを取っています。
▼業務の進め方
進め方はチームに任されています。
教科書どおり全てに則っているわけではありませんが、アジャイルやスクラムのエッセンスを取り入れつつ、心理的安全性やフロー効率を高めるために、3人1チームのモブプログラミングでコーディングしていくスタイルを取っています。
チームごとにプロジェクトオーナーと協力して計画を立て、Issueにやることリストやリリース要件、テスト項目の記載し実装します。
実装部分に関しては原則全てユニットテストも行い、プルリクエストでのレビューを経てリリースとなります。
運用上、サポートチームや営業からのお問い合わせが発生することもあるので、そういった場合はメイン担当者を決めて一時的にモブチームを抜けて対応したり、チームで解決を図ったりもしています。
また、全体の20%をリファクタリングや学習、エンジニア発信の機能開発等に充てています。
最近ですと、ReactやGoの勉強会の開催、停止したサービスのコード削除、画面のパフォーマンス向上などへの取り組み、全員で広告配信処理周りのJavaScriptを読み解いたり、他チームが開発した機能を仕様書や画面操作、ソースコードから理解を深める時間に使っています。
【技術環境】
サーバサイド主要開発言語:PHP, Scala, HTML, JavaScript(jQuery), CSS
インフラ:AWS, オンプレミス, k8s
データストア:MySQL, Cassandra, Aerospike, Redis, Memcached, Couchbase
構成管理:Chef, Capistrano, Ansible
その他:Circle CI, GitHub, Redmine, Clickup, TreasureData, Slack, Zoom