## 概要
**背景:テレアポスタッフ - 営業スタッフのお互いの業務が不透明、連携に課題**
**ゴール:テレアポと営業の双方の連携強化と業務レベルの向上**
長期プロダクト開発プロジェクトとしてアサインされました。
主な機能
- ユーザ認証(Google認証・アプリ認証)
- 商談管理(`Googleカレンダー`と連携)
- 顧客管理
- 商材管理
- 目標・成績管理
## 業務内容
① 要件定義
【何を行ったか】ビジネス側からの要求や問題を収集し、それを具体的なソフトウェア要件に変換する作業を行いました。
【課題・問題点】ビジネス側からの要求が曖昧で具体的な要件への変換が難しかった
【解決策】ユビキタス言語の統一、MTGやQAシートを用いて要求を明確化しました。
② DB/ドメイン設計
【何を行ったか】アプリケーションのデータベース及びドメイン設計を行いました。
【課題・問題点】データの整合性やパフォーマンスの保証が必要だった
【解決策】EA図やデータフロー図を作成して整合性のチェックを行ったり、DDDの設計に基づいて、本laravelプロジェクトにドメインclassを導入して、各オブジェクトで項目の型定義などを行った。
③ スケジュール管理
【何を行ったか】開発の進捗を管理し、期限内にリリースできるようにスケジュール管理を行いました。
【課題・問題点】タスクの優先順位や開発スピードの見極めが難しかった
【解決策】redmineを使ったスケジュールを管理、ストーリーポイントをタスクに付与してベロシティ計測を行いました。
④ 実装・コードレビュー
【何を行ったか】ソフトウェアの実装及び他の開発者からのコードレビューを行いました。
【課題・問題点】品質の高いコードの維持、統一感のあるコーディングスタイルの確保が必要だった
【解決策】コードレビューを通じてフィードバックを共有し、品質を保ちました。
⑤ テスト運用
【何を行ったか】ソフトウェアの品質を保つために、テスト計画の作成と運用を行いました。
【課題・問題点】バグの発見と修正が難しかった
【解決策】定期的なテスト運用を行い、早期に問題を発見し修正することで、品質を保ちました。
⑥ 障害調査・対応(AWS)
【何を行ったか】AWSを利用したインフラで発生した障害の調査と対応を行いました。
【課題・問題点】障害発生時の原因特定と修正が必要だった
【解決策】障害ログの分析やAWSのツール(cloud watchなど)を活用して障害の原因を特定し、適切な対応を行いました。
⑦ BizDevOpsミーティングの参加(現場との連携)
【何を行ったか】開発者とビジネス側の連携を強化するためのBizDevOpsミーティングに参加しました。
【課題・問題点】開発とビジネス側のコミュニケーションが不足していた
【解決策】定期的なBizDevOpsミーティングを通じて、双方の理解を深め、連携を強化しました。
⑧ アジャイルの活動(スクラム・ベロシティ計測・スプリント計画)
【何を行ったか】開発プロセスにアジャイル手法を取り入れ、スクラム、ベロシティの計測、スプリントの計画などを行いました。
【課題・問題点】開発のスピードや品質の管理が難しかった
【解決策】アジャイル開発を取り入れ、スクラム、ベロシティ計測、スプリント計画を行い、チームで開発の進行を管理しました。
## 期間
2021/10 ~ 2023/2
## 主な開発環境・ツール
```
laravel 8
docker
mysql 5.7
php 8.0.9
redocly (OpenAPI)
GCP
AWS (EC2 / RDS / S3)
github
```
## プロジェクト人数体制 要員4~9名
| 職種 | 人数(名) |
|:--|:--|
|PDM|1|
|デザイナー|1~3|
|フロントエンドエンジニア|1~2|
|**バックエンド兼インフラエンジニア(担当)**|1~3|
## 技術的な取り組み・工夫
### カレンダーの同期処理
Googleカレンダーと同期する`カレンダー機能`を作成しました。同期ズレによるデータの整合性のバグや、大量の予定データの制御が課題でした。`データベースの最適化`(index,partition)とトランザクション順序の見直しを行って辻褄の会う機能を実現しました。
### バッチ処理用のサーバーの追加
Googleカレンダーの同期処理のリクエストや定期実行のバッチプログラムがかなりサーバーのメモリを逼迫しているという課題がありました。これは1つのサーバー(AWS EC2)で全てのバックエンド処理を行なっていたためだったため、もう一つEC2サーバーを用意し、APIサーバーとバッチサーバーを分離して運用することでAPIのレスポンスなどのパフォーマンス向上をすることができました。
## チーム開発の取り組み
### ユビキタス言語の統一
ビジネス側、デザイナー、PDM、エンジニアそれぞれで違う用語で同じものを指している、というケースが多々発生しました。`日英両方の表記表`を私を含むバックエンドエンジニアが定義し、チームに展開しました。
### 課題の共有
`QAシート`やMTGなどを細かく行い、チームで課題の共有を詳細に行っておりました。また、ユーザーからのアンケートフォームも作成し、現場からのFBもくみ取る仕組みを作成しました。
### インフラ業務の兼任を提案
プロジェクト専属のインフラエンジニアが不在なので、バックエンドエンジニアが担当しました。AWSで構築されているサーバーの障害対応や構成の見直し(冗長化・クラスター構成)、ツールを使った負荷テストなどを行っておりました
### 英語テキストコミュニケーション
- GCPのプロジェクト審査の過程で、メール上で担当者と`英語でのやり取り`が発生しました。何とか学生時代の経験を生かして、コミュニケーションを完遂しプロジェクト承認してもらえることができました。