飽きる作業は機械化しましょう。どうせ人は飽きたらミスするんですから。


ワタシが仕事で飽きる作業って、その作業で思考が入らない作業、ですね。何が嫌いって、あっちのexcelと紙の申請書を突合させたりとか、こっちのリポジトリとあっちの文書管理システムと自働化できないんで手間をかけて同期取るとか、そういったのです。管理のためでも目的意識を持てるものなら、「それ大事なしなー」とか、「これ、出しておかないとメンバ困っちゃうしなー。」とかなら作業としても楽しいんですけど、「これなんのためかなー↓」みたいなのだと、もーちょー面倒ですし、〆切間際まで放置することもあるし、「こんなのやってられませんよ。」なんてもーもー言って牛になりかけたりします。


システム開発の中でもそうした飽きる目的もわからない作業が降ってくることはよく起こるし、メンバが作った手順の中に潜んでいる場合もあって、意外と注意を払っておかないと後々ヤバかったりすることもあるんです。


少し前のプロジェクトで、まぁ、理由を聞けば言い訳したくなるような開発環境の構成だったんですが、複数の製品を統合した新しいバージョンの統合開発環境が実は統合しきれていなくて、IDEとクラサバの環境が機能で使い分けてたり、周辺開発は、まぁそれはメンバの好みもあったんですが周辺機能はスクリプトで書いていたり。


その少し前のプロジェクトはリリース的に短納期で機能を追加リリースするようなシステム開発で、わかりやすく言えばagileシステム開発方法を採用していたので、ある作業ははじめから“繰り返す”ことが約束されていたんですね。


なんだか想像つきます?


そう、テスト、なんですね。で、しょっぱな、言い放つわけです。ワタシが。

「このプロジェクトは、追加機能をリリースしていくインクリメンタルなシステム開発と言ってもいい。でね、リリースごとにそのリリースで開放する機能をテストをするのは勿だけど、回帰テストはするよね。」
「そうだよね、しますよ。しないといけない。」
「それ、全部、人手でやろうなんて微塵も思っていないよね?」
「えー!無理ですよ。だってIDEは……。クラサバっぽいのあるし。」
「へー、テストの工数そんなにタップリ積んでたんだ。積んではあったよね。プロジェクトマネージャの貴方が見積もっていたんだもの。でも、全部人手でやる工数積んでたの?」
「ちょっと、厳しいかも。」
「このシステム、現行も貴方がやってて、中身知っているしやり方も知ってたよね。その上で見積もったんだよね。」
「じゃあ、しょうがないじゃない。幸いにもそれなりにテスト工数積んであるんだし。まぁ、そうじゃないとレビュー通さないもん、ワタシ。」
「テストまで時間はあるから、ちょっと考えてよ。大変だよ、全部手でやるのぉ〜。」


と言うわけで、全部じゃないけどそこそこの部分が全自動と言うわけにはいかないけれど、手間を省いてテストを出来るようになったんですね。仕組みとしてはxUnitテストとおんなじって言ってもいいんじゃないかな。データ用意して、実行プログラムの構成情報メンテして、実行するようなものだったんで。


その仕組みを作ってくれたのはベテランエンジニアでした。こういうとき、ベテランエンジニアは本領発揮というか、頼もしいです。ベテランエンジニアにはやっぱり無理難題を与えると過去の経験から知恵が出てくる出てくる。


繰り返し開発なのとagileのscrumのエッセンスを取り入れてシステム開発やるよ、と言っていたのでスプリントの終わりには、ケプトをやりました。

「で、Keepしたいことは?」
「テストの自働化をベテランさんにしくみ化してもらったの、すっごく良かった。」
「どこが?」
「だって、用意したら、パッと結果が出るんですよ。」
「10ケースあっても、パッと。10回チョットづつ違うテストを10回やらなくていいんですよ。」
「いや、あのとき無理ーって言ったけど、ベテランさんに考えて悩んでもらってよかった。」
「ほんとです。始めるときテストケースの自働化の話がなかったら、ゾッとしたです。」
「だって、製品バグがあって、ちまちまとパッチが出る度にテストしないといけないんですよ。自分たちの作った機能とは別に。」
「まぁ、回帰テストはしないとね。サービスとしての保証が必要だもの。」
「それもあるんですが、テストをしておかないと製品がパッチで振る舞い変わることがあるから……。」


ふりかえりでとっても感謝されました。ただ、「繰り返し作業は自働化=機械化してね。」って、言っただけですけど。


システム開発で一番お金がかかるのは何かをエンジニア自身が知っておかないといけないんですよ。それは、エンジニアあなた自身です。あなたをアサインしておくことが一番お金がかかるし、顧客にリリースするサービスを良いものにするのもイケていないものにするのもエンジニア自身です。なら、自分がエンジニアとして関与する作業の中で、何が繰り返ししないといけない作業か、それがやらないといけない作業で楽しい作業かつまらない作業か見極めて、繰り返す作業でツマラナイ作業はさっさと自働化を考えて実装するんですよ。


ツマラナイ作業ばっかり、ツマラナイ失敗やミスをするんです。そんな作業にミスを続けてたら、効果のないチェックリストや報告書が増えるばかりです。それ受け入れられますか?って話に繋がるんです。そんな作業にエンジニアを介在させない仕組みを構築することもエンジニアの仕事です。