学生団体(非IT)で資金管理アプリのPMをやった時の苦労話

この記事は学生が見よう見まねにPMをやった結果の苦労話なので、シン・PMの方々から見たら稚拙だと思いますが、微笑んで見てくださると助かります。

# 前提知識
## 技大祭実行委員会
長岡技科大の学園祭を取り持つ委員会です。
総務・渉外・財務・情報・企画の五つの局があります。
私が所属しているNUTMEGはその情報局の別名でもあります。

## FinanSu
財務局むけの技大祭の資金管理アプリです。
使うのは財務局だけではなく、物品を購入した他局員や、企業協賛を受け持つ渉外局も使用します。

<iframe src="https://docs.google.com/presentation/d/13MDFLSlJoL7IjJAYpROsIqTJSDR6whIZ/embed?start=false&loop=false&delayms=3000" frameborder="0" width="960" height="569" allowfullscreen="true" mozallowfullscreen="true" webkitallowfullscreen="true"></iframe>

## ざっとした機能
- 財務局向け
    - 教員からの募金をを管理するページ
    - 委員が勝った物品をを管理するページ
    - 教員のデータをを管理するページ
- 渉外局向け
    - 協賛予定の企業をを管理するページ
    - 協賛する種類（ポスターとか企業ブースとか）を管理するページ 
    - 協賛した結果を管理するページ

FinanSuのPMを先輩から受け継いで、リリースまで結びつけることができたので、それに際して、やって良かったことや、もっと改善できることをまとめました。

# なんでPMをやったんや！
そもそも、なぜ自分がPMをやったのかについての経緯を話します。

技大祭が開催される頃、自分のNUTMEGに対するモチベーションはほぼありませんでした。
大まかにReactやNext、デザインの初歩を学び、今まで独学で勉強してきた自分にとって、これ以上NUTMEGにいなくても成長できるだろうと調子にのっていたからです。

自分はプログラミングを学ぶために技大祭に入りました。
誰かのためにサービスを作るというより、面白そうな技術を使って、面白いことをしたかったのです。

なので、これ以上NUTMEGにいなくても十分やりたいことができるだろうと思いましたが、NUTMEGの創始者にそれを見透かされたのか、以下のようなことを言われました。


> NUTMEGはプログラミングサークルではない
⇩
技術系団体ではない技大祭実行委員会の中で開発をする(=内製化)
組織の問題を見つけて、それを解決する(=DX)

> 内製化DXを学生のうちに体験できるのはNUTMEGだけで、とても貴重な経験
プログラミングの勉強なんて、独学でやってきた人なら、就職したってできる
でも内製化DXを学生のうちにできるのは今ここしかない
 
> 技術力は、世代を経るごとにどんどんレベルが上がっていくし、いずれ抜かされる
でも、学生のうちに内製化DXをして、解決思考を身につければ、この能力はなかなか抜かされない

これを受けて、自分が成長するためにやるべきことは、NUTMEGに最大限貢献できる動きをすることだと思いました。
それが複数の局に関わるFinanSuのPMをやることでした。

# やってよかったこと
## 実際の完成時期は予定の1.5倍を想定する

例えば、完成までに6ヶ月かかる場合は、実際のリリースまでは9ヶ月かかると想定するべきということです。こちらも相手も学生でありプロではありません。レポートとか課題とかバグとかバグとか仕様変更とか仕様追加とかあるからね。

FinanSuは10月に受け継いだので、直帰のタスクである機能の改善と完成まで7ヶ月ほどあります。
この7ヶ月から逆算して、大体4~5ヶ月でできるタスク量を想定しなくてはなりません。
なので、受け継いだ当初は、以下のようにめっちゃスモールな目標を立ててました。

- 次の5月までにやること
    - FinanSu初期リロードがクソ重い問題の解消
    - 購入申請・報告ページのバグ修正
    - Chakra UIからTailwindCSSへのリファクタ
    - 予算・支出ページの実装
    - (できれば)募金ページのスマホ対応
- 来年以降やる予定だったもの
    - 協賛全ページの実装
    - FinanSu全ページのスマホ対応

