良いコードと言って、どんなことを思い浮かべますか?
変更容易性、テスト容易性、拡張性、信頼性、可読性、保守性、効率性、、、
どういうコードが良いコードなのでしょう。これをどうやって説明しますか。
良いとされる設計手法や、テクニックはたくさんあります。
開発組織やプロダクトは多様であり、変化することを良しとしています。
良いとされる設計手法がどの開発組織、どのプロダクトにも適用できるのでしょうか。
よいコード、設計ができていることをどうやって測ればいいのでしょうか。
逆に考えてみました。
良いコードが何なのかを知るためには、良いコードがもたらすメリットから逆算できないか。
開発者がコードをより迅速に開発できるようになり、バグの発生率が低下し、保守性が向上することが挙げられます。また、運用チームもシステムの保守性が向上し、問題を迅速かつ正確に解決することができます。良いコードは、開発者と運用チームの双方にとって利益をもたらします。
良いコードは開発体験が良いと言えそうです。
また、運用者も嬉しそうです。運用者に限らず組織全体に好影響がありそうです。
もしかして、ハイパフォーマンスな組織状態を作ることを目指すことは良いコードにたどり着く道なのではないでしょうか。
開発者が目指すべき良いコードを数値で示してくれる。そんなツールになる道につながっているでしょうか。
ハイパフォーマンスな開発組織を作るために改善すべき項目は何か
LeanとDevOpsの科学は以下の項目「Four Keys」を上げています。
- コードのデプロイ頻度
- コミットからデプロイまでのリードタイム
- 障害の平均復旧時間
- デプロイの変更失敗率
ハイパフォーマーはデプロイを日に何度もするとあります。
変更を即デプロイしても、障害にならないことも計測しています。
これらの項目を継続的に改善するには、自動化されたテストや、デプロイは前提になるでしょう。
それだけでなく、コードの変更容易性や検証体制も整っている必要があります。
つまりこの指標を改善していく先には、変更容易性の高い「良いコード」が眠っているといえないでしょうか。
もちろんエンジニアだけではなく、運用や組織全体で改善していく指標ではありますが、ハイパフォーマーを目指す過程には様々な良いコードへの学びがありそうです。
良いコードの探究だけでなく直接ビジネス価値につながる
検証回数はビジネスを成功させるうえで非常に重要な要素です。 顧客からのフィードバックや小さなアイデアを検証し、プロダクトを磨き続けていくことが必要不可欠だからです。
しかし障害を起こさずに検証回数を高めるためには、高品質なプロダクトコードが不可欠です。 スピードを上げるにはコードの質が必要となるのです。
あまり直感的には繋がりませんが、実は高品質を追い求めることはアジャイルなプロダクト開発そのものでもありそうです。
まずは自社プロダクトで実践
mofmofはMy-opeという自社サービスを持っています。
ここには年季の入ったコードがあり、日々運用しています。
テストコードはたくさんありますが、変更が怖いコードもたくさんあります。
ここでFour Keysを改善することができるでしょうか。
導入し、改善を体験・検証してみます。