GanttPadのデザイン哲学
ほぼほぼ感覚でやってるのでエビデンスとかはないです
ユーザの注意力を奪わない
ガチャガチャ画面を書き換えたりパンさせたりしない
NotionがクリックするたびにModalとかを出したりパンさせたりして体験が悪い
ユーザアクションに対して、画面の書き換えを最低限にすべき
ホバーしてUIを出すのも最低限にしたい
ユーザの行動に先回りして色々しない
服屋で店員が話しかけるのは「ユーザの思考のための静かな時間」を奪っている
KPIはそのほうが良くなるかもしれないが、ユーザの集中している時間は何よりも貴重なリソース
短期的な成果計測は性急すぎる、ユーザの滞在時間、利用時間の最大化を優先すべき
時間的、空間的な空白を良しとする
先回りして提示しないと目当てのものが見つからないのはUIの整理が悪い可能性もある
ユーザに試行錯誤させる
テンプレートを作らない、出さない
最低限のブロックの組み合わせからユーザ自身に発想させる
ユーザが画面を触っても容易に壊れない
シングルクリック編集 vs ダブルクリック編集
移動 vs コンテンツ書き換えで移動のほうが更新頻度が高い場合はダブルクリック書き換えを優先
GanttPadは「硬いUI」
カチャカチャ触っても構造が壊れない。変更時には意図を持って触る
変更容易性よりもドキュメントらしさ、紙らしさを優先する
書くよりも読むときの体験を優先する
スクロール中とかテキスト選択時に間違ってクソデカ変更が起きないようにする
操作に遊びを設定する
シングルクリックよりダブルクリック
ドラッグ時の移動距離の閾値設定を大きめに
ブラウザデフォルトのスクロール体験を損なわない
例えばブロック内でスクロールイベントを奪ってしまうと、ページスクロールが途中で止まったりする
安易にoverflow-scrollを設定しない
ページが縦に間延びするのを良しとする
範囲選択を放棄する
矩形選択は便利だが、オブジェクトのドラッグ移動とかち合ってしまう
そういう一括処理はテキスト編集モードでやらせる
横スクロールさせない
ユーザに適切な粒度に自分で分割させる(カンバン)
ネオスキューモーフィズム
そのブロックを見たときにユーザが「気分」を切り替えられるようにする
ユーザが取り扱いたい概念(例えば打刻)に個性をつけて、雰囲気を差別化し、ブロックに愛着を持てるようにする
手触り、押した感、ブランディングを差別化していく
VSTプラグインにおけるスキューモーフィズムを参考にする
あくまでユーザがその概念に集中するための取っ掛かり、雰囲気づくりである
やりすぎないようにする
視線を一旦停止させるための「引っ掛かり」を作る
視線にとってのホームポジションみたいなもの
ただの白紙を提供すると目が滑ってしまう
一旦ホームポジションを作ったら動かさない(北極星的な感じ)
見えている以上の機能は持たせない
ホバーで機能を出すとかをやめる
DB的な機能もやめる
なるべく単純な機能を提供し、それ以上の機能はスクリプティングとAPIで解決してもらう
ユーザに考えさせない
GanttPadは時間と予定をこねるための粘土
抽象に走らない、すべて具象に落とし込む
概念にリレーションを作らない
1段以上の階層を作らない
探しものをさせない
そもそも探すほどたくさんの機能を載せない
エコシステムを作ることを意識する
テキストフォーマットを作って名前をつける
自分ですべてを作ろうとしない
なにか作ってもらったら紹介する
他のアプリを推奨する
組み合わせるアプリを推奨したい
ルーチンタイマーなど?
習慣化系のアプリで推奨できるやつを探したい
ルーチンワークの取扱い、カレンダー系のことができないため
ローレベルから先に作る
ユーザのためのUIを作るんじゃなくて、開発者(自分)用のデバッグ時などに使えるような詳細な検索ツールを作って使わせる
ユーザを混乱させないUI…とか言って隅々までミニマリストを目指さない
結局調査とかにUIが必要になるんだったら、まず自分のDXを優先すべき
ヘビーユーザーのニーズは開発者とあまり変わらんはず
----
迷っている部分
ブロックの並び替え、途中挿入
GUI側で何もかもこなせるようにするかどうか
例えば削除が難しい。本当は避けたいホバーで出現するUIを作らざるを得なくなる