しかし、タスクを進めるにつれて、「あれこれできるんじゃね？」が重なり、**結局全部達成しました。やったぜ。

また、スケジューリングはFigJamで管理してました。
多分概ねこの通りにできたのかなと思います。（今見たらちょっとありえない管理方法です。恥ずかしい。）

![](https://hackmd.io/_uploads/ryjP0PZO3.png)

## ヒアリングした結果を優先度と重さに分ける
ヒアリングで上がった問題を参考に、それぞれのタスクを切り分けで、どれが重いタスクで、どれが優先度の高いタスクかをわけ、それをもとにタスクを振っていきました。

![](https://hackmd.io/_uploads/HJW7Lob_h.png)

## やるべきラインを見積もる
上がった要件と、NUTMEG側の実装したい要件から、最低限何をすべきか、追加でやれることは何かに分類しました。

![](https://hackmd.io/_uploads/rJzTUo-On.png)

## 無駄なissue / PRを絞る
自分が引き継いだ当初、何年も前からあるissueやPRが40個とか残ってました。
これを残したままにすると、現環境との乖離が進み、結局やるのかやらないのかはっきりもせず、プロジェクトを進める上で負債となってしまいます。
先輩に聞き、今残すべきissueとPR以外をcloseして、今現在ではissueが16個、PRが2つになっています。

## ルールを厳密に
issueやPRのテンプレート作成し、各タスクについてどのような開発をするのかを明確にするようにしました。特にプログラミング勉強し始めの人はあまりここら辺にこだわりがないので、手を抜くとissue/PRの可読性が終わります。

また、commitメッセージやブランチ名のルールも設定し、誰がどのように開発したのかを明確にするようにしました。

```
commit: [prefix] content
例: [fix] 協賛活動のバグ修正

branch: {prefix}/{user}/{issueNo}-{content}
例: feature/imaimai/532-add-activity-page
```

## GitHub Projectsの活用
issueの一覧をGitHub Projectsによって、TODOリストのように管理することができます。
[FinanSuのProjects](https://github.com/orgs/NUTFes/projects/6/views/1)
各進捗ごとによってボードを変え、タスクの大きさと優先度のプロパティも追加しました。
![](https://hackmd.io/_uploads/SyOZVZzO3.png)


## GitHub Actionsの活用
GitHub Actionsを使って、Gitへのアクションをトリガーとした便利機能を増やしました。
- commitやpushをすると、自動でLintやBuildが走ってテストできるようにする
- ブランチ名から、BugやEnhancementといったタグが自動でつくようにする
- mainにmergeすることで、自動でリリースノートが書かれるようにする

## ミーティングや進捗管理のあり方

情報局MTやキックオフミーティングでは、チームビルディングをしてみんなで仲良くなろうという流れがありますが、あくまで**他人の時間を奪っている**ことを忘れないようにしました。

最初のうちは

- チームビルディング
- 決めるべき要件や話し合う内容があればそれを決める

ようにしていましたが、互いのことがある程度わかって、話し合うことも特にない場合は、MTは作業会にし、Slack上で進捗管理をするようにしました。
また、期限中に終わらない場合は、すぐに巻き取れる環境を用意して、心理的安全性を保つようにしました。変に伸ばさず、「終わりません」と自ら早めに言える環境は大事だと思います。

# 運が良かったこと
### チームメンバー

自分がPMになった時、FinanSuのチームメンバーは以下のような編成でした。

- わい：PM初心者・フロントまあまあ
- NUTMEG先輩1：フロントつよつよ・前PM
- NUTMEG先輩2：局長・バックエンドつよつよ
- 渉外と兼局先輩：渉外プロ
- 財務と兼局先輩：財務プロ

めっちゃバランスよかったです。
そこに

- 同級生1（先輩が誘った）：バックまあまあ、最近はフロントもかける
- 同級生2（ぼくが誘った）：モバイル・バックまあまあ、最近はフロントもかける

が加わったので、結構盤石になった気がします。二人とも自走力が高いので、今はフルスタックになりつつあります。
良さげな人はバンバン声かけて行って良かったなと思います。

### 絶対必要ってわけじゃなかった

やベェFinanSu作らねぇと募金も協賛も終わる！！
って思ってたんですが他局長も有能だったので、FinanSu代わりのスプレッドシートを作ってくれていました。
FinanSuが仮に終わってもクッションがあるので、心理的安全性高かったです。

もっというと、失敗した場合にどうするべきかまで考えるといいと思います。
それが動かなくてもいい方法を用意しておくとかね（スプシ・GoogleForm）

だけどスプシでよくね？論が相手方に起こる可能性があるのでそこそこ苦しかったです。
アプデして差を開いていかねば...

# 精神的不安
これ終わるんか？という不安や、FinanSuという大きいプロダクトを引っ張っていく責任が思った以上に大きく、PMを初めて数ヶ月は苦しかったです。
先輩との1on1でボロ泣きしたり、NUTMEGの飲み会で「PM辞めたい！」って喚いたりしたこともありました。

### 何が苦しかったのか
- やりたい開発ができない
- レポート・仕事&インターン・就活・PMという多重苦
- 就活や仕事など、高レベルの体験が始まり、NUTMEGにいる意味もわからなくなってきた
- でもPMは受けた手前辞められないし、今更NUTMEGをやめるのも違う気がする

### どう解決したか
- 仕事を1つに絞った
- 就活とレポートを終わらせた
- 責任や不安がどうでもよくなるくらい、ひたすらFinanSuを開発した（PMもやりながら）
    - あれ〜意外と間に合うんじゃねってなってきた
- ついでに自分のやりたい開発も、睡眠を削ってひたすらした
    - [当時作ったやつ](https://drive.google.com/file/d/1DiWzPdp9bSQitMH9iDuyGNsr4FGFS-g5/view?usp=sharing)（１月のLT会で発表した）
- スマホページ&協賛関係ページの完成まではPMをやり切ろうと決めた

# 学生特有の問題について
## 団体/チームから抜けちゃう
入ったばかりのメンバーがその団体に感じる価値は繋がりと責任感です。このどちらかが書けると、この団体にいなくてよくねとなり抜けてしまうことが多いです。団体そのものへの熱意はもう少し立たないと芽生えません。
なので、メンター制や定期的な作業会・飲み会を開くことで交流を増やしたり、手が空くことのないように適当なタスクを振ることが大事です。
飯なんかはその団体がどういう雰囲気なのか（真面目・ウェイ）、どういう考えの人たちがいるのかがわかるので、結構侮れなかったりします。もう少し仲良くなったら温泉とか行くのもいいです。

## みんな忙しくて何も進まない
みんな学生なので、課題だったり研究だったりでどうしても集まりが悪くなったりします。
手は二つです。

### チームメンバーを増やす
これができれば一番いいです。ただし募集するのではなく名指しでスカウトすることが大事です。誰か来て〜〜って言っても誰も来ないので、君助けて！と言いましょう。

### 俺が、全て終わらせる
最終手段です。後輩も育たないし継ぐ人いないしで次年度終わります。でも完成しないよりはマシ。完成したあとちゃんと後輩のケアをしつつ引き継ぎ資料を満遍なく作っておきましょう。

## 後継が育たない
勝手に育ったら苦労しないので、育てるしかないです。
本当に団体やプロダクトのことを思っているのなら、自分の予定をかなぐり捨て、魂を賭して後継を育てましょう。もし1人で複数人教え切れたら、今度はその子たちが師となるので次の年はいくらかましになります。　

あと自分が一番強くなってる年（おそらく卒業年）は開発しないことを目標にしましょう。後輩の仕事を奪わず思想をぶつけないように心がけながら、レビューやドキュメント作成などでサポートしましょう。

# 最後に
初めてのPMはメンタルとの戦いがでかかったです。
ただそれ以上にクソでかい経験だと思いますし、それを失敗してもなんとかなる今こそチャレンジしてみてよかったと思いました。
この記事が今後学生で開発のまとめ役になった人に少しでも役立つと嬉しいです。