爆速開発のための10の心がけ

MIXI DEVELOPERS Advent Calendar 2023の16日目の記事です！

https://qiita.com/advent-calendar/2023/mixi

# はじめに
現在MIXIのFanstaというサービスの開発に携わっています。

https://fansta.jp/

開発はスクラムで進めており、エンジニアの人数は5~6名です。
その中で同じチームの他のメンバーに比べて2~3倍のタスクを消化しています。
育児もしており残業は月に数時間なので、他の人より仕事に多く時間を費やしているというわけではありません。
今までどうしてタスク量を多くこなせているのか、ちゃんと考えたことがなかったので、今回は自己分析して言語化したいと思います。
スクラムにおいてチームで全体的に取り組んでいる話ではなく、あくまでスクラムの中で個人レベルで心がけていることに思いを馳せてリストアップしてみました。

# こころがけ10選
### 1. タスクの内容をよく理解しておく
タスクの内容を把握できていないと、着手してもまず把握するところからスタートすることになります。
スクラム開発を進める前提として、スプリントバックログのToDoに乗っているタスクの内容は全て把握しておきたいところです。
個人的にはスプリントプランニングの時間を楽しみながら主体的に参加することで内容把握を頑張っています。
タスク理解の解像度が高ければ高いほどタスクを取るときのハードルが下がり、前向きに消化できるとも思います。

### 2. 確認は早めに投げる
このタスクはPO確認しないと進められないけど、今は別のタスクに集中したいから後回しでいいか、としていると、結局確認待ちの時間後ろ倒しになってスプリントに間に合わなくなる恐れがあります。
先に仕様を確認する必要があるタスクがある場合、SlackやGithubのコメント上でなるべく早く投げておいて、その返答を待っている間に他の一人で進められるタスクを進めます。
ただ、マルチタスクは仕事効率が悪くなるという話も聞きますし、複数の機能を並列で進めようとすると頭だけでなくGitのブランチのスイッチングコストもかかるので、並列で着手できるのは2~3個くらいが適切かなと思っています。

### 3. 簡単なタスクはすぐに対応する
鉄は熱いうちに打て、という言葉があるように、一度内容をインプットしてそれが頭に残っているうちにやるとのと、時間が経ってからもう一度思い出してからやるのでは、前者の方が速いです。
なので簡単そうなタスクは他のタスクと比べて優先度が低くても先に片付けることがあります。
スプリントの途中でどうしても差し込みで依頼されるタスクも大抵はサクッとできる内容のものなので同様です。
そのための前提として、タスクの優先度だけでなく難易度も把握している必要があります。
スプリントプランニングのときにみんなで認識をすり合わせながらポイントをつけているので、そのおかげで難易度を把握できています。
また、すぐに片付けることで、頼んだ相手からの信頼も得られます。
信頼されるとのびのびと仕事ができ、相手の不安からくる余計なコミュニケーションも減らせるのでおすすめです。

https://www.businessinsider.jp/post-249137

ちなみに2分ルールというものが存在するらしいのですが、それに近そうです。

### 4. 気分転換として他のタスクに取り組む
ずっと同じタスクに取り組んでいると身体的にも精神的にも疲れますよね？
そんなときは別の毛色のタスクを間に挟んだりすると気分転換になる上に進捗も生まれてよいです。
優先度の高いタスクをメインでこなしつつ、休憩がてらやテスト実行待ちがてらなどに難易度の低いタスクを合間に消化していくと、結果他の人より合計の消化量は増えます。
ただし、本当に疲れている場合は無理せず休んでくださいね。

### 5. 多様なタスクを取れるようにしておく
現在私のチームで必要な開発スキルとしては大きく分けて
- Ruby on Rails（バックエンド）
- React, Next.js（Webフロントエンド）
- Flutter（アプリ）

の3つがあるのですが、分野ごとにチームを分けておらず、どのエンジニアもこれら全てに対応できる前提でスクラムを実施しています。
とはいえ誰しも得意不得意があり、得意な分野のタスクを取りたくなる気持ちもあります。
短期的には得意なものばかりとった方が開発スピードは速いと思います。
でも長い目で見ると、得意な分野のタスクが残っていない状態のときに、不慣れなタスクをしなければならなくなり、1つを消化するのに時間がかかってしまいます。
全部得意になるのは厳しいかもしれませんが、全部環境構築が済んだ状態で使い慣れていて、いつでもサクッと修正できる状態にしておくのは大事です。

