連載「carb-icr 開発日誌」· 第15編/全16編
動いていても、最後の一歩で体感が決まる
裏で正しく働く仕組みが、なぜか実感できなかった(開発日誌 15)
自動の仕組みは、裏でちゃんと動いていました。なのに、画面を見ても値が入っていない。動いていることと、人に届いていることは、別の問題でした。最後の一歩、受け取って見せるところが抜けていた話を、一緒に。
連載「carb-icr 開発日誌」· 第15編/全16編
裏で正しく働く仕組みが、なぜか実感できなかった(開発日誌 15)
自動の仕組みは、裏でちゃんと動いていました。なのに、画面を見ても値が入っていない。動いていることと、人に届いていることは、別の問題でした。最後の一歩、受け取って見せるところが抜けていた話を、一緒に。
仕組みが正しく動いていても、その恩恵が使う人のところに届くとは限りません。動いていることと、届いていることは、別の問題だからです。今日は、自動の仕組みが裏ではちゃんと働いていたのに、しばらく実感できなかった、という話を通して、その溝の正体を一緒に考えます。
前回は、自動が人の手を奪わないようにする話でした。今回はその続きで、自動が裏で正しく回っているのに、画面を見ても入っているはずのものが入っていない、という状態に出会います。仕組みの正しさをいくら確かめても、それだけでは「自動で入った」という体感は生まれませんでした。間に何が落ちていたのかを、順に解いていきます。
作っていたのは、食後の血糖を、自分で測りにいかなくても仕組みが確定してくれる流れでした。決まった時間ごとに血糖を集めておき、食事から一定の時間が過ぎたら、その食後の山を見つけて記録に書き込む。この一連が、裏側ではきちんと動いていました。集めるところも、書き込むところも、確かめると仕事をしている。動作のログをたどっても、想定どおりの順番で処理が進んでいます。
ところが、私がアプリを開いて記録を見ると、食後の欄は空のままでした。仕組みは動いているのに、見ている画面には何も反映されていない。まず疑ったのは、書き込みのどこかが失敗している可能性です。けれども調べると、書き込み自体は成功していました。値は、確定して保存先には入っている。つまり、処理が止まっているのではなく、入った値が私の手元の画面まで来ていない、という構図です。失敗の話ではなく、到達の話でした。
理由は、思っていたより素朴でした。仕組みが値を書き込む場所と、私が見ている画面は、別の場所だったのです。裏で値が確定しても、それが画面に映るには、画面のほうから「更新はあったか」と取りにいく動きが要る。ところが当時は、その取りにいく処理が、アプリを開いた最初の1回しか走っていませんでした。
整理すると、こういう順序です。食事を記録して、アプリを開いたままにしておく。裏では、数時間後に食後の値が確定する。一方、画面は開いた最初に1度取りにいったきりで、確定したころにはもう取りにいっていない。結果として、欄は空のまま残ります。値は届く準備ができているのに、受け取りにいく動きがその時刻に存在しない。配達は終わっているのに、郵便受けを誰も開けていない状態だと考えると、構造がつかみやすいと思います。
似た形は、別の場面にもあります。お知らせが届いているのに、通知を切っていて気づかない。報告書ができているのに、そのファイルを誰も開かない。情報そのものは、たしかにそこにある。けれども、人がそれを受け取る動きが無ければ、無いのと同じ結果になります。作った側は「出した」で安心し、受け取る側は「来ていない」と判断する。同じ1つの事実を、両側が違う角度から見て、すれ違うわけです。原因は能力でも善意でもなく、受け取りの動きが設計から抜けていたことにありました。
直し方そのものは、難しくありませんでした。画面のほうが、ときどき自分から「更新はあったか」と取りにいくようにする。アプリに戻ってきたとき、しばらく時間がたったとき、記録の一覧を開いたとき。そういう折に取りにいく動きを足す。すると、裏で確定していた値が、画面に現れるようになりました。仕組みは前から正しく値を用意していたので、足したのは受け取り側の動きだけです。
迷ったのは、どのくらいの頻度で取りにいくか、でした。頻繁に取りにいけば反映は速くなりますが、空振りの問い合わせも増えます。間をあければ問い合わせは減りますが、反映が遅れます。この2つは交換の関係にあるので、間隔の一点を決めるより、取りにいく「きっかけ」を人の動作に結びつけるほうが筋がよさそうでした。具体的には、人が見そうな折、戻ってきたときや一覧を開いたときに合わせて取りにいく。一定の間隔をきざむ方式と違い、見ない時間帯には問い合わせが起きず、見る瞬間には新しい値が揃います。機械の都合で時間を刻むのではなく、使う人の動作に受け取りの時刻を寄せる、という考え方です。
この直しから見えたのは、自動化は裏で正しく計算するところまでで終わらない、ということでした。計算した結果が人の目の前まで運ばれて、はじめて「自動で入った」と感じられる。受け取って見せるという最後の一歩が抜けていると、裏がどれだけ正しくても、人にとっては何も起きていないのと同じ結果になります。仕組みの正しさと体感のよさは、別々の部品ではなく、この最後の一歩でつながっていました。逆に言えば、ここを設計に組み込んでおけば、裏の正しさがそのまま体感に変換されます。
この溝は、作る側に立つと見落としやすい性質を持っています。作っている本人は、裏で動いているのを知っているので「動いている=できた」と判断しがちです。一方、使う人が手にしている情報は、目の前の画面だけです。裏で何が起きているかは見えません。だから画面に出てこなければ、その人にとっては動いていないのと変わらない。同じ仕組みでも、知っている情報の量が違えば、評価がずれます。作り手の評価には裏の状態が混ざり、使い手の評価には画面しか入らない、という非対称が溝の正体でした。
ここから引けるのは、正しく動くことと、その正しさが人に届くことは、別々に作り込む必要がある、という設計の指針です。前に、コードが通ることと、ちゃんと出ることは別だ、と書きました。根は同じ問題です。あのときは、出てきた見た目の話でした。今回は、裏で出した結果を最後まで運ぶ話です。どちらも、機械の側の正しさで満足せず、人の側に届くところまでを設計に含める、という共通の型を持っています。作ったものの値打ちは、正しさそのものではなく、それが人に届いたところで生まれる。裏でどれだけ正しく計算しても、結果が目の前に出るまでは、まだ誰の役にも立っていない、という言い方もできます。
もしあなたが、何かを自動で動かしていて、裏ではちゃんと動いているはずなのに実感がわかない、と感じたら、書き込むところと見るところのあいだに溝が無いかを疑ってみてください。確かめる問いは2つです。結果は人の目の前まで運ばれているか。受け取りにいく動きは、1度きりになっていないか。この2点を分けて見ると、止まっているのが処理なのか到達なのかが切り分けられます。
仕組みは、正しく計算するところまでは作り込まれることが多いものです。一方、その結果を最後まで運んで見せる一歩は、地味なぶん後回しになりがちです。けれど、人が「自動で入った」と感じるのは、その最後の一歩によってです。正しく動かすことと、その正しさを届けること。両方そろって、自動化は使う人のものになります。
今日からできるのは、何かを自動で動かしたら、作った本人としてではなく、何も知らない使い手のつもりで画面を眺めてみることです。裏の事情をいったん脇に置き、出てくるものだけを見る。そこに結果が現れていなければ、裏が正しくても、まだ届いていない。作り手の目を1度おりて、受け手の目で見る。この視点の切り替えが、最後の一歩の抜けをいちばんよく示してくれます。作る人と使う人がたまたま同じ自分であっても、その2つの目は意識して分けて持つ値打ちがあります。裏の正しさを知っている目には、届いていない空欄が背景に溶けて見えにくくなるからです。次回は、この長い道のりのたどりついた先の話を。写真を撮って、単位を打つだけになりました。
これは、自分の治療のために作っている自作自用版での話です。広く公開しているのは記録と集計に絞った carb-icr(無料・通信なし・ブラウザで動くPWA)。プロジェクトの概要は carb-icr のプロジェクトページ に。
本アプリは記録と集計の補助で、表示される値はすべて参考です。診断・治療、インスリン投与量の計算、治療パラメータの決定は行いません。投与量・治療方針は必ず主治医の指示に従ってください。