人間性について考えてみる

書いてたらマネジメント寄りのポエムになりました。

アジャイル開発のひとつであるエクストリーム・プログラミングには価値・原則・プラクティスというものがあります。
この原則1として、一番最初に挙げられているのが「人間性」というものです。

XP本曰く

人間性

人間がソフトウェアを開発する。
このシンプルで逃れようのない事実によって、利用可能な方法論の多くがその効果を失っている。
ほとんどの場合、ソフトウェア開発は人間の欲求を満たしていない。
人間の弱さを認めていない。
人間の強さを活用していない。

とあります。
これを読んで、「なんかいいこと言ってるなー」と思っていたのですが、疑問が残ります。

人間の欲求とは何でしょうか。
人間の弱さとは何でしょうか。
人間の強さとは何でしょうか。

ということで、自分なりに考えてまとめてみようと思います。

人間の欲求

ビジネスのニーズと個人のニーズ

人間の欲求については、XP本で言及があります。
XP本では以下の項目が挙げられ、

  • 基本的な安全性
  • 達成感
  • 帰属意識
  • 成長
  • 親密な関係

また、「ビジネスのニーズと個人のニーズを満たす必要がある」としています。

例えば、「最新技術を駆使して仕事をしたい!」という人はよく見かけます。これは個人のニーズですね。
一方で、「最新の技術を駆使する」ということはビジネスのニーズをあまり満たしません。
より稼げる料金プランの実装や、事務作業の自動化のほうがニーズは高いでしょう。

では、ビジネスのニーズを優先して、個人のニーズをないがしろにして良いのでしょうか。
個人のニーズが満たされない場合、その人はそのビジネスで十分に力を発揮できるのでしょうか。

人間性」の定義に戻りましょう。
ソフトウェアを開発するのは人間です。
よって、よりビジネスを成功させるには、モチベーション管理が必要不可欠です。
モチベーションは小手先のテクニックによっても多少は上げることはできますが、個人のニーズを満たすことはモチベーションの基盤となり、よりその人の能力を引き出します。

もちろん、個人のニーズを優先してビジネスのニーズを無視することは良くありません。
大切なことはビジネスのニーズと個人のニーズをすり合わせ、どちらのニーズも達成することだと思います。

仕事とプライベート

人間のニーズには、仕事で満たせるものとプライベートでしか満たせないもの(休息や運動など)があります。

「仕事にプライベートの話を持ち込むな!」という人もいるかもしれませんが、僕は仕事とプライベートは密に関係していると思っています。

そもそも、

プライベートの時間 = すべての時間 - 仕事の時間

のような構図で時間を管理している人が多いように思います。(残念ながら)
この構図で言えば、仕事の時間が増えれば増えるほどプライベートの時間は減ります。
プライベートの時間が短いほど、プライベートでしか満たせないニーズを満たすことは難しくなります。
プライベートでしか満たせないニーズを満たせないことで集中力や創造力の低下を招き、仕事の質が下がります。

このように、プライベートと仕事は密に関係しています。
よって、より良い仕事をするためには、プライベートの時間を確保することが大切になってきます。(以前に書いた「なぜエンジニアは長時間労働してはいけないのか」も参照してください)

XPではこれを表すプラクティスとして、「いきいきとした仕事」というものがあります。
これは、

生産的になれる時間だけ働くこと。 無理なく続けられる時間だけ働くこと。

というものです。

テイラー主義から考える

テイラー主義とは、工場の生産性について工学的にプロセス体系建ててまとめた考え方です。
ポイントとして、

  • 通常、ものごとは計画通りに進む
  • 局所最適化は全体最適化に繋がる
  • 人間はほぼ代替え可能であり、何をすべきかを指示する必要がある

というものです。
今のビジネス社会はこれをベースに成り立っているといっても過言ではないでしょう。
むしろ当たり前すぎて、気付かないほどです。

人間の代替え

