半年後の自分は、今書いたコードの背景を一切覚えていません。それを前提に設計しています。
環境をコードで管理する
Docker Compose で開発・本番を同一構成にしています。サーバーが壊れても git clone して docker compose up -d で戻せます。それだけで精神的にかなり楽になりました。
ログを構造化する
// 以前
console.error("Something went wrong")
// 今
logger.error({ endpoint: req.path, userId: req.user?.id, message: err.message })
障害が起きたとき、前者は何もわかりませんでした。
テストは「壊れたら困る場所」だけ
カバレッジ 100% より、一度バグった箇所とビジネスロジックの核心部分をカバーする方が実用的でした。全部に書こうとすると挫折します。
コメントは「なぜ」だけ
「何をしているか」は変数名・関数名で伝わります。本当に非自明な判断だけ、一行コメントを残します。それで十分でした。