Skip to content

Instantly share code, notes, and snippets.

@euske
Created June 3, 2020 04:16
Show Gist options
  • Save euske/81faca36cd74454dd9fd9d481e605e6d to your computer and use it in GitHub Desktop.
Save euske/81faca36cd74454dd9fd9d481e605e6d to your computer and use it in GitHub Desktop.
「ささいな仕様変更なんてものはない」 "There are no small changes" by Des Traynor

ささいな仕様変更なんてものはない (There are no small changes)

Des Traynor

https://blog.intercom.com/there-are-no-small-changes/

「...この製品レビューを書き込む欄の文字列を140字に制限したいんだ。 なぜならある時点で通信手段としてSMSを使わせるかもしれないから。 こんな仕様変更は簡単だよね?」

間違いである。

本当に品質のいいソフトウェアを作ろうと思ったら「ささいな仕様変更」 などというものはありえない。ひよっこプログラマーなら 「こんなの、if文入れれば一瞬じゃん」と思うだろうが、そんなに世の中甘くはない。

簡単なところからいってみよう。もしユーザが140字以上のレビューを投稿したら どうなるだろうか。勝手に文字列をちょん切るか、あるいはエラーメッセージを表示するか? エラーを表示するとしたら、なんて表示すればいいんだ。そしてどこに表示する? どうやってユーザに140文字の理由を説明する? お客様用の表現のガイドラインはあるか?

しかし待て。問題はまだある。

実際にこのエラー処理をするのは誰なのか? これはWebアプリだが、サーバ側で エラーを返すのはあまりきれいでない。クライアント側でのチェックが必要だ。 とすると、JavaScriptを書くのは誰なのか? このJavaScriptはサーバと同じやり方で エラーを表示すべきなのか? 違うとすれば、そのスタイルはどうやって決める? もしJavaScriptが使えなかったらどうする? クライアント側とサーバ側で 140字以下であることを保証するにはどうすりゃいいんだ?

まだある。ユーザの視点から見てみよう。彼らはすでによくわからない理由で レビューを140字に限定されている。これだけでもウザいのに、あと何文字まで書き込めるか ユーザに推測させるのか? それはまずいので文字数カウンタを表示しよう。 すると、さらにまた多くの疑問が生まれる…

この文字数カウンタは誰が書くんだ? すでにあるものをネットでひろって使うとしたら、 それを対象ブラウザ全部に対してテストしなきゃなんない。そしてカウンタは画面のどこに表示する? 140字を超えたらどうすりゃいいんだ。これ以上入力させないようにするか?  長いテキストをペーストしたらどうなる? とにかく入力させておいて、それから 警告を表示すべきなのか? ちなみにUnicodeの複雑怪奇な仕様により、 もはや単一のコードポイントは1文字ではない。いまや組み合わせ文字や 重ね合わせ文字などが普通に使われている。文字数カウントを自作するんだとしたら、幸運を祈る。

さらに、過去に入力された製品レビューのデータがすでにあったらどうする? 全部140字にちょん切るのか? 新しいユーザにはどう説明する? もし同じ機能をもつiOS用やAndroid用のアプリがあったら、 それらに対しても同じ変更をしなきゃならない。当然、開発者用の文書の更新も必要だ。 このようにして、当初2分でできると思っていた変更が2時間になり、2日になる。

そのとおり、これは単なる愚痴だ。だがプログラマというものは、日夜こうした問題に 取り組んでいるのである。最初の「機能」はどれも恐ろしく単純に見えるが、 正しくそれをコーディングするのは難しいし、ましてや正しく保守するのは悪夢だ。 したがってソフトウェアの品質というものを真に気にするなら、 「ささいな仕様変更」なんてものはないのである。

(日本語訳: 新山祐介)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment