世界を動かす技術を、日本語で。

GUIは少なくとも2.5倍作成される

概要

  • ソフトウェア開発 における「工場」や「パイプとフィルタ」などの 比喩 の限界
  • ソフトウェアアーキテクチャ における代表的なパターンの解説
  • TPS(トヨタ生産方式)CI/CD など、現実世界とソフトウェアの構造の類似点
  • 比喩の不完全さ と「ソフトウェア独自の理解」の必要性
  • ソフトウェア開発者は「工場の作業者」ではなく「工場設計者」であるという 根本的な違い

ソフトウェア開発における比喩とその限界

  • Robert Smallshire の指摘:「工場」「庭」「農場」などの比喩から脱却し、 ソフトウェアをソフトウェアとして捉える 必要性
  • Peter Sommerlad の質問:「工場」という比喩と Pipes and Filters アーキテクチャパターンの関係性
  • ソフトウェア開発現場で パターン (設計パターン)が多用される現状
    • 心理学でいう「スキーマ」と類似した概念
  • Pipes and Filters は、出力が次の入力となる「直列処理」のパターン
    • Unix/Linuxコマンドラインや関数型プログラミングで頻繁に見られる構造
  • ただし、 意味的には完全に一致しない 場合も多い
    • 例:暗号化テキスト→復号→整形→メール送信

複雑なデータフロー:Pads, Sources and Sinks/Signals and Slots

  • 入力・出力が複数あるノード によるネットワーク型アーキテクチャ
    • 入力Pad(Slot)、出力Pad(Signal)という概念
    • 入力がないノード=Source、出力がないノード=Sink
  • ffmpeg などのオープンソースプロジェクトで見られる構造
  • ソフトウェア開発全体で 非常に一般的なパターン として存在

TPS(トヨタ生産方式)やTriple Bufferingとの類似

  • Triple Buffering :描画バッファを3つ持ち、遅延やチラつきを抑える手法
    • ソフトウェアとハードウェアが 独立して動作 できる仕組み
    • 「無駄」=遅れて表示されないフレーム
  • TPSやLean の理解がプログラマーにとって容易なのは、「プログラム」として捉えられるため

「工場」比喩の限界とDevOps/CI/CD

  • CI/CDパイプライン は「工場」的なアーキテクチャの実例
    • コード→ビルド→テスト→デプロイの一連の自動処理
    • 品質が担保できない場合は「ライン停止」(例:テスト失敗)
  • DevOps では人手を極力排除し、自動化・監査性を重視
    • 本番稼働後もメトリクスを収集し、品質向上につなげる

ソフトウェア開発者は「工場作業者」ではなく「工場設計者」

  • 比喩は本質を捉えきれない ため、Smallshireの主張は妥当
  • Lean Software Development も万能ではなく、現場の実態とは異なる
  • 開発者自身も「こうありたい」と思いながらも、現実は複雑
    • 問題を分割→部品化→組み立て→完成という理想像
  • 本質的な違い :私たちは「工場で働く人」ではなく、「工場そのものを設計する人」
  • ソフトウェア開発の実態を理解するための 新たなメンタルモデル の模索が必要

ソフトウェア開発プロセスの本質的な理解に向けて

  • 比喩やアナロジー は説明や共通理解の助けにはなるが、 限界がある
  • ソフトウェア開発は 設計・創造活動 であり、単純な「生産ライン」とは異質
  • 開発現場の複雑性 を正しく捉えるためには、 ソフトウェア独自の枠組み や言語が必要
  • 現場の開発者自身も模索中 であり、より良い理解やモデルの確立が今後の課題
  • ソフトウェア開発の本質 を捉える新しいアプローチや議論の必要性

Hackerたちの意見

