頻度を上げれば難しさは軽減する

2011年7月28日

私が好きな言葉の1つは、「**痛いなら、もっと頻繁にやれ**」です。一見無意味に聞こえますが、深く掘り下げると貴重な意味を持つという、嬉しい特性があります。

この言葉が当てはまる例として、統合があります。ほとんどのプログラマーは、自分の作業を他者と統合することは、イライラして苦痛な経験であることを早期に学びます。そのため、人間の自然な反応としては、できるだけ先延ばしにすることです。

しかし、問題は、統合間の時間と苦痛をグラフ化すると、以下のようになることです。

このような指数関数的な関係がある場合、より頻繁に行うことで、苦痛を劇的に軽減できます。そして、これが継続的インテグレーションで起こることです。毎日統合することで、統合の苦痛はほとんどなくなります。痛かったので、より頻繁に行った結果、もはや痛くなくなったのです。

この、苦痛を伴うことをより頻繁に行うという考え方は、アジャイル思考において頻繁に登場します。テスト、リファクタリング、データベース移行、顧客との会話、計画、リリースなど、あらゆる活動がより頻繁に行われます。

なぜこのような効果があるのでしょうか? 大きく分けて3つの理由があると思います。第一に、これらのタスクのほとんどは、量が増えるにつれて非常に難しくなりますが、小さな塊に分割すると、簡単に構成できます。データベースの移行は、この好例です。複数のテーブルを含む大規模なデータベース移行を指定するのは、難しく、エラーが発生しやすいです。しかし、一度に小さな変更を加えていけば、それぞれを正しく行うのがはるかに容易になります。さらに、小さな移行を簡単に繋げて、シーケンスにすることができます。このように、大きな移行を小さな移行のシーケンスに分解すると、すべてがはるかに扱いやすくなります。これがデータベースリファクタリングの本質です。

第二の理由は、フィードバックです。アジャイル思考の多くは、より迅速に学習できるように、フィードバックループを構築することです。フィードバックは、エクストリームプログラミングの明確な価値であり、定義されたプロセス制御と経験的プロセス制御の違いについてのケン・シュエイバーの議論の中心にあります。ソフトウェア開発のような複雑なプロセスでは、自分がどこにいるのかを頻繁に確認し、進路を修正する必要があります。そのためには、フィードバックループを追加し、フィードバックを得る頻度を高めて、より迅速に調整できるようにするあらゆる機会を探らなければなりません。

第三の理由は、練習です。どんな活動でも、より頻繁に行うことで上達します。優れた外科手術を受けるための鍵は、その手術を頻繁に行っている外科医を見つけることだと言われることがよくあります。練習は、プロセスの問題点を解消するのに役立ち、何かがうまくいかない兆候に気づきやすくなります。自分が何をしているのかを振り返れば、練習を改善する方法も見つかります。ソフトウェアの場合、自動化の可能性もあります。何かを数回行うと、自動化する方法が分かりやすくなり、自動化へのモチベーションも高まります。自動化は、速度を向上させ、エラーの可能性を低減できるため、特に役立ちます。

そのため、苦痛を伴う活動に直面したときは、これらの力が当てはまるかどうか自問自答してみてください。当てはまる場合、頻度を高めることで、より効果的に作業を進め、ストレスの原因を取り除くことができます。