enPiTに参加し、初めてアジャイル開発をしました

今回大学の授業でenPiTというものに参加しました。

enPiTはなんぞやというと、以下のサイトにはたいそうなことが書かれていますが、簡単いうと、アジャイルソフトフェア開発のプロセスを学びながら、ユーザーへ新たな価値を提案することを意識した開発を行うというプログラムです。（あってなかったらごめんなさい）
https://www.enpit.jp

10月から1月ごろまで約４ヶ月、合計15スプリントで開発しました。

今回は授業で作ったプロダクトの説明やアジャイル開発の感想などを書いていきます。

# 今回開発したプロダクトについて
### 約束に間に合わないグループ向けのラインボットであるPromiseeを開発しました。
Github:https://github.com/enpitut2023/promisee_linebot

LineQRコード

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3513930/a9eaedf7-e1aa-9668-e25a-95e2734e7fa8.png)

## プロダクトの開発背景

想定しているユーザーは学生友達グループで、遅刻した人が遅刻された人にギフトを贈ることで、遅刻しても雰囲気を崩さず、約束の遅刻による気まずさを解消し、楽しく集まることを目的としています。簡単にいうと詫びギフトです。

遅刻を誰かがすると、遅刻された人はイライラするし、遅刻した人は罪悪感を覚えると思います。その問題を解消すべく、ギフトを遅刻した人が送るという仕組みをアプリ側である程度自動化し、あらかじめ同意しておくことで、遅刻する人もされた人もギフトというペナルティーを通して、もやもやを解消できるのではと考えています。

## プロダクトの使い方
使い方としてはグループラインにPromiseeを招待して、「予定登録」と送信すると、時間や送るギフト、約束に参加する人数の入力が求められるので、入力していくと、予定が登録され、時間になったら、アンケートリンクが送られてきます。そこでアンケートに答えて、間に合ったかどうかを判定し、間に合わなかった人はLineギフトのURLが送られるので、そこからギフトをグループ全員に送るという流れです。

言葉だけではわかりにくいかもなので、ユーザーストーリーを図にすると以下の感じです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3513930/1d714da6-18f1-1e1f-1411-a02fd14839c8.png)

## 使用技術
使用技術としてはLinebot,LIFFのバックエンドはどちらもFlaskを使い、LIFFのフロントはHTML,CSS,JavaScriptで、デプロイはGCPのApp Engine、データベースはFirebase。その他LineMessagingAPIを使用しました。

# 開発チームメンバー
* SakuraiSumika（PO) 
    * プロダクトオーナーとして、アイデアをたくさん出していた。
    * チームのリーダー的な立ち位置として、スプリントごとの会議を仕切ったり、発表をしていたりしていた。
* akari728(SM)
    * スクラムマスターとして、議事録を取ってまとめてくれていた。話し合いに夢中になってしまうのでありがたい。
* kadota05
    * たくさん意見をもらった。面白く、雰囲気が良くなる。
* shin0314
    * 少し変わった角度からの意見が多く、自分にはない意見をもらえる。
* nope0124
    * 技術力があるので、2つにチームを分けた時の片方のリーダーを担当。頼りになるつよつよ。
* y-hrtk
    * 自分の意見に冷静に意見を出してくれた。自分自身がよく自分の意見で突っ走ってしまうので、そこのブレーキ役としてありがたかった。
* 自分
の合計７人


# 自分自身の役割
バックエンドとインフラ周り全般を担当。自分はチームの中では割とコードが書ける方だったので、スプリントごとのタスク分けや質問対応、FigmaによるLineBotの技術的知見の共有や次実装する部分の構成、ペアプロなどを行いました。

話し合いの時にはとにかく意見を出したり、話を振ったりして、話し合いの活性化に努めました。


# 全体のアジャイル開発の軌跡
最初の方のスプリントはなかなか開発に入れず、何も進捗がない状態が続きました。話し合いをした時、同じ目的を持って集まったと思ったら、プロダクトが「個人向け」か「グループ向け」かや、ペナルティーは「厳しくする」か「軽くする」かなどさまざまなところで目的が食い違い、そこの統一をするのにとても時間がかかってしまいました。

