なぜ開発のスピードが遅いのか

最近自分の開発のスピードの遅さを改めて強く感じ始めてます...
こんな開発スピードで今後やっていけるのだろうか...
なんとかしてスピードアップしてアウトプットの量を増やしていきたい！

# なぜスピードが遅いと感じているのか
そもそもなぜ開発のスピードが遅いと感じたのだろうか
一番の理由はこれ↓

**見積もりより時間がかかっているから**

見積もりより時間がかかること自体は悪いことではない
だってただの見積もりだしそこまで正確に出しているわけではない
でもそれにしたって見積もりより大体時間がかかる
見積もりの精度上げたほうがいいんじゃないか？みたいなところもあるが、
それは一旦おいておき、開発のスピードを上げる方向で改善案を考えてみる

# 時間がかかっていること
直近の業務でスピードが遅いと感じたのはこの４つ
- apiの作成
- 複雑なロジックの実装方法検討
- Rspecでのテスト作成
- そもそも手戻りがある

## apiの作成
- ルーティング(uri)の検討
    - どういうuriが適切なのか
    - わかりやすいuriとは？？？
- インターフェースの検討
    - どういう情報が必要なのか
    - どういう形で返すべきなのか

## 複雑なロジックの実装方法検討
- フロントエンド側で、表示の条件分岐が多すぎて普通に書くとぐちゃぐちゃしてわかりづらくなる
    - どうやったら可読性と保守性が高いコードになるのかを検討するのに時間かかる

## Rspecでのテスト作成
- mockとかspyとかが必要な時に書き方
- どういうテスト項目が必要なのか
- rubocopによる検査でテストの行数が制限されているのでそれに収まるように書き直すのに時間かかる

## そもそも手戻りがある
- 大まかな実装方針とか固めた後に実際に実装していくと、途中で実はこの情報ここで必要だったからここ書き直さなきゃみたいなことが起こる
- 詳細設計を検討しきれていない

# それぞれの問題に対するアプローチを考える
ネットや本で活用できそうな情報をまとめてみる
## api設計
- url
    - [22 Best Practices to Take Your API Design Skills to the Next Level](https://betterprogramming.pub/22-best-practices-to-take-your-api-design-skills-to-the-next-level-65569b200b9)
    - [google API 設計ガイド](https://cloud.google.com/apis/design?hl=ja)
    - [RESTful Web API の設計](https://learn.microsoft.com/ja-jp/azure/architecture/best-practices/api-design)
    - [google RESTful のウェブ API 設計で避けるべき 6 つのよくあるミス](https://cloud.google.com/blog/ja/products/api-management/restful-web-api-design-best-practices/)
- インターフェース
    - [「なんとなく」でやらないための私的Web API設計ノウハウ](https://zenn.dev/arsaga/articles/4a72774b1c93d2)

## 複雑なロジックの実装方法検討
可読性の向上の方向で調べてみる
- strategyパターン
    - [【Strategyパターン】すべての開発者が知っておくべき強力なツール](https://qiita.com/hankehly/items/1848f2fd8e09812d1aaf)
    - [【TS】今さら聞けないストラテジパターン](https://zenn.dev/nekoniki/articles/396ebc523930c196dc13)
- 可読性が上がるコードの書き方、デザインパターン
    - [可読性を高める2つの大きな方向性 - 脳内メモリに優しいコードを書く -](https://zenn.dev/n_harada/articles/readability-guideline)
    - [「良いコード」を書くために意識している17のTips まとめ](https://zenn.dev/ishiyama/articles/a0c5a7504b856f)
    - [wikipedia 可読性](https://ja.wikipedia.org/wiki/可読性#プログラミング)
    - [読みやすいコードのガイドライン -持続可能なソフトウェア開発のために](https://www.amazon.co.jp/読みやすいコードのガイドライン-持続可能なソフトウェア開発のために-石川-宗寿-ebook/dp/B0BGX2VGYR/ref=tmm_kin_swatch_0?_encoding=UTF8&qid=&sr=)
    - [脳に収まるコードの書き方 ―複雑さを避け持続可能にするための経験則とテクニック](https://www.amazon.co.jp/dp/4814400799?psc=1)

## Rspecでのテスト作成
- Rspecの基本理解
    - [公式ドキュメント](https://rspec.info/documentation/)
- ベストプラクティス
    - [RSpecを書く上で意識した方がいいと思うことと少しのTips](https://zenn.dev/overflow_offers/articles/20220526-rspec-tips-description)
    - [RSpec スタイルガイド](https://github.com/willnet/rspec-style-guide)
- mockの書き方
    - [何でも"モック"と呼んでない？mock, stub, fake, dummy, spyの違い](https://zenn.dev/takamin55/articles/3b0c52bee37782)
    - [xUnit Test PatternsのTest Doubleパターン(Mock、Stub、Fake、Dummy等の定義)](https://goyoki.hatenablog.com/entry/20120301/1330608789)
- テスト内容
    - [テスト駆動開発のはじめの一歩｜t_wadaさんに聞く1人で始める自動テストのコツと考え方](https://agilejourney.uzabase.com/entry/2023/11/30/103000)
    - [単体テストの考え方/使い方](https://www.amazon.co.jp/単体テストの考え方-使い方-Vladimir-Khorikov/dp/4839981728)
- TDD
    - [保守しやすく変化に強いソフトウェアを支える柱　自動テストとテスト駆動開発⁠⁠、その全体像](https://gihyo.jp/article/2024/01/automated-test-and-tdd)
- その他
    - [RSpec の実行を高速におえるためのヒント](https://zenn.dev/aldagram_tech/articles/5a566cb6629b00)
    - [【RSpec】テストを高速化するために行ったこと | Offers Tech Blog](https://zenn.dev/overflow_offers/articles/20230126-improve_rspec)

## そもそも手戻りがある
- 何から考えるべきかを知る
    - [エンジニアが知っておきたい思考の整理術-複雑な情報を【理解する】【伝える】テクニック](https://www.amazon.co.jp/エンジニアが知っておきたい思考の整理術-複雑な情報を【理解する】【伝える】テクニック-開⽶-瑞浩-ebook/dp/B0CQJJ6F34/ref=tmm_kin_swatch_0?_encoding=UTF8&qid=&sr=)
    - [要件定義、基本設計、詳細設計の流れを総復習](https://zenn.dev/nyanchu/articles/27a3f95d98df45#基本設計-🏛️)

# まとめ
色々と基礎をすっ飛ばしてエンジニアになったのでそのつけが今来てる感じ
大人しくちゃんと基礎から勉強しよう...