テキストをざっと読んだだけだけど、特にGUIに関しては最後のリストが的を射てるね。そういうわけで、全てのソフトウェアは(その分野にあまり詳しくない場合)、良い製品を作るために3回書かれるべきだと思うんだ。1. 最小限のプロトタイプ。何かをサクッと作ってみて、実現可能か確認する。手抜きして後で必要になる機能を省いたりする。2. 最初の素朴な実装。プロトタイプを基に作り上げるけど、実際には役立つものにするためにそんなに欠けてないと思い込んでしまう。悪いデザインの決定をして手を抜くことになる。ドメインの複雑さを完全に理解するチャンスがないから、時間をかければかけるほど、間違った方向に進んでしまったことが見えてきて、フラストレーションが溜まる。3. 自分が本当に求めているものが明確になったら、全部捨てて、エレガントに全体を再構築する。パフォーマンスにも焦点を当てる。1と3はだいたい楽しいけど、2はすぐに嫌になる。主な問題は、仕事の文脈ではほとんどの場合、2から3に移行することが許されないこと。外部の人には2が十分良さそうに見えるから、3にお金を払いたがらないんだよね。

付け加えると、なぜプロダクトマネージャーが#3にお金を払いたがらないかというと、過去の試みがほとんどコストやスケジュールのオーバーランにつながっているからだね。未完の結果が多いのも事実。そう思わない人は、自分のお金で証明してみてほしい。これがスタートアップってやつで、ほぼ全てのスタートアップは失敗する、つまり重要なリソースが尽きてしまうんだ!じゃあ、賢いプロダクトマネージャーはどうすればいいのか?簡単な答えはないけど、業界の平均的な結果を見ればわかるよ。努力が足りないわけじゃない。個人的には、ソフトウェアの提供は解決された問題じゃないと思う。でも、ソフトウェア提供の専門家として「ソフトウェアの提供方法がわからない」と言って回るのは、本当にお金を稼ぐのが難しい。

  1. さて、あなたが本当に求めているものが明確になったら、全部捨てて、より良くエレガントでパフォーマンスの高い方法で全体を再構築する。

「捨てるつもりで作れ。どうせ捨てることになるから。」- フレッド・ブルックス、『神話のマン・マンス』。私が生まれる数十年前に書かれたソフトウェア工学の本で、大学で25周年記念版を課題に出されたんだけど、数年ごとに再読しては新しい問題にその教訓を適用する方法を見つけてる。

すごく同意。2はテストスイートを構築することに関するもので、これができれば3は楽勝になる。私は多くの場所で、SITチームが手動でエンドツーエンドテストを行うところで働いたことがあるけど、彼らは一度合格したテストを再実行するのが大嫌いなんだ。こういう人たちは3のアイデアを嫌って、PMにかかるコストを過大評価して、やらなくて済むようにする。

個人的には、このリーン手法が自分には合わないって感じてるんだ。自分の中でうまくいくマントラがあって、それは「全部画面に出せ」ってこと。あらゆる機能、あらゆるバリエーション、可能な限りの設定、未来の状態も含めてね。見た目や感じは気にせず、全部そこに置いちゃえ。できるだけ多くを、できるだけ早く作り出して、どうせ捨てることになるって分かってるから。その後、削ぎ落としていくんだ。組み合わせたり、削ったり、グループ化したり、再編成したり、隠したり、削除したり、追加したり。途中で、本当に目指すべきものが見えてくるんだ。で、だいたい最初に作ろうとしてたものとは全然違う方向に行くんだよね。それが分かったら、ステップ3はほぼそのままになると思う。これはリーン開発の批判じゃなくて、10年リーンでやろうとした結果、自分の脳みそには合わないってことを受け入れたって感じ。

PMの視点からすると、2から3に移行するのはあまり意味がないよね。その開発者たちはこのアプリに何週間も何ヶ月もかけてきたのに、今さら全部捨てるって?それってお金を窓から投げ捨てるようなもんだよ。新しいアプリが前と同じように動かないリスクや、締切に間に合わないリスクもあるし。安全策としては、(2)を繰り返すのがいいと思う。

3回作るってアイデアには完全に同意だな。年を取るにつれて、2回で済ませることが多くなってきたけど、それは自分がコーディングが上手くなってると思いたいから。だから、ステップ2はそんなに急がなくてもいいかなって。3回のイテレーションをこう考えてるんだ:1) 何をしているか分からない。このイテレーションは問題の領域を理解することがメイン。2) 何をしているかは分かってるけど、どうやってやるかは分からない。このイテレーションはプログラムの設計方法を考えること。3) 何をしているか、どうやってやるかが分かった。だから、あとは作るだけ。