エンジニアリングにおいても、テイラー主義は深く浸透しています。
例えば工数を表す「人月」というものは人間が代替可能であることを前提にしています。

ですが、エンジニアは人間です。
当然、人間は代替えできません
同じ能力の人間なんていません。
なので、「この実装にはエンジニア3人で1ヶ月かかります」ではなく、「今の私たちが実装すると、1ヶ月かかります」と見積もりしていくべきです。

また、我々は個人で開発しているのではなく、チームで開発しているのです。
チームで開発するということは、他の人を知ることで、その人の苦手な部分を補ったり、その人が得意なことを最大限に活用できるということです。
また、アイデアを出す場合でも、人数が多いほど良いアイデアは出やすいでしょう。
これこそが、人間の持つ強みではないでしょうか。
なので、個人に作業を割り振るのではなく、協力して仕事を成し遂げられるような環境を作ることが重要に思います。

また、同じ人間であっても毎日同じ生産性は出せません
これは人間の弱みです。
つまり、マイクロマネジメントをして、細かい単位で生産性の上下を気にしても、さほど有意義にならないということです。
このような波のあるデータを扱うときは、統計の力を借りましょう。
ある程度の期間に対する生産性を、平均をとったり分散を見たりすることが大切です。

人間と計画

Aという挙動をするシステムがあった場合に、Bという挙動をするように突如、仕様変更があったとしましょう。
この仕様を達成するには、システムを改修する必要があります。ケースにもよりますが、デプロイなどの時間を鑑みるとそこそこ大変です。

Aという予定がある人がいた場合に、AではなくBをしてもらうように予定変更があったとしましょう。
ケースにもよりますが、予定を変更すること自体はさほど大変ではありませんね。(最初は戸惑ったりするかもしれませんが)

システムと比べるのもなんですが、人間は臨機応変に対応できることが強みではないでしょうか。
そう考えると、テイラー主義における

通常、ものごとは計画通りに進む

は、まさしく人間の強みを潰す考え方に見えます。
特に、現実と計画が乖離している状況でも、「何が何でも計画を死守するんだ!」みたいな状況は多いのではないでしょうか。

アジャイルサムライ』でも、「現実が計画にそぐわなくなったら、計画を変えるんだ。現実を変えるんじゃない。」という話は何度も出てきますね。

SIerなどでも、こういった人間の特性を活かせるように顧客と契約を握れると良さそうですね。

その他

その他思い浮かべたことを雑多に。

人間はミスをする

「人間はミスをする」ということはよく言われますが、これを前提にしたプロセスを実践している組織は少ないように思えます。
その仕様にはミスがあるかもしれないし、その計画にはミスがあるかもしれないし、その要求にはミスがあるかもしれないし、その仮説にはミスがあるかもしれません。
なので、もっともっと検査や確認をする必要があります。
テストコードを書くだけでは足りず、ペアプログラミングをしても足りません。
開発のやり方や進め方すらも検査していく必要があります。
例えばアジャイルで有名なスクラムでは、すべてのスクラムイベントに対して、検査と適用が用意されているつくりになっています。

人間は大きな変化には耐えられない

人間にとって習慣やパターンは大切です。
それが大きく壊されると、人間は能力が発揮できなくなります。

転職直後に能力が出せないのもその一端でしょうし、大きな組織改変が行われると、(それがどんなに素晴らしいものであっても)ハレーションが起き、不満が爆発するのもそうです。

なので、変化はなるべく小さく、断続的に起こす必要があります
アジャイルではよくベイビーステップと呼ばれますね。

振り返りをすると、挙がってきた課題のすべてに対し、変化をして対処したくなります。
しかし、それでは上手くいきません。
最もインパクトのあることに的を絞り、少しずつステップアップするかたちで課題に立ち向かっていくほうが良くなります。

まとめ

ということで、人間の強さや弱さについて自分なりにまとめてみました。
このテーマは人によって意見がだいぶ変わりそうなので、他の方の意見もきいてみたいな。


  1. 価値に対して方向性を与えるもの