属人性?あれでしょ、その人じゃないとできないって奴

「属人性?あれでしょ、その人じゃないとできないって奴」

 じゃぁ問題。個人経営の病院があって、医者は一人しかいません。診察や医療行為は属人性が高いでしょうか?低いでしょうか?

「その医者がいないとできないんだから属人性が高いんじゃないの」

 違うんだよね。この場合は高いか低いかわからない。属人性ってのはそういう「その人じゃないとできない」じゃないんだよ。

「だって代われないじゃん」

 いや、医師免許をもってる人なら代れるよ。属人性ってのはその仕事をやる技能や資格を持っているかどうかって話じゃないんだ。仕事のやり方が標準化されているかとか、マニュアル化されているかとか、引き継ぎできるかどうかって話題なんだよ。

「資格が必要でも引き継ぎができるなら属人性は低い?」

 そうそう。

ソフトウェア開発の属人性の誤解

 属人性の排除が狙うところってのは「その人しかやり方を知らないよ、秘密だよ」って作業をなくす話で、技能的にその人しかできる人がいないって話題じゃないんだ。ソフトウェア開発の属人性を語るときにここを勘違いしていると議論にならない。

 僕は属技能性という造語を使っているけど、ある技能をもっていないと出来ない仕事というのがあって、技能を理由に代われないというのと、仕事の内容を把握しているのがその人だけで代われないというのを明確に区別しようよと言っているんだ。

 また、その技能を持つ人を募集しても集まらない、っていうのは人材不足であってこれもまた属人性や属技能性とは別の話題だ。さらに、その人ひとりしか技能を持った人がいないってのはトラックナンバーの話題で、どちらかと言えばリスク管理の話題。

 ちゃんと区別をつけれているかい?

ソフトウェア工学が属人性を下げた

 属人性を下げると言う意味では、ウォーターフォールなんかは非常に属人性が低い。完璧なドキュメントでもって人間に隠された秘密の仕様をあぶりだすのだから。もちろん、ご存じのとおり、ウォーターフォールは巨大な設計をプロトタイピングもなしに一発で設計してしまおうっていう企みで、それゆえの問題も多く指摘されている。近年、開発スタイルがアジャイルに傾いてきているのも求めていたものと出来上がりのギャップというリスクを重視するようになったがためだ。

 アジャイル開発っぽいことを適当にやっちゃうと設計が人の脳みその中だったりして、むしろ属人性が高まってしまう。だからアジャイルもどきは属人性と言う観点では危険なんだよね。仕様を共有するという点ではテストファーストとかは属人性を下げるための工夫のひとつと言えるんじゃないかな。

 オブジェクト指向とかデザインパターンってのはプログラムを型にはめて秩序を作ったところがポイントだ。goto乱れ飛ぶスパゲッティコードは属人性が高い。そして作った本人でさえもどういう作りなのか忘れてしまって誰もメンテナンスできなくなるものなんだけど、構造化プログラミングはgotoを去勢して構造という秩序をもたらしたし、オブジェクト指向は動的なフローチャートに秩序をもたらした。

 こうしたソフトウェア工学の成果を用いて、うまく設計されたプログラムというのはそれだけで属人性が低いものであったりする。ただし、手押し車が誰にでも使えたのに対して10tトラックの運転が作業者を限定してしまうように、道具を使える人に特殊なスキルを要求するようになってしまった。

 「運転免許がないからトラックを使って仕事をすることはまかりならぬ」なんていう現場監督はいやしないと思うけど、システム開発の現場では「オブジェクト指向を使えないからオブジェクト指向を使って設計することまかりならぬ」ってやっちゃう人がいるから困ったもんだ。そんな時代じゃないよ、もう。