### 6. レビューで引き出しを増やす
実装ばかりしてレビューを怠ることでタスクの消化量を増やしているのでは？というとそんなこともないです。
むしろレビューは実装スピードを上げるのに必要な作業だと思っています。
レビューをすることで他人の実装を追体験できます。
自分が実装していないから把握していない、という範囲を効率よく減らすことができます。
おかげでいざ自分が実装するときに、「あの機能で同じようなロジックがあったな」という引き出しを多く持つことができ、実装をコピペからスタートして加速化できます。

### 7. 新しいことに積極的に挑戦する
今まで経験したことがないから、という理由で二の足を踏んで逃げ続けるとある分野や機能への苦手意識が生まれたり、引き出しのストックが停滞してしまいます。
いざ調べ始めたり、手を動かし始めたら好奇心が刺激されて意外と楽しいものなので、少しハードルが高くても飛び込んでみる気持ちが大事です。

### 8. too muchにならないように気を付ける
例えば開発でしか使わないツールでレイアウトにこだわっても実際は必要とされていなかったりします。
そこらへんの温度感をちゃんと把握しておかないと無駄な機能に時間をかけることになってしまうのでもったいないです。
疑問に思ったらすぐPOやデザイナーさんと認識をすり合わせるのも大事です。

### 9. 詰まったら相談する
一人で考えるだけだと埒が開かないな、と思ったら誰かに相談した方が早いので、割り切って相談するのが大事です。
私のチームではオンタイムで何かを話し合いたい場合、Slackのハドルを使って気軽に話す文化があり助かっています。

### 10. 小さな改善を積み重ねる
スクラムで振り返りをおこなって改善を続けるのと一緒で、個人レベルでも新しいツールを導入したり、よく使うコマンドをスニペットとして登録したりと、ちょっとした空き時間に小さな改善を積み重ねています。
めんどくさいな、という気持ちが芽生えたら改善のチャンスです。
以下にこれまでの改善のうち、効果があるなあと思っているものをいくつか挙げます。

#### 例1. Vimのキーバインド
まだ新米エンジニアのときに、同僚に勧められて存在を知り、すぐ始めました。
vimtutorで猛練習した記憶があります。
エディタはIntelliJ IDEAを使っているのですが、プラグインを使ってVimのキーバインドでコードを書いています。
マウスと矢印キーだけの操作よりは絶対に書くの速くなっています。

#### 例2. GitのGUI操作
エディタはVSCodeでも基本的に十分だと思っているのですが、唯一開発速度向上に寄与していそうな機能がIntelliJ IDEAのGitのGUI操作です。
switch、merge、rebase、squashなど、マウス操作で直感的にできて多用しています。
おかげでgitコマンドはほとんど何も覚えていません。

#### 例3. Raycast
https://www.raycast.com/

無料のランチャーツールです。同僚に教えてもらってすぐインストールしました。
その後ブラウザのブックマークを使うのをやめて全部Raycastのクイックリンクとして登録し直しました。
キーボード操作だけでシュッと新しいタブでリンクを開けるので作業が速くなった気がしています。
ブックマークと同様でこまめに追加・編集するのが大事です。
ブックマークはディレクトリで整理するのが面倒でしたが、こっちだと検索しやすい名前をつけておくだけで良いので、手軽に追加・編集できて便利です。
スニペットも登録できるので、何度も使うコマンドや社員番号などはスニペットとして登録して、すぐに貼れるようにしています。
クリップボードの履歴も一覧できるのも地味に便利です。

#### 例4. Chat GPT活用
最近だと業務効率改善といえばChat GPTですよね。
社内のソースコードも入力してOKなGPTベースの社内用チャットツールもあるので、ググるより先にそこで実装例を出してもらったり、実装したコードをリファクタリングしてもらったりして活用しています。
今後の進化も楽しみです。

# さいごに
いかがでしょうか？
改めて自己分析してみるとどれも当たり前で皆がやっていそうなことにも思えますし、他にもまだ無意識に心がけていることもありそうです。
結局ちょっとしたことの積み重ねだと思うのでなかなか何が効いているのか明確に突き止めるのは難しいなと感じました。
仕事の進め方について見直してみるきっかけになれば幸いです。