これも関連してるね [1]: > 「この第二のシステムは、人間が設計する中で最も危険なシステムだ。彼が第三、以降のものを作るとき、彼の過去の経験がそのようなシステムの一般的な特性を確認し、その違いが彼の経験の中で特有で一般化できない部分を特定する。」 [1] https://wiki.c2.com/?SecondSystemEffect

この部分は天才的だね: > 私は何度もGUIを作ってきたけど、最良のシナリオはこんな感じだ。 > 1. デザインができて、みんながそれを気に入る。詳細な図面も作成される。 > 2. 開発者に「作れ」と言われる。 > 3. 開発者は仕様通りに作る。 > 4. みんながそれを見て、全員が嫌がる。 > 5. 会議がたくさん。ストレスがすごい。これはひどい!どうする? > 6. 新しいデザインが作られる。すごく良くなった!詳細な図面も作成される。 > 7. 開発者に「作れ」と言われる。 > 8. 開発者は仕様通りに作る。 > 9. みんながそれを見て、誰も好きじゃない。 > 10. 会議がたくさん。ストレスがすごい。これはひどい!どうする? > 11. 誰かが多くの会議の中で、基本的に小さな変更、何かを移動したり、色を変えたり、テキストを変えたりすることを提案する。 > 12. 開発者は仕様通りに作る。 > 13. 誰も満足していない。でも、誰も嫌ってはいない。 > 14. 開発者はイライラしている。私も似たような経験がある。GUIの本当の問題は、技術者が(主に)非技術者のために何かを作っていることだと思う。例えば、購買部門や経理部門が使う内部アプリのGUIを開発することを想像してみて。ほとんどの内部顧客は非技術者だから、彼らは開発者のように考えないんだ。それに、多くの開発者は非技術ユーザーとのコミュニケーションスキルがひどいから、期待のギャップが大きくなりがち。私が見た中で最高の体験は、内部顧客チームが半技術的な新卒を雇うこと。彼らが新しいアプリの主なテストユーザーになる。できるだけ新しいアプリだけを使って仕事をさせる。彼らは開発者にたくさんの即時のフィードバックを与えることができる。そうやって徐々に合理的なものに進化させていける。中間管理職をイライラさせる秘密は、計画を立てず、特に内部の聴衆がいる場合は有機的に構築させること。もう一つ気づいたことは、GUIのデザインと実装が得意な人がいるってこと。こういう人を見分ける方法はわからないけど、「見ればわかる」って感じ。

俺はこれを「プログラマーがデザインしたもの」って呼んでる。これがあまりにも一般的だから、シリコンバレーのテレビ番組でもストーリーの一部として使われてた。初期のインターネット時代にコンサルタントとして働いてた時も、「顧客は自分が何を欲しいか分からない、何が欲しくないかを見るまで」ってよく言ってた。人々はウェブのGUIに慣れていなかったし、今見られるような共通のパターンもなかったから、半分動くバージョンができるまでフィードバックをもらえなかったんだ。だから、早めのフィードバックが必要だったんだよね。今でもそれは当てはまるけど、使用パターンよりも顧客が伝え忘れた要件に関係してることが多い。

問題は、ステップ2が間違ってるってこと。ステップ1はデザインを作ること、ステップ2はそれをテストすること。紙のプロトタイプを作って、顧客にそれを使ってもらうんだ。もし気合い入れるなら、Figmaで綺麗なプロトタイプを作ってもいい。いいデザイナーと協力的な顧客がいれば、ホワイトボードプロトタイプでステップ1と2を組み合わせることもできる。顧客に一般的なタスクは何か聞いて、ホワイトボードにインターフェースを描いて、どこをクリックしたり、どうやってやり取りするかを聞くんだ。それから次のUI状態を描いていく。そうやって何回か繰り返したら、実際のコードを書き始められるよ。実際のソフトウェアを試す段階でも、いくつかの反復が必要だけど、ずっと良いスタート地点になるはず。

