突然ですが。 みなさんはソフトウェア開発でどれくらい失敗をしていますか?
失敗することについて、私見をまじえつつ考察してみたいと思います。
プロジェクトで失敗していますか?
仕事でソフトウェア開発をする場合、プロジェクトという単位で開発をすることが多いと思います。 プロジェクトは、その性質から基本的に一点物、その開発は常に初めて経験するものです。
初めてですから、成功も失敗もすべてを予想できるわけではありません。 解決したい領域が自分の不慣れなものであれば、どうすれば成功するのか予測することはいっそう困難なものになります。
これでは何かしら失敗をすることは約束されたようなものですから、心置きなく失敗してもよさそうなものです。
そもそも失敗とは?
しっぱい【失敗】
やりそこなうこと。 目的を果たせないこと。 予期した効果をあげられないこと。
三省堂 スーパー大辞林
プロジェクトで実現したかったことが、開発したソフトウェアで実現できなかったとき、失敗と言うことができそうです。 実現したかったことが実現できなかったのですから、これは本来はネガティブな結果です。
一方でよく耳にするように、失敗することでうまくいかない方法を見つけることができたのだから無駄ではない、という考え方があります。 この立場に立つと、うまくいかいないソフトウェアを開発するためにかけた資源をどう評価するかという問題は残るものの、失敗そのものは無駄だったというわけではありません。
はやく成功に到達するために、はやく失敗するというのは、変化の早い環境の中ではむしろ当然のものという理解も広まってきています。
失敗は、無理に取り除くのではなく、成功のための踏み台ととらえるのがよさそうです。
ただし、それとは別で区別したいものに、避けられたはずの誤りというものもあります。 思い違い、思い込み、確認不足によるミス。 これらはプロジェクトの性質によるものでなく、むしろプロジェクトへの取り組み方によるものでしょう。
失敗することとは別に、誤りをおかさない工夫はしておきたいものです。
いつ失敗するか?
失敗は避けるものでないとして。 では、失敗するならいつがよいのでしょうか?
これは先ほど棚上げした、失敗したことにかけた資源をどう評価するか、という話にもつながりそうです。
最初に考えられるのが、失敗が許される枠を用意して、その中で失敗をすること。 本番に影響を与えず失敗できるように、いわば練習期間を用意して、うまく行く方法やうまくいかない方法を見つけることに当てる。
わたし個人としては、これには異論もあるとは思いますが、自分の能力が資源であり能力を伸ばし効果的に発揮するという点で、プログラマはアスリートと変わらない部分があると考えています。
練習せずに本番にのぞむアスリートがいないように、プログラマにも結果の成否にとらわれない枠があってよいのではないか、と感じています。 個人が自分の能力を伸ばすことに努めるのはもちろんのこと、プロジェクトとしてもチームとしての能力を伸ばすための時間があってよいのかもしれません。
一方で。 できあがった時点では成功なのか失敗なのか、判断がつかないものもあります。 例えば、これはわたし自身が最近経験したことですが、よいユーザインタフェースに改善したはずが、逆にユーザに戸惑いを与え不必要な操作を増やしてしまう結果になってしまったものがありました。 実際にサービスを提供してみないと、何が正解なのか本当にはわからないものです。
ユーザに損害がおよぶ事態はさけなければなりませんが、時には実世界で成否をはかることも必要で、プロジェクトはそんな状況も加味しておくべきなのかも知れません。
うまく失敗できているか?
失敗とは何で、いつなら失敗できるか考えてみましたが、もう一つ他にも重要な要素がありそうです。 失敗することの得手不得手です。
正直なところ。 わたしは、失敗することが下手です。 失敗すれば凹むし、めげるし、ふさぎます。 不必要なほどダメージを受けます。 ダメージを受けるというよりも、自分自身にダメージを与えているというのが正解かもしれません。
失敗できる条件がプロジェクトに用意されているとしても、自分の気持ちとして失敗をゆるせるかはまた別の話。
感情は、本人以外が直接働きかけることはできません。 ですがそれでも、関わり方を工夫することはできるかも知れません。
以前、ソフトウェア開発を委託する立場だった時期がありました。 そのとき心がけていたこととして、報告される失敗に対して深刻な印象を与えないようにする、というものがあります。
深刻になり失敗してしまったことに心がとらわれていると、課題の解決のための力が削がれてしまいます。 当時はそこまで意識していたわけではないのですが、解決のために深刻にならないように、しかし真剣に真摯に取り組めるように、感情の余計な負担を減らしたかったのだと思います。
失敗したらどうするか?
共有しましょう。
なぜそうなっているのか。 その背景を知らないでいると、不用意に「改善」してしまい、失敗によって得られていた知見を失うという誤りをおかす危険があります。 その結果、その知見によって防がれていた課題が再び現れ、重大な事故につながることもあります。
失敗することが、うまくいかないことを知るための行為であるなら、その知識を活かさない手はありません。
ここでもまた「失敗を共有したらあげつらわれる」ことがあると、心理的な負担や障壁になってしまいます。 そうならないためにも、心理的に失敗できる環境が重要なのだと思います。
失敗のために
高い頂には広い裾野が必要です。 そして失敗は、成功のための裾野だと思います。
失敗だけが裾野ではありませんが、失敗もまた裾野を広げる役に立っているように思います。
過ちをおかすのではなく、裾野を広げるために、積極的に失敗することができたらと思います。