新人2人がアプリ開発をしたら戦争になった話

本記事は新人Advent Calendar 2016の1日目の記事です。




#ツッコミ要素満載！？新人によるアプリ開発
新人研修で行ったアプリ開発について書いています。アプリ開発は新人2人がチームを組んで与えられた課題「**新人営業が打ち合わせに使えるWebアプリ！**」を開発しました。新人がチームでアプリ開発をしたら、３回戦争が起きました。しかも、ツッコミを入れたくなること間違いなし！
##相方紹介
相方は同じ部門の新人4人の中でも、トップを争う技術力の持ち主！
技術力に乏しい自分にとって、非常に頼りになる存在です。


開発は以下のスケジュールで行いました。
![開発スケジュール.png](https://qiita-image-store.s3.amazonaws.com/0/148136/4d48a617-df8a-5e20-4a4d-a4d950507fac.png)
#自己紹介
とあるSIerの新人エンジニアをしています。研究開発部門で現在修行中です。主に、Python、Djangoでアプリ開発と機械学習の勉強をしています。学生時代にあまりプログラミングをしていなかったので、部門の技術レベルの高さに圧倒されています。
#戦争はこうして起きた
##俺たちの未来は明るい～順調なスタート～
我々のチームでは、ヒアリング内容から新人営業の課題は「**ベテラン営業との間に知識と経験のギャップが大きい!**」と考えが一致しました。

「新人営業とベテラン営業のギャップを埋める」ことに対して、我々は**打ち合わせの事前準備**に注目しました。ヒアリングで先輩とコミュニケーションをとれる時間があまりないと聞いていたので、我々は時間に制限されないコミュニケーションの場としてチャットアプリを作ることに決定しました。チャットで<font color="Red">**わからないことを聞いて知識と経験のギャップを埋める**</font>のが目的です。

##やりがいと充実～アプリ開発楽しい～
チャットアプリを作ると決めた我々は完成イメージの作成と役割分担に取り掛かります。まだ、平和でした。自分は主に、画面設計(HTML、CSS、JavaScript)を担当しました。この段階では時間に比例して、成果が目に見えるので個人、チームともに充実した時間を過ごせていました。

##前哨戦～食い違う認識～
###中間発表準備
順調に進んでいた開発に深刻な問題が発覚します。チーム内に**ギャップ**があったことに気が付きます。自分が発表資料を作り終えて、相方にチェックしてもらったら、いくつか違うと指摘を受けました。

その一つに、

<font color="Red">**「質問」じゃなくて「わからないことを聞く」でしょ？」**</font>

という指摘がありました。この指摘はアプリの利用シーンの説明についてです。

「ん？」 「え？」 

と思うと同時に相方がすごい怒ってるなぁと感じました。何が問題かわからないし、相方は怒ってて話し合いができそうにないしということで先輩に相談したら、「**質問**じゃなくて**相談**と言いたかったのでは？」とアドバイスをもらいました。さすが、先輩です。

時間を空けてから、一度二人の食い違いを明確にするために話し合ってみました。
結果、「理解」、「認識」、「コミュニケーション」、「意見のすり合わせ」等、本アプリ開発のキーワードに対する二人の認識がズレにズレていることが発覚！

**ギャップ**を埋めたい二人の**ギャップ**が埋まらないとは…

###蜂の巣にされた中間発表フィードバック
お互いの食い違いは整理して、発表資料も完成させて、いざ中間発表！ということで、部会で発表しました。その結果 
 
+ このアプリにはコンセプトがない！
+ 新人営業のためになっているのか？
+ 既存アプリでもできる！

と、見事に散りました。
我々としては「有意義な話し合いをするためのチャット」というコンセプトとしていました。ただ、改めて考えれば「有意義な話し合い」って当たり前なんですよね。雑談じゃないんだから。と気付くとコンセプトを決めるとこから後半開始だなと思いました。

##中盤戦～話にならん！とりあえず殴り合う！～
中間発表でもらったフィードバックを元に、追加機能の開発を行う後半戦。ただし開発前半が約１ヶ月に対し、後半は**１週間**！ここで開発方針が衝突！

自分：**クオリティー重視**
相方：**納期重視**

「何を作るか」と「何なら作れるか」という違いです。個人的には中間発表で「コンセプトがない」という指摘が一番響いたので、コンセプトを決めてから追加機能を考えようと提案して相方に了解を得たと思ってました。

が、しかし

こちらが提案するコンセプトが採用されない。というより、「間に合わない」と一蹴。
（自分）「コンセプトは○○で、××機能を追加とかどう？」
（相方）「××は期間内に作り切れない」
ここで、怒られます
（自分）「じゃあ、何か案ある？」

相方の提案は「△△を作る」と具体的に何かを作るという提案です。当然「コンセプトは？」と自分は質問します。

（相方）「△△機能を作る」
（自分）「コンセプトは？」
（相方）「有意義な話し合い（中間発表時のコンセプト）」
（自分）「いやいや、それでコンセプトがないって言われたよね？」
（相方）「0か1かなら0じゃないから、ある！」

（自分）「<font color="Red">**そういうことじゃねーよ！**</font>」、
（相方）「<font color="Red">**コンセプトがないというのは認めない**</font>」
…ノーガードの殴り合いの始まり

こんなやりとり３日間続け、時間的な余裕もなくなり、自分が考えたコンセプト（新人営業の育成をインタビューで）と相方の考えた機能（Botをチャットに参加させる）を組み合わせて、

「**聞きにくいことはBotが代わりに聞いてくれる！インタビューをチャットアプリで実現！**」

に落ち着きました。幾多の争いを乗り越え開発期間内に無事完成できました。

##最終決戦～プレゼン資料へのこだわり！ツッコミ不可避の最終兵器！～
開発も完了し、最終成果発表に向けて発表資料を自分が担当しました。今回のアプリ開発は兎にも角にも「**ギャップ**」だったので、プレゼン資料に「**ギャップ！**」をキーワードに使いました（計７回）。そしたら「<font color="Red">**！**</font>」の使い過ぎと相方に怒られました。

ただ、ここは譲れなかった。中間発表の資料も「何を伝えたいかはっきりさせた方が良い」と先輩からアドバイスをもらっていたので、「**ギャップ！**」は絶対譲れないと主張したら、相方にこう言われてしまいました。

「**！**の使い過ぎは印象が薄くなる。<font color="Red">**オオカミ少年**</font>だって最後言うことを聞いてもらえなくなったでしょ？」

使い過ぎは確かに…ん？ え？ <font color="Red">**オオカミ少年？**</font> オオカミ少年って**嘘**を(ry
なんて思ったりしましたが、最終的に「！」をいくつか消して、最終成果発表し、アプリ開発を終えました。
めでたし、めでたし。

#反省と改善
##反省
今回のアプリ開発での一番の反省点は

**2人の認識がズレていることに気付くのが遅かった**

ことです。これが原因で、お互いの意見や提案を否定し合って、殴り合う。全てさらけ出して、ようやく根本がそもそもずれていることに気付く。その結果、気付いた時点までに作ったモノやアイデアを考えていた時間が無駄になってしまったこともありました。開発に響く影響が大きくなりました。

##改善
改善点として、ドキュメントや発表資料を最初に作って視覚化し、ゴールをチームとして明確にする、それができてから開発を進めればズレや誤認を防ぐことができるのではないかと思いました。また、ズレがあったとしてもまだ何も開発してないので手戻り作業に苦しむなんてこともないでしょう。

実際に、別のアプリ開発（新人3人でチーム開発）したとき、開発に入る前に事前準備として以下のことをしました。

* 「システム全体像の視覚化」目指すゴールを明確に！
* 「役割分担」自分の作業に集中する！
* 「小さいモノを試作」どんなモノが出来上がるか把握する！

その結果、開発中に戦争は起きませんでした。全員が向かうべきゴールが明らかであることが大きく影響していたと思います。

初めてチーム開発する人は参考にしてみてはいかかでしょうか？
#最後に
アプリ開発、チーム開発を初めて経験して、良いことも、悪いことも、やったことも、やらかしたこともありましたが、もう１度同じ課題でアプリ開発をする機会があるなら、誰もが使いたいと思わせられるアプリを作りたいです。

最後まで読んでいただき、ありがとうございました。