UXは難しい。通常起こるのは、- UXが苦手な開発者がソフトウェアを書いて、デザイン文書に十分に指定されていないすべてのユースケースで即興で対応する - UXが苦手なエンドユーザーがフィードバックをくれるけど、自分のユースケースに合ったものが正しいかどうかは分かる - UXが苦手なマネージャーや仕様書作成者がエンドユーザーの希望を開発者に伝えようとする その結果、無価値な仕様書ができあがって、ゴミが入ればゴミが出る。時々、星がうまく揃うと、チームの中に実際にUXが得意な人が現れることがあるって聞いたけど、私のキャリアではそんなユニコーンを見たことがない。そしてその場合でも、UXを理解していないエンドユーザー、つまりプロジェクトのためにお金を払う人が、すごくすごくペリウィンクルブルーのボタンを欲しがることがあるから、ほとんどすべてのケースでGUIは無数の書き直しや調整を経ることになる。

これらのステップは、ユーザーの作業状況や技術を理解していないプロジェクトマネージャーによってデザインされていると思う。> 顧客チームが半技術的な新卒を雇う これは、両方のキャンプに片足ずつ入れている人だね。これが最適な解決策で、一足の人よりも優れている。残念ながら、多くの組織は二足の人を好まないみたいで、単一のボックスに入れたがるんだよね。

これは部分的な解決策だと思うけど、その翻訳者やテスターの役割を「新卒」に任せるのは問題だね。理想的には、今のプロダクトマネージャーの役割そのものだと思う。顧客やクライアントの期待を管理しつつ、技術的な概念を適切に伝えたり、初期のタスク分解をコミュニケーションしたり、開発者のために調整役を務めたりする人だよね。つまり、条件付きのノーを出す役割。これは非常に重要だけど、私の意見ではあまり評価されていない。ビジネスやクライアント側はそれが開発者の仕事だと思っているし、開発者は自分たちがただの管理職だと思っているけど、実際にはプロダクトマネージャーがディフェンスラインにもなり、クォーターバックとしてランニングバックを支えて、コーチの戦略を勝利に変える役割を果たすことができるんだよね。観客がブーイングや失望するのではなく、応援してくれるように。

開発者が一番イライラするのは、要件が変わることだね。開発者がすべてをゼロからやり直す自由がない限り。

このプロセスには、ほとんど欠けている存在がいると思う。デザイナーと開発者はそれぞれのバブルやサイロに閉じ込められていて、ユーザーの視点で考えられない。デザイン、UX、コードを理解して、それを一つのまとまりのあるビジョンにまとめられる人は非常に稀だよ。私の経験では、最初からUXが正しければ、あとのことはずっと楽になる。UXは、どのように設計し、プログラムするかを決定する基盤なんだ。

GUIの本当の問題は、技術者が主に非技術者のために何かを作っていることだと思う。愚痴を言うパワーユーザーとしては、逆の問題があると思う。「共通の底辺」ユーザーがインターフェース開発を過度に単純化させてる。私たちは良いソフトウェアを持っているけど、それがGUIのニュー・スピークに翻訳され続けている。お願いだから、プログラムを単一の緑の[GO!]ボタンに精神的に縮小しないで!KDE 3.5 > 4+、GNOME 2 > 3+。オプション削除の長い習慣を持つMozilla(GNOMEプロジェクトに匹敵する)。もし今日のインターフェースデザイナーが60年前にコントロールを握っていたら、ユニックスのパラダイムは決して生まれなかっただろう(「複雑すぎる」って言われてたはず)。この分野には少しエリート主義が必要だと思う。難しいことは難しいままで、すべてのソフトウェアが難しいことを「簡単」に、単一の[GO!]ボタンに変える必要はない。

再設計のたびに多くのUIが悪化しているのは間違いない。 - Windows GUIは、Windows 7(あるいはXP)からリリースごとに悪化してる。 - Outlookは、良いから普通、そして最終的にはうざいに変わって、ついには個人用クライアントとして置き換えた。これらは私が挙げられる唯一の例ではないけど、最も目立つものだと思う。主な問題は、技術スタッフとUXデザイナーの両方が「新しい」や「ファンシー」なものを作ろうとしていることだと思うが、ほとんどの場合、使いやすさとは真逆の方向に行ってしまっている。例えば、Aeroはファンシーだったけど、アクティブウィンドウが一つのシグナルカラーのヘッダーバーを持っていて、他のウィンドウは抑えられていたのがなくなった。今はすべてのウィンドウがカラフルで、同時に私に叫んでいる。方向性が失われてしまった。そしてその後、UIはさらに「ファンシー」になっていった。ステップ13(「誰も幸せじゃないけど、誰も嫌ってはいない」)は、みんなが戦うのに疲れてしまったときの高原状態で、妥協であって、GUIが受け入れられる状態に達したわけではない。もはや開発者やUXデザイナーが誇れるほどファンシーではないけど、同時にユーザーにとってはまだうざいほど悪い。

