🔥

筑波大学のenPiTでチーム開発の難しさを学べた話

に公開

はじめに

この記事は筑波大学で「enPiT」という授業に参加したのでその体験記になります。
また、この記事は授業の最終レポートを兼ねています。

enPiTって何?

そもそもenPiTって何かが気になる人はこの辺を見てみてください。
筑波大学ではenPiTに参加することで、必修単位をもらうことができます。
https://www.enpit.jp/
https://enpit.coins.tsukuba.ac.jp/

開発したプロダクト

「身近な困りごとを解決するためのプロダクトをアジャイル開発に則って作ってみよう」というのが超ざっくりとenPiTでやることです。ということで、私達のチームが作成したプロダクトを紹介します。

つくログ

私たちのチームでは「つくログ」という名のプロダクトを開発しました。(デプロイ先
プロダクトの概要としては、筑波大学の生徒同士が自分の経歴(バイト歴、インターン歴等)や就活でやっておいて良かったことなどを匿名で閲覧し合うことができるプロダクトです。
以下に示したエレベーターピッチやスライドを見ていただけるとだいぶイメージが沸くかと思います。

エレベーターピッチ

解決したかった困りごと

解決したかった困りごとは「就活に関心は多少あるが、いつ、何を、どうしていいのか全くわからん」という困りごとです。このプロダクトを通して同じ学類の同期や先輩のプロフィールを閲覧することで、少しでもその人のネクストアクションに繋がるきっかけを作りたいというモチベーションで制作しました。
 
このプロダクトのアイデアはチームメンバーのKRさんの実体験から来ています。チームメンバーのKRさんはenPiTに参加する前はインターン等に参加した経験がありませんでしたが、KRさん以外のチームメンバーがインターンや就活に積極的に取り組んでおり、その人達と話していく内にインターンに興味を持ち始め、実際にenPiTの期間中に長期インターンに参加し始めました。この実際にインターンや就活をしている人と話したりして、興味を持ち始めて自分も参加してみるというきっかけは結構あるあるだと思っており、このあるあるをプロダクト上で再現したいという所からアイデアが来ています。(実際に私も最初に長期インターンに参加したきっかけは友人からインターンをオススメしてもらったのがきっかけでした。)

技術選定の小話

このアプリはFlutterとFirebaseを用いて制作しました。メンターの方から「Flutterは黒魔術で動いているのでやめておけ」「FlutterやったことないのにFlutterを採用するのは時間がかかり過ぎる」とのありがたい忠告をいただきましたが、開発メンバーがFlutterに興味、モチベーションがあるという理由で、いただいた忠告を頭に置きつつ結局Flutterで突撃しました。(個人的には技術的成長があり突撃して良かったと思っています。)

開発チームの構成

私たちの開発チームは「つくば就活革命B」という名前で、構成メンバー4人とそれぞれの役割は以下のような形で活動していました。

  • hiromu(筆者): 開発
    • COINS B3
  • KRさん: プロダクトオーナー、開発
    • COINS B3
  • OKさん: スクラムマスター、ちょい開発
    • 情報理工学位P M1
  • KHさん: UIデザイン、発表スライド作成
    • MAST B3

 
ここで「つくば就活革命B」というチーム名を見て「なんでBが付いているんだ?」と疑問に思った人がいるかもしれません。実は私たちのチームはだいぶ特殊なチームの軌跡を辿ってきています。詳細はenPiT期間中の軌跡で詳しく書こうと思います。

enPiT期間中の軌跡

enPiT期間中の軌跡を「チーム状況」と「プロダクトの状況」の2つの観点から時系列順に述べていきたいと思います。enPiTは以下の画像のスケジュールで進んでいきます。

夏合宿

夏合宿では2週間に渡って、プロダクトの方向性を決定していきます。この期間では実装がどうこうというよりは、これからアジャイル開発に取り組むにあたって知っておくべきお作法のようなものをたくさん学ぶことができます。

チーム状況

この合宿でチームを結成しました。チーム名は「つくば就活革命」、チームメンバーは6人です。先に紹介した開発チームの構成と違うのは見ての通りですね。「筑波大生が長期インターン探すの難しい」という課題をもとに、元々6人でenPiTをスタートしました。

プロダクト状況

この時点では「つくかつ」という筑波大生向けのインターンシップ求人が載っているサイトのようなものを制作しようとしていました。成果物として紹介した「つくログ」とは別物です。

10月(sprint1〜ロングレビュー1)

チーム状況

プロダクトの方向性がチーム全体で共有できておらず、分業を試みるも上手くいかないみたいなことを何回か繰り返していました。また、活動場所を授業の本拠地とは別のところで活動していたため、他チームからのレビューがうまくもらえないなど、授業の流れにうまく乗り切れていなかった感じがしています。

プロダクト状況

どういうプロダクトを作っていくかの話し合いや求人を掲載してもらうための企業とやりとりする部分に大部分の時間を割いており、ロングレビュー1の時点ではプロダクトはほぼできていないに等しかったです。前々日くらいからレビューをもらうためだけのプロダクトをその場しのぎとして作って乗り越えていました。

11月(sprint2〜ロングレビュー2)

チーム状況

このスプリントから開発が始まったり、分業が起こったりとチームの状況が複雑になっていったことに伴い、OKさん(つくば就活革命Bチームでのスクラムマスター)がつくば就活革命のスクラムマスターとしてチームを上手く回すために進捗管理やタスクの優先順位づけを頑張ってくれていました。

また、開発メンバーは授業内の時間だけで機能開発が終わるわけがないので授業外での開発(いわゆる残業)が活発に行われてしまっていたり、やりたいことができていないメンバーがいたりとチーム状況として若干よろしくない状態になり始めたのがこのスプリントだったと思います。

プロダクト状況

このスプリントから実際に開発が動き始めました。基本的に開発はチームメンバーの内、私を含めた3人だけで進めていました。データ設計を行なったり、求人閲覧、求人応募機能などを作ったりと、他チームに比べて、実装の重さだけでいくと遥かに重たい実装を進めていました。

ロングレビュー2直後

チーム状況

ロングレビュー2での反応があまり良くなかったことをきっかけに「本当にこのまま進んでいっていいの?」という趣旨の話し合いが開催されました。この話し合いでは制作していたプロダクトの話もそうですが、チーム状況としてこのままでいいのか? みたいな部分についてもめちゃめちゃ話し合いました。(ロングレビュー後にそのまま5時間近く話し合いが継続されていた気がします。)

話し合いではざっくり以下のような話題について話していました。

  • 残業について
    • 残業したくないのにしているのってどうなの?
  • やりたいことできていない人について
    • 開発やりたかったけど、できていない人がいたりしていた
  • プロダクトこのままでいいのか?について
    • このまま継続するのか、思い切って別のものを作り始めるのか
  • モチベーションについて
    • enPiT終了後も続けていきたい人とenPiTで完結させたい人がいた

 
その後何度も何度も話し合いを重ねた末に以下の結論に落ち着きました。(これは最終的には価値観の違いだからもうどうしようもないというカップルの別れ話みたいな形でこの結論に至りました。)

  • つくば就活革命は現プロダクトを継続したい「つくば就活革命A」と新しいプロダクトを作り始める「つくば就活革命B」で分裂を行う。
  • Aに所属したい2人とBに所属したい2人がそれぞれのチームで活動していく。
  • 立場が決まりきらない2人は少しの間どちらのチームにも所属した上で最終的にどちらのチームにするかを決定する。

 
この時点で私が最終的に所属していた 「つくば就活革命B」が誕生したわけです。(私は最初からBチームに所属したいた2人の内の1人です。)

12月前半(sprint3前半)

チーム状況

授業中はBチームの2人に加えて中立の立場の1人を加えた3人体制で活動していました。もう一人の中立の立場の人に対して情報共有する時間がなかったため、授業外で毎授業ごとにBチームの状況を共有する時間をとっていました。

またチーム分裂後は授業の流れ(プランニングやレビューなど)にしっかりと従いながら進めていくことを意識していました。加えて、個人的にはチームメンバーが楽しくenPiTに取り組めているということを第一優先にして進めていくことができていたんじゃないかと思います。

プロダクト状況

ここでようやく先に成果物として紹介した「つくログ」の開発が始まりました。めちゃめちゃ時間がないので、どんどん進めていきたいところではありましたが、分業をし過ぎるのは良くないということをこれまでの経験から学んでいたので、開発に入る前にお絵描きをしたりfigmaを使ってUIを作成したりする部分を チーム全員で行い、イメージ共有を優先的に行いました

12月後半(sprint3後半〜ロングレビュー3)

チーム状況

このタイミングで中立の立場だった2人がどちらに入るかの意思決定が行われました。最終的に「つくば就活革命B」に2人とも来てくれるとのことで、ここで つくば就活革命Bチームのメンバーが正式に出揃いました

プロダクト状況

実際に開発にも取り掛かり始めました。ここでも分業をしすぎないことを意識して、最初の頃はずっと開発メンバーの2人で ペアプロをしながら開発を進めていました。

12月の時点ではFirebaseにベタ書きで情報を用意しておき、それをアプリ上で表示するところまでは完成していました。

1月(sprint4)

チーム状況

最初の頃にみんなで同じ作業をしていた影響で完成系のイメージを共有できていたので、この時期は最終成果発表に向けて適宜分業も行いつつ頑張っていました。(まだプロダクト作り始めて1ヶ月くらいだったので本当に時間がなかった。)分業は行いつつも、それぞれのメンバーが何をしているのかをちゃんと共有しつつ進められていたのは非常に良かったかなと思っています。

プロダクト状況

プロダクトとして必要な機能がまだまだできていない状態だったので、成果発表に向けて鬼の開発を進めていました。最終的に成果発表の前日ギリギリまで開発を行っていました。作りたかった「つくログ」の最低限必要な機能については全て実装できたんじゃないかと思っています。

個人的振り返り

プロダクトについて

作りたかったプロダクトの最低限必要な部分は全て実装できたのが良かったと思っています。一方でいろんな人に使ってもらえるアプリになったかどうかは正直微妙な部分があると思っています。見てもらう分には面白いと言ってもらえることが多かったですが、書いてくれる人がいないという部分にだいぶ大きな課題が残ってしまったのが悔しい点です。積極的に書いてくれるような仕組みがあまりないよねというのはずっと話題として挙がってはいたものの、最終的にそれを解決する案をチームで見つけることができませんでした。

チーム開発について

enPiTではチーム開発をうまく進める難しさの部分を痛感しました。チーム分裂までしたので、これに関しては私たちのチームが一番理解したんじゃないかと思っています。個人的にはつくば就活革命Bのチームでは 全員が同じ方向を向いてプロダクトを開発できた部分が一番良かったのではないかと思っています。初期の分業をしないようにしたり、適宜共有MTGを実施したりという工夫によって全員が今やるべきことを理解して開発することができたのは、一度うまくいかなかった反省を活かして、改善できた部分なので非常に満足しています。

また、私たちのチームは非常に仲が良いと感じています。優秀賞のような賞を取ることはできませんでしたが、 enPiTを楽しく終えることができたのが1番良かったなと感じています。(この記事はenPiTのチームでの打ち上げの前日に書いています。明日が楽しみです。)

おわりに

enPiTは最初こそあまり目的意識を持たずに参加したものの、非常に学びの多い経験でした。
一緒につくログを作り上げたチームメンバーのみんなには心から感謝しています。

最後にチームAMF(enPiTを通してのみんなの振り返り的なやつ)を載せて終わりにします。

Discussion