【ゴールデンウィーク営業のお知らせ】
2025年4月29日(火)~2025年5月6日(火)の期間を休業とさせていただきます。
※4月30日(水)、5月1日(木)、2日(金)は通常営業いたします。
※休業期間中にいただいた審査申請については、結果をお返しするために数営業日いただくことをご了承ください。
事業責任者・プロダクトマネージャーになりたいです!!
エンジニアとしてソースコードを書くのが好きなのではなく、ソースコードを書いてできあがるプロダクトを作ることが好きです。
今はエンジニアとして、プロダクトそのものを作るスキルを磨いておりますが、3~5年後にはプロダクトマネージャーとしてプロダクトを成長させていくポジションで活躍したいと思っております。
BtoB間でビックデータを連携するためのETL基盤開発
複数のデータソースからETL形式でデータを抽出・整形・格納をおこなうバッチ基盤の開発
また、AWS上で定期実行させています。
ETL基盤の設計・開発、AWS上でAWS BatchとECRの構築、Docker環境構築を担当しました。
また、開発プロジェクトの責任者も担当しました。
要員数:4名
内訳
PM: 1名
エンジニア: 3名
主にETL基盤設計と開発を担いました。
また、プロジェクトの開発責任者としてチームを牽引しました。
ETL処理の記述を肥大化させないようにするアーキテクチャ設計を心がけました
大きく下記の2点で実現するように設計しました。
上記の設計の話を図などを交えてテックブログも書いておりますのでよければご確認していただきたいです。
https://engineer.retty.me/entry/2020/12/20/153351
これらの設計をチームメンバーに共有するために下記のツールを使用しました。
これにより、他のチームメンバーが開発タスクに着手する際にもある程度理解した状態で開発に着手してもらえる状態にすることができました。
設計で落とし込んだgithubイシューをもとに開発をおこないました。
言語はPython、フレームワークはLuigiになります。
その中で僕が主に担当したのは、ETLアーキテクチャのフレームクラス実装と複雑なTransformの実装になります。
フレームクラスは、Extract、Transform、Loadごとに作成しました。
フレームクラスはコンフィグで設定している情報を取得して、Extract、Transform、Loadの各処理を実行するように作成しました。
そのため、フレームクラスを作成するということは、おのずとコンフィグの設計をする必要もあったので、こちらもおこないました。
複雑なTransformの実装については、主にクライアント同士のデータの突合ロジックを実装しました。
作成しているデータ連携基盤は、複数のクライアントのデータをIDや電話番号で突合する必要がありました。
しかし、別々のクライアントが別々に管理しているデータには、ノイズやビジネス的な制約が多く複雑になってしまい突合するのが非常に困難になってしまいました。
それを解消するために、シーケンス図などを作成してTransform処理の一連の流れを可視化して、ビシネスメンバーに都度確認を取りながら実装しました。
これにより、リリース後も大きな考慮漏れがなく運用を続けることができております。
こだわったポイント
開発の進め方になるのですが、Extract、Transform、Loadの各処理の具体的な処理を実装する前に、ETLの一連のモック処理を実装してフレームを作成しました。
これをマージして、開発メンバー全員がETLのフレームを持った状態で各自具体的なETL処理の実装タスクに着手してもらうようにしました。
一連のETLフレームを作成したことより、下記のような接続部分の不具合が無い状態で開発を進めることができました。
この開発プロジェクトは、スクラム開発で進めました。
週替わりでスクラムの司会を交代して、全員がスクラムの一連のイベントを経験するようにしました。
Googleスプレッドシートでプロダクトバックログとスプリントバックログを作成して進捗管理をおこないました。
毎朝に朝会を開催して、スプリントバックログを使用して進捗管理をおこない、週一でスプリントレビューとプランニングを開催してプロダクトバックログを使用してステークホルダー達に成果発表と次スプリントの計画をおこないました。
ふりかえりシートもスプレッドシートで作成して、週に一回KPTをおこないました。
KTPではチームのKPTだけでなく、メンバーの個人的なKPTも上げるようにしてメンバー同士で親交を深めることでチームワークを高める動きも取りました。
toC向けメディアサービス開発(https://andbar.net/)
toB向け管理画面サービス開発
データ連携基盤開発
各サービスと基盤は、すべてAWS ECSクラスター上でそれぞれECSサービスを作成して稼働させています。
toC向けメディアサービスとtoB向け管理画面サービスは、業務委託会社と契約して開発を進めました。
各種サービス開発のプロジェクトマネージャーとデータ連携基盤開発は、僕が担当しました
要員数:10名
内訳
PM: 2名
エンジニア: 7名
デザイナー: 2名
主にサービス開発のプロジェクトマネージャー兼データ連携基盤開発を担いました。
下記のメンバーの開発ディレクションをおこなっておりました
このプロジェクトでは、2社の業務委託会社メンバー計9名の方々と手を組んで開発を進めておりました。
プロジェクトの進捗管理はスクラム開発方式で実施しました。
Googleスプレッドシートでプロダクトバックログとスプリントバックログを作成して進捗管理をおこないました。
毎朝に朝会を開催して、スプリントバックログを使用して進捗管理をおこない、週一でスプリントレビューとプランニングを開催してプロダクトバックログを使用してステークホルダー達に成果発表と次スプリントの計画をおこないました。
課題点
最も大きな課題点は、コミュニケーションコストが高かったことです
2社の業務委託会社さんと共同で開発を進めていたため、下記のようなコミュニケーションラインとなっておりました。
また、業務委託会社のPMさんが僕らのプロジェクト以外の案件も取り扱っており、僕らのプロジェクトに関わるのが夜18時以降になるという状態でした。
そのため、僕が連絡した内容がエンジニアメンバーに届くのが夜18時以降になってしまい、対応するのが次の日以降になってしまってました。
リリース日は決まっていたため、開発効率を上げていかないと間に合わない状態になってました。
解決策
ビジネスメンバーとコミニュケーションを取って、下記の2点を調整しました
得られた成果
結果として、リリース日に間に合わせることができました。
ステークホルダー達の期待値通りにプロジェクトを完遂させることができました。
ETL処理の記述を肥大化させないようにするアーキテクチャ設計を心がけました
大きく下記の2点で実現するように設計しました。
設計で落とし込んだ内容をもとに開発をおこないました。
言語はPython、フレームワークはLuigiになります。
フレームクラスは、Extract、Transform、Loadごとに作成しました。
フレームクラスはコンフィグで設定している情報を取得して、Extract、Transform、Loadの各処理を実行するように作成しました。
そのため、フレームクラスを作成するということは、おのずとコンフィグの設計をする必要もあったので、こちらもおこないました。
複雑なTransformの実装については、主にクライアント同士のデータの突合ロジックを実装しました。
作成しているデータ連携基盤は、複数のクライアントのデータをIDや電話番号で突合する必要がありました。
しかし、別々のクライアントが別々に管理しているデータには、ノイズやビジネス的な制約が多く複雑になってしまい突合するのが非常に困難になってしまいました。
それを解消するために、シーケンス図などを作成してTransform処理の一連の流れを可視化して、ビシネスメンバーに都度確認を取りながら実装しました。
これにより、リリース後も大きな考慮漏れがなく運用を続けることができております。
登降園管理システムは、保育園の保育士さんで使用するサービスとなります。
保育士さんが園児の登園・降園情報を登録・編集・削除などをおこなったり、請求書出力をおこなったりする業務を支援することが目的として作られたサービスとなります。
要件定義・基本設計・詳細設計・ロジック実装・ユニットテスト実装・結合テストを担当しました。
要員数:6名
内訳
PM: 1名
サブPM: 1名
エンジニア: 4名
主に園児の登園・降園情報を登録・編集・削除機能の要件定義・基本設計・詳細設計・ロジック実装・ユニットテスト実装・結合テストを担当しました。
クライアントさんの要望を落とし込んで、PowerPointを使用して各機能の画面構成と想定される挙動を記載した資料を作成しました。
実際にクライアントさんに見せる資料となるため、図などを多く用いて作成をおこないました。
エクセルを使用して各機能の設計や画面構成を記載した資料を作成しました。
エクセルを使用して各機能の詳細なロジックを設計、DBで使用するテーブルと取得するデータを記載しました。
こだわりポイント
詳細設計でロジックをある程度作成することで、実際にコーディングするときはほぼ手を動かすだけでよい状態にしました。
詳細設計書ができあがったら、その機能はほぼできたと言っても過言ではないくらいの気持ちで作成しました。
詳細設計書を元に機能開発と動作確認を実施しました。
MVC構成のアプリケーションとなっており、フレームワークはSpringを使用しました。
バックエンドロジックは、Java8を使用して実装しました。
コントローラ層とモデル層の役割を意識しながら実装しました。
Viewは、HTML・CSS・JQueryで実装しました。
また、コードレビューもメンバー同士でおこなっておりました。
各機能の品質を補償するためのテスト実装をしました。
テストライブラリは、JUnitを使用しました。
正常系と異常系のテストを網羅的に実装しました。
この開発プロジェクトは、スクラム開発で進めました。
毎日朝会と閉め会を開催して、進捗確認をおこないました。
進捗確認ツールとして、redmineを使用してました。
カテゴリ特化型飲食店紹介サービス開発プロジェクトの初期開発プロジェクトマネージャーをしておりました。
決められた期限以内にサービスリリースをする責務がありました
大きく2つのことをおこないました。
1つ目は開発側の調整で、2つ目はビジネス側の調整です。
▼ 開発側の調整について
開発方式として、スクラム開発を導入しました。
そして、毎日朝会を開催して、スプリントバックログを活用して進捗管理をおこないました。
また、プロジェクトメンバーの大半が業務委託メンバーだったこともあり、コミュニケーションラインが下記のようになっておりました。
僕 <=> 業務委託先のPM <=> 業務委託先のエンジニア
これにより、僕からエンジニアの方達に依頼をするときに必ず業務委託先のPMを通す必要があり、情報に齟齬が発生したり伝達が遅れたりすることが多くなってました。
この状態を下記のようにすることで、コミュニケーションコストを下げて齟齬なく開発を進めることができました
僕 <=> 業務委託先のエンジニア
▼ ビジネス側の調整について
開発の進捗が遅れることがリリースの1.5ヶ月前の時点で分かったため、ビジネスメンバーに連絡して各ステークホルダーとのスコープ調整をおこないました。
これにより、関係者各位に損失を起こすことを防げました。
結果として、リリースも間に合ったのは良い思い出です笑
コミュニケーション能力です。
元々コミュニケーションは問題なく取れる方でした。
しかし、コミュニケーションを取れるだけではチームで大きな成果を上げることはできません。
これからは、チームメンバーを成長させるように立ち回って各メンバーが上げる成果を多くできるようにしていきたいです。
こうすることでチーム全体の成果も上がるようになると思います。
具体的には、自分一人で全てを抱え込まずに周りのメンバーを信じてタスクを依頼していくことが大事だと思ってます。
コードを書く業務をこなす場合は、自宅が一番パフォーマンスを出せます。
プロダクトの設計やチームのルール決めなどを行うときは、会社のオフィスでみんなで顔を合わせながらの方がパフォーマンスが出せます。