これ、読むのがすごく大変だったし、結論が何なのかもよくわからなかった。一つ理解できなかったのは、アジャイル開発プロセスに反対する理由がどういうことなのか。アジャイル開発は、特にUXのように事前にわからないことが多いから、小さなものを作ってフィードバックを得て、捨てるか改善する必要があるっていうのが基本だよね。ここで説明されているプロセスは、GUIを数週間、あるいは数ヶ月かけて設計してから、開発者が数週間または数ヶ月かけて実装するという感じで、クロスコミュニケーションがないから、何度も完全にやり直す必要があるのは明らかだよね。人々はフィードバックループを短縮し、悪いアイデアを早く捨てるためにアジャイル開発に切り替え始めたんだ。

だから、何度も完全にやり直す必要があるのは明らかなんだ。でも、管理層にはあまり浸透してないね。確かに、彼らはアジャイルのバズワードを使ってるけど、機能A、B、Cを計画に入れたり、「Bはいつ終わるの?」とか「終わった?」なんて質問をする。いや、私たちは14個のバグをサービスとして管理してるだけだから。「Bを終わらせる」ってよりは、15個のバグを管理することに移行するだけだよ。

高品質なUI/UXを構築するための唯一の解決策は、タイトな反復ループだと思う。最初の数回はひどいってことを受け入れて、それに備えるべきだよ。レイアウトやスタイリングのパスを最後まで避けることで、反復ごとのコストを抑えられる。これらのインターフェースは情報を伝えるためのものだから、サイトマップや各ページの目的をデザインしている段階では、プレーンテキストや基本的なフォーム送信でも十分なんだ。顧客と開発者の距離と、受け入れ可能な結果を得るために必要な反復回数には直接的な相関関係がある。顧客に毎日のビルドやスクリーンショットを要求することで、無駄を大幅に減らせるよ。もしあなたの開発プロセスがこういう反復を支えられないなら、できるプロセスを見つける必要がある。実際の顧客がその量のトラフィックを処理できないなら、内部のプロキシやアドボケートを作ればいい。

私も同じような経験をしたことがあるよ。人間の脳って、模擬画面のレイアウトを観察して、実際にどれだけ機能するかを理解するのがすごく苦手なんだよね。これが複数の機能を持つアプリ全体に当てはまると、問題は指数的に増えていく。経験があればスピードアップできるけど、迅速なフィードバックループを使った反復がベストプラクティスだと思う。デザインって、ループの始まりをやることじゃなくて、全体のループをやることなんだよね。繰り返し。

外側からの開発もここでは役立つよね。

私もこれが進むべき道だと思うし、理論的な見解とも一致してる。これが難しい理由の一つは、デザインと開発の間で反復をサポートする(デザイン)ツールが不足しているからだと思う。現代のツールはデザインから開発への移行を楽にしてくれるけど、まだまだ一方通行なんだよね。最近のトレンドで、データからではなくコードでUIを作るようになって、さらに悪化している気がする。これには良い地元の理由があるけど、ますますウォーターフォール的な開発プロセスに押しやられているように思う(デザインがきれいなモックアップを作って、壁越しに投げる感じ)。

高品質なUIについて聞けるのがすごく楽しみだよ。今まで出会ったことがないから。

UIのための最良の機能仕様は、ビジネスの人たちが自分たちでExcelで作ったものから来てるよ。最低でも、レイアウトやどの画面にどの情報を表示するべきかのアイデアは持ってる。これによって、スタイリングではなく、コア情報に集中できるんだ。ウェブ上でGUIを作ると、UI要素のスタイリングには無限の方法があって、実際のインタラクションよりもそっちに注意が向いちゃうんだよね。