チーム内ではどうにもできない感じだったので、ユーザーへのインタビューなどで内容を決めることにしました。

次にいざ開発に入ろうとしますが、ここでも色々と右往左往しました。
Flutterで開発しようとしていたのも方向転換され、Linebotになるし、Linebotが誰もわからないので、1から勉強する必要があるし、Linebotがそもそも機能が限定されていて、やりたいことができないし、Linebotをローカル環境で試す環境構築方法に詰まるしで散々な感じでした。結局一部の人以外、ローカルで試す環境を構築できていませんでした。

早く開発に入らなければという焦りが自分はあったので、勉強したら、それをチーム内に以下のように共有してました。
https://www.figma.com/file/zn6LdQmcCjxRRbO9a3MfVj/%E7%84%A1%E9%A1%8C?type=design&node-id=0%3A1&mode=design&t=3d7K5Ygb7aZ2jJGq-1


開発がやっと始まってからもチーム全体としての残業はゼロと決めていて、かなり時間的に厳しい開発であったため、全然進捗のない中、どうプロダクトの価値を検証するか、フィードバックをもらうのかの壁にぶち当たりました。秋からプロダクトの案を練り始めたので、作る前の段階でかなり時間を使っていて、実際にほぼユーザーに提供できるものがないのに、授業としてはレビューの時間が来るということが多かったです。
グループラインボットだからいちいちグループ作らなきゃ使ってもらえないというかなりフィードバックの得にくいプロダクトだったことも関係していると感じます。

フィードバックについて一つ感じたことは、フィードバックの聞き方が大事だと感じました。ただ、質問を投げて、テキストで回答させようとするとなかなか回答が集まりませんでしたが、選択肢にすると回答率がよかったです。

最終的にはなんとか形にはなりましたが、実際に自分たちで試す時間や他の人に試してもらう時間がないまま、最終発表会になってしまったので、そこは良くなかったなと思います。


# 個人の振り返り
正直、あまりうまくいったとは言えないと感じていて、もっとできたことがあったのではと感じています。進捗を出さないといけないいう気持ちと自分がやりすぎるのはよくないという気持ちで挟まれて、だいぶ苦しんでいました。ペアプロでドライバーをあまりコードを書くのが得意ではない人にしたり、自分の学んだ情報を共有したり、みんなに授業外の残業を打診したりしましたが、どれもうまくいかず、できる人でコードをほとんど書いてしまった感が否めません。（もちろん少しはやってもらった部分もありますが）
個人的にはせっかくチーム開発なのであれば、チーム全員が開発に携わって、自分たちが作ったと自信を持ってプロダクトを出せるようにした方がいいと思うし、そっちの方が楽しいと思います。
ほんとは授業外で勉強会とかやりたかったですが、ちょうど開発が軌道に乗っている時期はテスト期間で無理でした。

また、進捗を生まなくちゃと思うあまり、アジャイル開発もうまくできたかというと微妙です。もっとしっかりMiroを使ってやることが望ましいとわかっているもののそこの整理に時間をかける余裕もありませんでした。（メンター、教員の皆様申し訳ありません）

かなり心残りの多いチーム開発でしたが、今回の反省を他のチーム開発にも活かしていきたいと思います。

### ここまでだいぶ暗い話でしたが、いい部分ももちろんありました！

実は自分、この授業で初めてチーム開発をしたんです。そして、この授業で知り合ったメンバーと外部ハッカソンにも出ました。そこからチーム開発の楽しさを知り、自分でプログラミングもより勉強するようになって、今ではハッカソン大好き人間として、その後、何回かハッカソンに出てます。自分にチーム開発の楽しさを教えてくれたこの授業には感謝しかないです！

また、授業やゲスト講義を通して、アジャイル開発の方法論や考え方を学べたため、外部のハッカソンのチーム開発の際にその知見を活かすことができました。特に、最小限で作って、フィードバックを得て、作り直していくというサイクルを繰り返すのが大切という考え方は今でも心に刻まれています。


長くなりましたが、非常に楽しく、充実した授業でした。enPiTに関わった全ての皆様に感謝を申し上げます。筑波大の情報学群の今２年生の方が見てたら、おすすめです！