「1行仕様書」の思い出
ネットショッピングするようになって、買い物に行く時間が短縮され、さらにポイントもたまる時代になりました。時間の使い方は常に効率化され、そして短縮化されていくのです。ただ、「6000円以上で配送料無料」につられて買い物しすぎてしまい、お小遣いの正しい使い方は効率化というか最適化できないでいるこのごろです。
<バグをなくすために仕様書を作る>
コメント規約で思いっきし分かりにくくなったソースたちを目の前に僕らは、崖っぷちでした。
バグがあまりに多く、そのための対応として、修正ソースをコメントアウトして残しました。ADD、MOD、DELというコメントですべての履歴を残すことになり、結果、ソースがコメントだらけになったのです。
ある程度の年数、同じソースに向き合っていると愛着がわくもので、それを自分たちで汚してしまった後悔の念と、これからのことを考えて絶望していたのです。
けれど、仕事をそこで放棄できない僕たちはみんなが感じている問題点を列記することとなりました。
- 仕様書があったり、なかったり
- みんながどんなテストをしたか分からない
- コードレビューをしたりしなかったり
その中の仕様書について、まず僕たちは話し合いました。
仕様書に関しては、昔に先輩が1行の仕様書を僕に渡して「よろしく」と言いました(僕は新人でした)。その瞬間、時の流れが止まった感覚を覚えました。この時からその仕様書のことを僕は「1行仕様書」と呼ぶことにしたのです。それ以外では、クライアントから要望がない限り、仕様書はあったりなかったりでした。もちろん共通フォーマットってものも存在していませんでした。
悪い習慣を絶ち切って仕様書から始めようと僕たちは「プログラムを作る前に仕様書を作る作業」を徹底することにしたんです。
僕も、この時に仕様書を作ることから始めていなかったので、作っては内容が足りないとPMから怒られる毎日でつらかったです。そのPMがたまに出してくる「1行仕様書」のダメ出しをしてみた時の痛快な思い出は、僕の心にささやかな勝利の記憶として残っています。
ちなみに「1行仕様書」の例は以下のとおり。
例:○○帳票にチェックボックスを追加して、得意先ごとに改ページができるようにする。
まあ、確かにそうですよ、間違いないですよ。経験者であれば、問題なくやるでしょう。そして、そのチェックボックスが積み重なり、画面中チェックボックスだらけになるでしょう。そして、単純なタブ順もおかしなことになり、クライアントから、tabキーで移動できないとクレームになるのです。
僕は、感じたのです。1行仕様書の恐ろしさを……。
確かに、そのドキュメントを見ればものすごく改修は簡単そうですが、ベースとなる処理や、その他もろもろの課題は1行に内包されているので、どのようにしてチェックボックスを追加して何に注意して実装したのかや、その時の問題点は忘れ去られます。何年もすれば、なぜ追加したかも1行の中からは読み取れず、どのような理由で存在しているか分からないチェックボックスに悩まされるのです。
そんなわけで「1行仕様書」はやめようということになりました。最初は画面設計から処理説明がメインだったけど、そのうちIOや項目定義も追加して……という具合に、段階的にやっていこうという話になったのです。
最初は、仕様書を書く時間が結構かかりますが、やはり多人数で行う作業になると、相互理解の意味も含めて仕様書は大切ですよね。プログラムは1人で作るのが一番早いといわれていますが、納期には限界があって、結局多人数になります。ただ、人が増えて、単純に作業時間が短縮されるわけではなくて、純粋に個々の時間だけ考えれば、2倍の時間になると聞いたことがあります。なので、相互理解をしっかりやっておかないと、余計に時間がかかったり、品質が落ちたりする。人を増やしたらやれるでしょと結論を出してしまう人もいるので困ります。そんな単純な作業ではないと思うんだけど困ったものです。
その後、ER図を作ったりと進展していきましたが、やっぱり、仕様書は必要だと感じてます。会社によって、あるいは案件の種類によって、仕様書の内容やフォーマットはさまざまですが、仕様書作成のレビューなどで仕様理解が不十分だったり、無理な仕様変更した場合のプロジェクトは、よくトラブルが発生しているのを思い出します。
もちろん、プロトタイプを作って早々にレビューする場合とかは、仕様書は後回しでいいと思いますが、無駄に多くてもいけないし、少なすぎてもいけないのが、仕様書とテストのような気がします、言い換えると無駄と無理をしないというのかな、矛盾のない手順とドキュメントが必要ですよね。
仕様書っていろいろ考え方があったり、会社によって違いはあると思うけど、もう「1行仕様書」は見たくないし、後輩にも見せたくないと感じました。それは今も感じています。