GUIの仕事をする時は、趣味や内部プロジェクトのためが多い。私は質の高いUI/UXを非常に重視してる。ここでは「分析麻痺」になりがちで、デザインと開発を同時に進めようとするから。あなたの「タイトで迅速なイテレーションが唯一の解決策」というコメントには共感するよ。最近発見した「トリック」は、UIデザインを完全に無視して、_フォーマット_に集中することなんだ。要素を適切で使いやすい方法で配置することにフォーカスして、ビジュアル面(ウィジェットデザイン、マージン、パディング、色、アニメーションなど)は最後の最後まで取っておく。私の仮説は「良いUI」=「良いページフォーマット」+「美しいUI要素」なんだけど、このアプローチについてどう思う?

顧客との頻繁で繰り返しの接触が普通じゃないから、こんなに多くのインターフェースがダメになって、エンジニアたちが銃を突きつけられてもまともなものをデザインできないんだと思う(正直、そんなレベルのストレスは思慮深いデザインパターンを生まないかもしれないけど)。エンジニアはマイクロビューに次ぐマイクロビューを受けて、実世界を模倣しないテストフローを使ってそれを作り上げる。そして、みんながそれを結びつけて、ユーザーにとってはめちゃくちゃなマクロビューを作り出す。ここで定期的なシャドーセッションを持つために、基本的なスケジューラーを作ってる(これがスケールでの痛点なんだけど)んだけど、3週間ごとに自分とツールを作ってる誰かを送るだけで、フィードバックは圧倒的にポジティブで、機能を少し拡張するために取り組んでる。だから、いい結果を得たい人は、小さなスケジューラーを設定して、プロダクト、デザイン、エンジニア、マネージャー、TPMたちを実際の顧客との軽いペースで回転セッションに参加させて、より大きな共感を生み出そう。そうすれば、私たち全員がより良いソフトウェアを手に入れる可能性があるんだから。夢見ることは自由だよね。

だから、暗号化されたテキストを受け取って、最初の「フィルター」がそのテキストを復号化し、2番目のフィルターが復号化されたテキストの先頭と末尾を削除し、3番目のフィルターがその入力をメールで送信するパイプラインを想像してみて。プログラマーの視点からすると、これらの入力と出力はテキストだから「同じ」だと思うかもしれないけど、意味的には全然違うんだ。ここまでしか考えられなかったけど、面白いと思った。まず、部分的に間違ってると思うから。プログラマーは暗号化されたデータのバイナリブロブをテキストと同じだとは思わないし、次に、先頭と末尾の空白が削除された文字列型のサブクラスがデータをモデル化するのに面白い方法かもしれないと思う。オブジェクトは構築時にその削除を行うことができる。

これはInputStream/OutputStreamタイプのクラスの説明に過ぎないよ。EncryptedStreamも作れるしね。「ただの文字列(または数字)だけど、前提条件が強制されて検証されたもの」というオブジェクトがあるのも意味があると思う。特にユニコードの世界ではね。

記事がひどく書かれてる。明確なメッセージがなくて、トピックが変に飛び跳ねてるし、全体のスタイルがまるでプロを目指すティーンエイジャーやインターンが書いたみたい。だけど、「GUI/UIs/UXs」について言いたいのは、最高のUI/UXはそのドメインのプロフェッショナルによって作られるってこと。なぜそれがそのドメインにとって最適なツールとして機能するのかを理解している人が作ったツールなんだ。だから、BloombergターミナルのUI/UXが金融プロフェッショナルにとってこうなっているのと同じように、DAWが音楽プロフェッショナルにとってこうなっているし、CADツールがEEや建築家にとってこうなっている。彼らは適切な仕事に対して適切なツールとして機能する。コーダーや(Figmaの)デザイナー、他の「実装者」(管理職や「プロダクトオーナー」を含む!)は、自分たちの職人技を完全に発揮するためにビジネスドメインを理解する必要がある。実装者がそのツールをプロフェッショナルなドメインで使っていないと、UI/UXデザインを始めたり反復したりするのは非常に難しいし、何が正しいデザインで、何がクールなデザインなのかを知ることができない。

100%同意!ホワイトスペースが大好きなデザイナーは、エンジニア(やExcelで仕事する人)向けのUIをデザインしない方がいいよ。余白やパディング、ドロップシャドウ、‘round-lg’とか見た目はいいけど、ページに数字が2つしか入らないと全然役に立たないから。

