ちょうど2週間、日記を書いていなかった。
2週間前の日記は、学校が休校になった、という話だった。
個人的に今回の騒ぎには多々疑問があるが、事実は事実として受け入れるしかない。
2週間前の状況としては、「コロナウイルスの潜伏期間は12.5日」という医学的見地から、とりあえず2週間を目安としていた。
で、現状では、休校は続くことになっているが、卒業式などは日程を変更してやることになった。
ちょうど2週間目の今日は、小学校の登校日。
といっても、今後の予定などを子供たちに伝え、家族に伝えるためのプリントなどを配布し、学校においてあるものを持って帰って終わり、ということのようだ。
中学校の登校日は後日。子供たちが一斉に通学路を歩かないように、日程など調整しているようだ。
さて、日記を書いていなかったのは、別に子供たちが家にいたからではない。
僕が非常に忙しかったのだ。
仕事でお手伝いしているプログラムのリリース日が今日で、半年かけて準備していたのだが、最後の追い込みになっていた。
しかし、久しぶりのデスマーチ進行。
以前から使われていたプログラムを、いろいろな都合があって「1から作り直す」ことになっていて、この作業自体は1年前から始まっていた。
半年かけて「最低限の機能が入った互換品α」ができたところから、僕は参加した。
ここから、
・旧バージョンで使いにくかったインターフェイスの改善
・旧バージョンにあった機能は基本的に全部作る。(互換のための機能拡張)
・旧バージョンで要望があった機能の盛り込み
と進めてきた。
ここで一応書いておくが、僕が仕事を請け負うときは、多少無理してでも早めの完成を目指す。
作ったプログラムには必ずバグが潜むためで、僕のいう「早めの完成」は、プログラマーとしては出来上がった、と思う時点を示す。
しかし、商品になるにはバグをつぶし、僕が勘違いで仕様通りになっていなかったところを作り直し、場合によっては仕様変更を再実装する。
仕様変更を嫌がるプログラマーもいるが、僕は嫌ではない。
商品を作っているのだからブラッシュアップは必要だと考えている。
だから、仕様変更にも対応できるだけの時間の余裕をもって完成させるのだ。
で、完成したのは2週間ほど前だ。
ここで、さらに追加機能の要望があった。
絶対に入れないといけない機能だけど、技術的な仕様も固まっておらず、それがゆえに後回しにされていた。
打ち合わせを行い、技術的な問題点を話し合い、一番作りやすい方法を提示する。
しかし、それでは時間がかかりすぎるだろうということで、さらに機能要件が絞り込まれ、何とか時間内に可能じゃないかな、と思うところまできた。
「どれくらいかかりそうですか?」と聞かれても、1週間かな…と思う。普通なら2週間と答えてもよいボリュームだった。
でも、残り2週間の中で、1週間も使うわけにはいかない。なんとか5日で終わらせた。
…いや、普通は1週間は「5営業日」だから、これって1週間の仕事だよね。
ただ、土日もずっと仕事していたので、期間的には2日間の前倒しだ。
短期間で作ったのでバグの不安がある。十分に注意しながら確認頼む…
というところで、次の依頼。
商売上、絶対に入れないといけない「機能制限」がある。
作っているのは有料の WEB サービスで、契約した権利者だけが使用できる。
なのに、発行したアカウントを複数人数で共有したりして、無制限に使用しようとした人々が居たことがわかっている。
これを防ぐために、おかしな使い方をすると制限がかかるような仕組みが必要だった。
この機能は、利用者にとっては必要な機能ではないので後回しにしてきたが、商売上絶対必要だ。
この機能の実装は、二転三転した。
最初に言われた形で実装したら、「これだと別の問題が生じる」ことがわかり、仕様変更。
しかし、その仕様で実装したら「まだ別の問題がある」と分かり、仕様変更。
実際、完成したのは昨日の午後だ。
まだある。
システムは組織で使用するもので、全体の管理者だけが使う機能がある。
ここは、「互換機能」としては存在していたし、見る人が少ないからそのままになっていた。
しかし、今回のシステムは「1から作り直した」ので、完全互換のままではあまりよろしくない。
画面デザインだけでいいから調整お願い、と、実はデザイナーが作っていた調整イメージを渡されたのが、昨日の昼頃。
上に書いた機能制限の仕様変更などは、このデザイン調整と並行して進めていた。
まぁ、仕様変更程度ならそれほど大変ではないし。
デザイナーの方もよく状況を理解していて、最低限の変更で大きく見た目が変わったように感じるようなツボを心得ていた。
管理者用の画面は10程度の画面の集合で構成されているのだけど、CSS 調整で見た目を大きく変える。
3画面ほど、基本部分を調整したら。他の画面は大体全部指示通りになった。
あとは、細かな部分を微調整して終わり。
とはいえ、そうした調整を想定していない HTML を、無理やり CSS で調整したので、驚くほど内情が汚い。
そもそも、元の「互換」なので、過去の調整が積み重なっており、同じ個所の CSS が3重くらいの上書きになっているのだ。
その中には、!important とか指定してあるのもある。これを、さらに !important で上書きする。
最低の CSS だが、時間がないのでこの時は整理は諦め、動くことを最優先する。
で、もうひとつ。
2週間前には出来上がっていた「互換機能」のうち一カ所だけ、技術的な要件が決まらずに作成が保留されていた。
その部分の技術的な検証が始まったのが昨日だ。
技術仕様の検討を行う人が忙しすぎて、それまで手を付けられなかったためだ。
で、「必要なサーバーのセットアップに、2日くらいかかります」と判明。
いや、それだとリリースに間に合わないでしょ。
急遽、暫定版として実装することになった。
多少能力が低く、セキュリティの甘いサーバーであればすぐにセットアップできるのでそちらを使って実装し、後で正式版に差し替える。
それでも、動作としては問題ない。
技術要件が定まったのが昨日の夕方で、そこから実装開始して、完成したのが夜9時ごろ。
僕はこの完成で仕事を終えて「待機」に入ったが、仕様担当者はこの後動作確認などを行い、全てが問題なく完成、としたのが夜11時ごろ。
リリース日は今日、なのだが、実はすでにリリースし終えている。
ネットワーク上のサービスなので、利用者が少ない深夜2時頃から、技術担当者が差し替えを行った。
ネットワークサービスだからこそ、問題があればすぐに修正もできる。
だからこんなぎりぎりまでプログラム変更をしているのだけど、本当はあまり良い状況ではない。
実装が仕様とあっているか、というのは仕様作成者が確認しているのだけど、数日前に「一度確認して動いていたところが、特に変更指示もなかったのに動かなくなっている」ということがあった。
僕が出したバグだった。申し訳ない。
一度確認したところが理由もなく動かなくなるようでは確認作業が進まないので、再発防止策を、と言われたのだが、申し訳ないが理由をつけて突っぱねた。
形の上で「気をつけます」ということに意味はないからだ。
プログラムをいじっていれば、バグは必ず出るし、その出る場所を予期することもできない。
機能上は違うものだと思っていても、内部でプログラムを共有していることはある。
そして、そういう場所は「特殊な事例」になっていることも多く、プログラマーの意識からもこぼれ落ちている。
もしも意識の中にあれば、当然作成後に動作確認をするだろう。不意なバグにはならない。
「気をつけます」という言葉は、意識の中にあるものにしか適用できない。
だから、気を付けるのも防止策にならない。
本当に再発防止を考えるのであれば、完成前に「その期間を過ぎたら機能追加は行わない」というデッドラインを設けて、以降はバグ修正以外の変更を加えないようにしないといけない。
これは全体マネジメントの問題で、個々のプログラマーの問題ではない。
今回は結構大規模なプロジェクトだったので、僕は締め切り2週間前をデッドラインと考え、そこまでに頼まれた機能を作り終えた。
でも、実はそこで作り終えていたのは「必要最低限」のもので、まだ絶対に必要な機能が多数あり、追加され続けた。
それが悪いわけではなく、商売上必要なことだ。
しかし、その状況では「不意なバグ」は必ず出る。
できるのは、出さないようにする努力ではなく、見つけ続ける努力だけだ。
まぁ、見つけないといけない担当者が「どうにかしてくれ」というのは心情としてわかるし、こちらだってバグを出したいとは思っていないので、十分に気をつけはするのだけど。
担当者には、一度「人月の神話」と「デスマーチ」を読ませないといけないな。
(上に書いてあることは、これらの本で詳細が解説されている。
今となっては古典とされる古い本だけど、フリーランスのプログラマは読んでおいたほうが良い本)
何か問題があったらすぐ対応できるように、今日はプログラムをいじらずに待機。
なので、久しぶりに日記を書いている。
同じテーマの日記(最近の一覧)
別年同日の日記
17年 タネンバウム教授(1944) ストールマン(1953) 誕生日
申し訳ありませんが、現在意見投稿をできない状態にしています。 |