思考と現場の間で

「いいサービスづくり」のために、組織づくりやソフトウェア設計など、考えていることを書きます

開発ツールを最大限活かすために大切なこと

 アジャイルスクラムテスト駆動開発ドメイン駆動設計、継続的インテグレーション…。色々な開発ツールや開発の考え方があります。それぞれ素晴らしいツール(手段)であり、取り入れるだけで開発方法を変えることができます。ただ、このような素晴らしいツール類の弊害として、だんだん目的化してしまうということがあります。「ツールは手段であり目的ではない!」みたいな話はどこにでもあるんですが、それはそれとして、少し別の視点からツールを考えてみたいと思います。

優れた道具を使うとどうなるか

f:id:tsuyok:20140130225057j:plain:w200f:id:tsuyok:20130928154912j:plain:w354

 左側の写真は私が趣味でやっているティンパニ(右側の写真)という楽器をたたくためのマレットです。このマレットは、私がお世話になっている先生に作っていただいたものです。先生が使っているマレットと同じ作り方で、私の腕の長さなどを考慮して作っていただきました。オーダーメイドです。楽器をやっていない方々はわかりにくいかもしれませんが、このような道具が変わるだけで、大きく音が変わります。楽器が変わるかくらい違います。

 マレットを変えるとすぐに音が変わったという点だけでも驚いたのですが、最も驚いたのが、長い時間使っていくと道具に合わせて演奏スタイルも変わってきたことです。マレットの握り方、上げる角度、音のイメージ、形も考え方も一緒に変わりました。また、この道具を使っている前提で先生にレッスンをしていただくと、当然先生と同じものを使っているので、スムーズに音のイメージやフレーズの流れ方を反映できるようになってきます。そして、たまに別のマレットを使っても、自然にその音に近づけるようになりました。そこで気がついたのが、

「道具が人を育てる」

ということです。

開発ツールやプロセスを導入することで人が育つ

 私はここ数年、スクラムテスト駆動開発継続的インテグレーションドメイン駆動設計、Spring、Intellijなど、色々な開発プロセスフレームワーク、開発ツールに取り組んできました。幸運にも組織がそれを許しサポートしてくれたお陰で、組織やルールという意味で大きな障害が無く、ほぼ開発チームがどう活かすかという点だけに集中して取り組むことができています。とてもありがたいことです。

 これらに取り組んだおかげで、大きく変化しました。何が変化したかというと「人」と「組織」です。例えば、スクラムに取り組むことで、メンバーが自発的に考え仕事をするようになり、テスト駆動開発継続的インテグレーションをやることで、テストコードを書いて毎日カバレッジを意識するようになり、ドメイン駆動設計を行うことで業務をオブジェクト指向で表現をできるようになり、SpringのDIとDDDを組み合わせることで依存関係逆転の原則に則ってドメインオブジェクトを独立させるように努力するようになり、Intellijによって名前(スペルミスも含め)に気をつけ、リファクタリングを意識しIntellijの機能を使ってやるようになる。

 組織もその効果に合わせてルールや組織の体型を変えていく。私の組織は驚くほどフラットになりました。基本的にマネジメントは開発チームを極力邪魔をしないように努力をしてくれています。

 これらは一例ですが、私も含めもともとそれに取り組んだ人たちが世界のトップレベルのプログラマのようなレベルにあるわけではありません。その辺によくいる普通のエンジニアです。そういう人たちがこれらのツールを導入することによって勉強し、それに合わせて変化をしていった。ツールを導入したこと云々ではなく、それが最も大きな成果だと感じています。

目標はツールの導入ではなく人の成長である

 これまで私の開発してきた環境では、「ツールを導入するとツールが何とかしてくれるから良い開発ができるんだ」という前提でいろいろな開発手法やツールを使ってきました。しかし、残念ながらその多くは成功しませんでした。現実の案件や人やお客さんと合わなかったり、スピード感が違ったり。それはツールの問題なんじゃないかと思っていた時期もあったのですが、ずっと違和感を持っていました。「ツールは手段であり目的ではない!」というのは同感なのですが、では何が目的なんだというしっくりくる答えは出ていませんでした。ただ最近、音楽もシステム開発もやっててようやくこう気づきました。


「優れたツールを使う目的は、人を成長させるためである」


 優れたツールというのは、器が大きいです。使う人がそのツールに合わせることができれば、多くのことに対処でき、効果を上げることができます。違う言い方をすると、ツールに合わせるように努力するだけで、本質的にシステム開発に必要な優れた考え方を自然に会得し、良い開発ができるようになります。同時に自然にその人の能力も向上していきます。ここまでくれば開発効率が上がり、いい設計などのアウトプットが出てるはずです。もしツールを変えたとしても、その基本的な考え方はその人に残っていきます。

 話題になっていたり優れているように見えるツールを見ると、導入してみたくなります。まずは導入することは必要なのですが、少しでも効果が出ると一気に会社全体に広げるとか、スピード感を一気に上げたくなります。ただ、残念ながら人の成長には時間がかかります。そうなると、意図も伝わらず導入が成長を追い越してしまい、それほど効果が無いじゃないかということで止めることになります。
 逆に、「組織に合わないから導入できない」という話も聴きますが、そのメッセージは自分たちを変えるつもりがないということとイコールになり、ツール以前に大きな問題です。そういう組織は、どんなツールを導入したとしてもうまくはいかないでしょう。

 そう考えると、何も考えないで優れたツールに人も環境も合わせてみるというのも選択肢の一つかもしれません(守破離)。ツールを上手く利用して人が成長していく(守破離)。最終的にはそのツールでも物足りなくなり、自分でツールを作ったり、新たにもっと優れたツールを使っていく(守破離)。

 そのような人や組織の成長曲線を作っていくことを目的にツールを導入していけば必ず効果が出ると思っています。