他のプロフェッショナルツールについてはわからないけど、チップデザインのためのEDAツールは、電気エンジニアとベンダーがソフトウェア開発において20年遅れているから、今の状態なんだ。

これまでいくつかのソフトウェア会社で働いてきたけど、ほとんどのところには専任のフロントエンドやUXデザイナーがいなかった。大体はバックエンドの開発者がフロントエンドのスキルも持ってる感じ。特に顧客向け(スタッフ向けじゃなくて)に何かをやるときは、デザインを早めに正しくするのが重要だよね。でも、私が働いたところでも構造が間違ってることが多かった。例えば、1人のUXデザイナーがいる会社で働いたことがあるけど、彼はGUIデザインが得意で、CSSもすごく上手かった!でも、彼が「完成」したデザインは開発者に渡されて、機能を実装することになる。もし何かが機能的にうまくいかなかったり、顧客がデザインを変更したりすると…それを直すのは開発者なんだ。UXの人は別のプロジェクトに移っちゃって、サイクルが繰り返される。構造が間違ってたと思う。UXの人が開発者と一緒に働くと良い結果が出るんだ。UXの人がデザインを進めることで、開発者はその周りにビジネスロジックを構築し始められるからね。結局、これは開発プロセスの一部だから。確かに、UXの人は顧客からの変更をすることが多いけど、開発者は常にそれを把握して調整できる。モジュール作業の多くは小さな修正になることが多い。UXが終わったら、モジュールも(ほとんど)終わり、単体テストやそれに類似したものも終わる。要するに、開発者がUXプロジェクトを引き継いで、モジュールに必要な呼び出しを追加するだけなんだ。中間層が小さく保たれるから、UIやモジュールのさらなる変更がしやすくなる。

著者(パトリシア)が「GUIは2.5倍以上の時間がかかる」と言ってるのがどこに向かうのか分からなかったけど、最後には同意する。発見は組み立て(工場のメタファーのように)とは根本的に異なる。そして、イノベーション(新製品)は根本的に発見に関するものだよね(製品/市場のフィットや製品/ユーザーのフィットに関して)。だから、新製品開発は根本的にイテレーティブなプロセスなんだ。発見やイノベーションに「最初から正しくやる」メンタリティを強制しようとする組織は、失敗がどれほど一般的かを発見したってことだよね…

UIのほとんどは、デザインの時点で壊れてると思う。多分、永続的な収入のためにね。HyperCardやVB、他の使いやすいビルダーは死んじゃったけど、これが人々が本当に求めてるものなんだよね。青いメニューバーが欲しいのに、マークアップをコーディングしなきゃいけないなんて!?でも、青いメニューバーを作るのを止めるために、今日はそもそもメニューバーを持つことすら禁止されてる。クレイジーなアイデアやクリエイティブに作られたプロトタイプは、プライベートなManagerFactoryClassには居場所がないみたい。ある反対意見は、テキストが行単位でスクロールすることについてで、スティーブが「これ、スムーズにできないの?」って言った。数秒後、ダンがその変更を加えた。もう一つ面白い反対意見は、選択を示すために使われるテキストの補完についてだった(今もそうだけど)。スティーブが「それ、アウトラインにできないの?」って言った。部屋の後ろに立ってて、ちょっと息を呑んだ(これ、即座に直すのは難しそうだった)。でもまた、ダン・イングルスはすぐにとても賢い方法を見つけた(いつも通りテキストを選択して、選択を数ピクセルずらしてもう一度やる — これで選択の周りに暗いアウトラインができて、中がクリアになった)。

UIのほとんどは、デザインの時点で壊れてると思う。インセンティブがどう作用するのか、もうよくわからない。多くの場所で自己利益が優先されてるのは確かだ。新しい理論があって、いくつかのユーザーインターフェースは意図的にジャンクに作られていて、ユーザーが常にコルチゾールにさらされて、他のダークパターンで支配しやすくなってるんじゃないかと思ってる。AzureのUI/UXがその例としてすぐに思い浮かぶ。自分のVMが実際に動いてることを確認する頃には、請求関連で確認したい他の5つのことを忘れちゃってる。こういうものの最終的な整合性は、特にマイクロソフトのように広範な経験と人材プールを持っている場合、意図的にユーザーに敵対的なデザイン選択に見える。