「開発」タグアーカイブ

エンジニアとしてどう立ち振る舞うことが正解だったのか

懐かしいクライアントさんから2年前に納品したシステムサービスに「バグ(不具合)がある」と連絡が入り、至急なおして欲しいと言われる。

厳密には瑕疵担保責任期間(6ヶ月)は終了しているけれど、
私が一人で開発したものだし、クライアントさんも困っているようだし、連絡を受けてからすぐにバグ修正をするための調査を始めた。

まずは「バグと思われる現象」について、Skypeとメールにて詳細に説明を受け、自ら再現などを試みつつ何度もソースコードを読み返すこと二日目。
よくよく調べていくと、バグだと言っていた内容は実は当時口頭で合意した「仕様」だったことがわかった。
(そもそも、2年も経っていて仕様を忘れてしまっていたが、ソースコードのコメントに仕様が書かれていたことで記憶が蘇った。)

そこで、急いで調べた結果について報告を行う。
「これはそもそも仕様なのでバグではありません。もしこの仕様を変更する場合は追加修正という形になります。」と。

しかし、どうもクライアントさんは納得ができない様子。
無理もない、クライアントさんには情シス部があるわけでもなく、社内に専門家もいない小企業さんである。
(プラス、これまで色んな開発会社に仕事を頼んでは失敗を繰り返している過去を聞いているだけに、開発者への妙な不信感も多少あるのかもしれない。)

ということで、クライアントさんからは、
「やはり、これはバグだと思うし、そんな大きな変更にも見えないし、大変困っているのでとりあえずすぐに直して欲しい。」と告げられる。
(通常は、そういうトラブル予防として「エビデンスの確保」や「ドキュメンテーション」をしっかりやるのだが、小さな案件だとそこに回せる予算がないケースって結構あったりする。2年前に受けた時はそのケースだった。)

ここで私は非常に悩み始める・・・。

実際問題として、この不具合(とクライアントさんが思っているが、実際は当初通りの仕様)の改修は、それ自体それほど大したことはない。
なんなら「1日もあればサクッと改修できる目算」である。

たった1日、私がサービス(無償奉仕)しさえすれば全て丸く収まる。

クライアントさんは希望通りの機能を手に入れて業務が円滑になってハッピー。
私の方もこれまでお付き合いしてきているし、1日程度のサービスくらい融通を効かせてもいいのではないかと思う。

しかし・・・・。
「クライアントさんが納得しない」「私がちょっとサービスすればいいだけ」という理由でそれをやっていいのだろうか?

やはり、ちゃんと納得行くまで説明して「バグではなく当時合意された仕様である、なのでこの改修は明らかに追加労働であり、追加費用をお支払いいただく事となります。」ときちんと理解していただくべきか・・・。

ちなみに、今までなら「サービス」や「善意」で、さっさと修正してしまう場合も結構あった。
理由は、それがもっとも「経済的視点でみて合理性が高い」から。

詳細な状況説明ドキュメントを丁寧に書き下ろして、素人にもわかるように解説資料も作成し、それらを持ってして「これは仕様なのです。」と説明し理解していただくコストを考えたら、1日でプログラムを修正する方が圧倒的に早い
さっさと後者で対応してしまった方が、私としても楽だし、クライアントもバグ(本当は仕様)が修正されるという、一番経済合理性のある道筋かと思う。

しかし、今回はかなり悩んだ挙句、後者ではなく前者を選択した。

つまり、プログラム修正する倍以上のコストをかけてでも理解してもらう作業を行おうと。
1日で修正できる程度のバグについて、二日かけて資料を作成し送付、その後資料に基づき何度も長文説明メールのやりとりをしてさらに数日かけ、「これは仕様となっており、修正には追加費用がかかります。(必要なら見積書は作成させていただきます)」ということを細部まで説明しきった(個人的には)。

結果、努力が実を結び、クライアントさんからは「なるほど。そういうことなのですね。よく理解できました。」と、きちんとした理解を得ることができた。

が、同時に「追加のコストがかかるならやめておきます。」とも回答を得た。
(それ自体は問題ない。クライアントさんはクライアントさんのふところ事情があるわけだし)

さて・・・。
それにしても、私の選択は正しかったのだろうか・・・。

自分の気持ちとか感情的な部分はどちらでもよく、「客観的・経済的に正しかったのか」という部分で未だ自己解決できずにいる。

私が、何も言わずにプログラムを修正していたら、クライアントさんも修正の恩恵を受けられた上に、私も丸二日以上ものコストを割かずに済んで(1日で終わって)一番楽だったはず。

しかし、今回の「正しい理解と納得を得る」という選択をしたため、私は丸二日以上の別稼働を失い、クライアントさんも修正を受けられなかった。
結果だけを見ると、誰も得をしない形である。
まさに”Lose-Lose”のようにしか見えない。

確かに、これを短期的に見るとまさに「不経済」。

ただ、長期的視点で見ると結構大切な行動なのではないかと思っている。
そもそもソフトウェア開発なんて外からみて「何やってるのか、どれだけ大変なのか、いくらが適正なのか、etc」なかなかクライアントさんにはわかりづらい。
だからこそ、こうやって、一つ一つ丁寧に理解を得ていくことでしか、信頼を積み重ねていくことができないのも事実であり、その信頼関係を築くことが長い目で見て”Win-Win(懐かしい響き)”に結びつくのだと信じている。

今回は、信頼関係を築く事にコストをかけたと。

とても些細で小さなことだけど、信頼関係に大きな仕事も小さな仕事も関係ない。
どんな仕事や人間関係にしても、こうやってコツコツと積み上げることで信頼関係というものがようやく築けるわけだし。

P.S.
とかいいつつ、人間とは弱い者。
短期的に見て、非常に不経済だった自分の行動を自己正当化したいがために文章を書いた弱いエンジニアがこちら。
(1日でサクッと実装しちゃった方が楽だったな〜、笑)

このエントリーをはてなブックマークに追加