Sansan Tech Internship Trigger 2020 に参加しました
10/5 - 10/16までの10日間,SansanのTech Internship Trigger 2020に参加してきました!
ビジネスと技術の結びつきについて学びの多いインターンでした.
このインターンは最初の4日間でSansanトップエンジニアの講師の方の講義を受け,実際にプロダクトの立案と開発を行い,最終日にSansan本社で発表という流れでした. 講義は以下の5つで構成されていました.
- ソフトウェアビジネスと開発
- プロダクトマネジメント
- クラウドアーキテクチャ
- チーム開発方法論
- アプリケーションアーキテクチャ概論
ちなみに優勝したグループは賞金30万円貰えます.やばい
参加前
参加確定のお知らせをいただいた時は,驚きと喜びを同時に感じました. ただ,本当に自分でいいのか?技術的についてこれるのか?という不安でいっぱいでした. なのでRailsで認証周りやAPIの構築練習などを行い不安を埋めていました.
また事前にチーム分けの参考として,ストレングスファインダーやエニアグラムを用いた特性分析を行いました. 僕の特性としては,以下の項目が挙げられました.
ストレングスファインダー
- 回復思考
- 調和性
- 責任感
- アレンジ
- 目標思考
エニアグラム
- 知識を得て観察する人
- 安全を求め慎重に行動する人
かなり自覚がありました.特に回復思考と調和性は自身の思考パターンにかなり近い内容でした. ストレングスファインダーの5つの特性のうち4つが実行力に振られており,行動力の高さが記されていました. 実行力は強みだと感じていたので,納得できました.
チームビルディング
本番1日目ではチームが発表されました. 特性と技術スタックを元にチームメンバーが組まれました.
その後チームメイトのストレングスファインダーとエニアグラムを元にそれぞれの特性への理解を深めました. 心理的安全性を担保する目的で,メンバーそれぞれの強みや弱み,どう接して欲しいか等を打ち明けるプロセスを踏みました. これは後の開発時に役に経つ内容でした. メンバーがされたら嫌なことを意識できたので,衝突することは合ってもチームが分裂することはありませんでした. また自身の調和性を生かして,チームの雰囲気を多少なりとも調和することもできました.
後のアイデアだしやチーム開発でも各メンバーの特性が現れることがあり,思ったより特性が出ていて面白いな〜と思いました.
またストレングスファインダーコーチの方に,自身の強みや弱みについて解説もいただきました. 私は回復思考が強いため,調和性と組み合わせるとチーム間の人間関係を修復へと向かわせる特性がありました. 一方で,チーム内で重大な決断をする際には調和性がマイナスに働く可能性もあるようです. 人を観察して何を感じているのか察するのが得意なので,マイナス面も含め納得できる内容でした.
講義
月曜から木曜までプロダクト開発に必要な5項目について講義を受けました.
ソフトウェアビジネスと開発
最初にCTO藤倉さんの講義がありました.ソフトウェアがビジネスとして成り立つための基本的な考え方(市場の顕在性と潜在性,収益構造など)を教えていただきました. エンジニアは技術力だけでなく,ビジネスと結びつける力が必要ということを学びました.
最初ビジネス何それ美味しいの?状態だったので,プロダクト思考という考え方を学べたのは大きな収穫でした.
プロダクトマネジメント
Product Managerの加藤さんによるプロダクトマネジメントの講義がありました. プロダクトを立案する上での考え方やツール,仮説検証の重要さを学びました. 特に印象深かったのは,ゴールデンサークル理論の「why」の部分です. 後のアイデア出しでは「why」を意識することで解決したい課題の本質が見えてきて,深掘りの助けになりました.
クラウドの概要と非機能要件
Sansanのインフラを構築している落合さんによるクラウドアーキテクチャについての講義がありました. オンプレと比較したクラウドの特徴や,事業への活用例,最近の傾向などを学びました. クラウドはあまり手につけていない領域なので,かなり新鮮な内容でした(難しかった). まともな質問ができるほどの基本知識がなかったのが少し悔やまれます.
非機能要件についても学びました.認識のズレが起きやすく,上流過程できちんと定義する必要があることを知りました.
チーム開発方法論
サービス開発部の石畑さんによるチーム開発の方法についての講義です. 不確実性に強いチームを作り上げる上での,情報共有の重要性を教えていただきました. 今回のように初めてあった人同士で2週間の開発を乗り切るには,認識のズレを防ぐことが最重要だと考えているので,把握すべき内容だと思いました.
オンラインでの開発は対面より情報共有の工夫が必要ですよね.
後のチーム活動でもうまく伝えきれない,意図が読み取れないことがあり,情報共有については悩み工夫しました(いつも悩んでる).
アプリケーションアーキテクチャ概論
プロダクト開発部の荒川さんによる,アプリケーションアーキテクチャの概要についての講義です. フロントエンド,バックエンド両方のアーキテクチャを俯瞰して見渡せる講義内容だったため,普段RailsのMVCで開発している自身の視野を広くしてくれました. また一番技術的な内容だったのでワクワクしました.
クリーンアーキテクチャ...ツイッターでよく見る単語や(小並感)
アイデアだし
講義あとはチームに分かれてビジネスの立案を行いました. miroにそれぞれのアイデアを出し議論する流れなのですが,一向に話し合いが進まず一時はチーム破綻を運営に心配されてたようです😁
話し合いが進まない要因として以下が挙げられます.
言語化しない
これが一番大きいです. 文字に起こさず口頭で議論を重ねることで何度も同じ話題を掘り起こし,大幅にタイムロスしてしまいました. 石畑さんが述べていた情報共有がうまく取れていない状況です. 共同編集ツール(Google Docs)に議論内容を議事録として記すことで,共通認識が取れ円滑に進むようになりました.
時間制限を設けない
だらだら同じ議論を繰り返した結果,話がまとまらず変な方向に向かうことが多くありました. そこで明確に時間制約を設けた結果,意思決定が円滑に進み,アイデアもまとまりが出ました.
なんとかまとまった
上の要因とアイデア出しの難しさもあり,かなり苦戦しましたが4日目の木曜夜にビジネスの流れをまとめました. ユーザーストーリーマップとカスタマージャーニー,リーンキャンバスを作成し,構想を言語化することができました. 予定より一日オーバーしてしまいましたが,作りたいものが定まったことにホッとしました.
途中CTOの藤倉さんやProduct Managerの加藤さん,人事の小守さんに壁打ちしてもらい 貴重なアドバイスをいただけてとてもありがたかったです🙏
いや〜構想立てるのしんどかったほんま
開発
ビジネスモデルの話し合いが終わり技術の話になると,皆水を得た魚のように元気になりました😃
まずAPIとDBに関して設計を行いました. 共通認識をとるために全員で設計を行いドキュメントにまとめました.
その後フロントとバックエンドに分かれて開発を行いました. 僕はバックエンドでAPIの開発に取り組みました.
5日目の夕会で,人事の方に7日目の火曜日には開発が終わると豪語してましたが,普通に最終発表一日前まで続いていました.
技術選定
Golangの採用
僕自身はRailsが一番得意なのですが,バックエンドの技術選定でGoとRailsどちらかを選択する際にGolangに挑戦したい気持ちで採用しました. 結果的にAPIの半数を実装することができました. とはいえリソースの多いAPIは実装スピードが足りず,難しいところを任せきりになってしまったので悔しさと申し訳ない気持ちで一杯でした.
でも実装してて楽しかったし,挑戦して良かったと思います. 記法がシンプルな分,書いたコードしか動かないためプログラミングの地力が着く気がしました. 特に型制約には苦しめられましたが,普段Rubyで意識しないところなので鍛えられました.
何よりわからないところを根気強く教えてくれたチームメイトには感謝しきれません. むしろ考えすぎてしまうところがあり,もう少し早めに聞くべきだったなと思います.
クリーンアーキテクチャの採用
今回は特定のFWを使わずに簡易的なクリーンアーキテクチャで実装を行いました. 理由としては以下が挙げられます.
- 将来的なスケールを考慮した時に責任を分離できること
- 完全なクリーンアーキテクチャを短時間で実装するのは困難だと判断
普段FW便りで開発していたので,疎結合なアーキテクチャの実装は学ぶ部分が多くありました. また,とっつきやすいよう簡易的な構成を採用したため把握しやすく,土日のキャッチアップもあり実装に落とし込むことができました.
プレゼン作成
発表2日前の水曜夜から怒涛のプレゼン作成が始まりました(まじ怒涛).
- 雑にスライドを記述,検証アンケートの実施(水曜 20:00 - 23:00)
- 沖縄→東京まで移動(木曜 10:00 - 18:00)
- ホテル着,プレゼン作成(木曜 18:00 - 27:00)
- 気絶(木曜 27:30 - 金曜 8:00)
- 発表(金曜 10:30 - 11:00)
特にアピールしたいことはビジネスモデルなので,投資家向けに作成することになりました. そのためアーキテクチャやチーム開発についての説明は少なく,ビジネスモデルやプロダクトマネジメントについてのスライドを多めに作りました.
プレゼン本番
Sansan本社に集合し,プレゼン発表を行いました. メンバーと会うのは初めてなのでオフ会みたいな雰囲気でした(行ったことないけど)
発表者じゃないけど発表前は少し緊張してました.
本番では発表メンバーが説得力抜群のプレゼンで,プロダクトの存在価値を徹底的に伝えてくれました.感謝🙏
質問に関しては僕も受け応えることができました. 特にチーム開発については,心理的安全性ついての工夫点をアピールすることができました.
レビュー
プレゼン後は講師陣からありがたいレビューをいただきました.
良かった点
特にプレゼンが評価されました.プロダクトの存在価値をきちんと言語できている点で好評をいただきました. 準備の甲斐あった〜
アプリケーションの技術選定については,限られた開発期間の中で挑戦する領域とそうでない領域のバランスを評価されました. 簡易的なクリーンアーキテクチャの選定は好手だったようです.
クラウドアーキテクチャについては,うまくAWSを活用していた印象を受けたと講評をいただきました. またgithub actionでデプロイを自動化したところも評価をいただきました.
改善点
ビジネスモデルについては,収益構造があまりよく見えないとの評価をいただきました. 確かに収益の具体的な構造,どれくらいの収益が見込めるかについては深堀りできていなかったので反省です.
チーム開発においては,スライドにあまり内容を含めていなかったため工夫点が見えづらいと講評をいただきました. それなりに工夫はしていたのですが,プレゼン対象が投資家という理由で深く言及しませんでした(だとしても収益構造甘いのはダメだよね).
結果発表
優勝とはなりませんでした〜〜〜
しかし自分たちの伝えたいことは伝えられて,ちゃんと評価されていたので後悔はないです. 僕自身はやり切った感がありました.
ただ優勝したチームは全ての評価観点でバランス良く,納得のいく内容でした.
プレゼン対象を絞った戦略は悪くなかったと思うんだけどな〜
振り返り
最後にチームのみんなで振り返りコンテンツを行いました. 特に議題に上がったのはやはり議事録の作成と時間制限でした. 下は振り返りの一部です.
できたこと
- プレゼンテーション
- 作ろうと思ったプロダクトの実装
できなかったこと
- ドキュメントのメンテナンス
- バックエンドとフロントエンドの進捗確認
次ハッカソンやるなら
- 時間を制限しろ
- 議事録を作れ
- 朝夕会で確認を取れ
チームの強み
- 手を動かせる
- 温厚
- 雰囲気
- 自信
一時は破綻が心配されてましたが,最終的にどのグループよりも雰囲気は明るかったと思います. みんなキャラ濃くて会場で一番うるさいグループだったと思います(すみませんでした)
全体を振り返って
参加できて良かったと思えるイベントでした. 技術面,チーム開発,ビジネス立案で大きな経験を得ることができました.
技術面
適度な挫折を得ることができました. 自分に足りないところを修正し,同年代に負けないつよつよエンジニアに近づきたいです. 特にGolangとフロントエンドの知識を身につけていきたい所存です.
チーム開発の難しさ
オンラインという環境の中でのチーム活動の難しさを体験できたことは一番大きいです. 技術バイトでも言語化は意識してきましたが,最初それをサボったことにより重要性を痛感しました. 言語化することで共通理解が得られ自信をもって質問できるので,心理的安全性の面でも大きな利点だと感じてます.
また時間管理の重要性も実感しました. 長い時間だらだらアイデアを考えるのではなく時間を定め意思決定のスピードを早くすると,驚くほどスピーディに話し合いが進みました.
ビジネス立案
収益構造について初めて考えました. その中でビジネスを考える難しさと,少しばかりの楽しさを知ることができました.
またエンジニアとして価値提供の考えを得ることができました.
ビジネスについては明らかに知識不足だなあと感じたので精進します.
ハイレベルな同志との出会い
ハイレベルなメンバーとの出会いはすごく刺激になりました. 大学とはレベルが段違いなので自分の水準が上がりました.(あっとこーだー緑以上が過半数なの怖い...) 環境を変えると効率よく成長できると感じました.
こうして欲しかった
イベントに対しての要望として,メンターさんが欲しかったです. 一時はかなり迷走していたので.議論があらぬ方向に向かった際に助け舟を出していただけると助かったと思います.
最後に
今回のハッカソンは高速なインプットとアウトプットを必要としているためかなりしんどい時もありましたが(特にビジネス立案),頭抱えて脳汁垂らした分成長できたと思います. 大学では得られない,エンジニアとして働く上で必要となる考え方を学べました.
達成感!
作成したアプリ(イベント名: Trigger 2020) kikitutu.web.app