生産性改善」カテゴリーアーカイブ

振り返りあれこれ

5月の振り返りとしてKPTを取り入れてみたのですが、振り返りの手法って色々あるわけで、あまりしっかりと使ってこなかったなぁと今更ながらに思い、Claude君にまとめてもらいました。

チーム振り返り手法 比較表(20選)

手法名概要適用シーンチーム規模期間特徴・メリット注意点
KPTKeep(継続)、Problem(問題)、Try(挑戦)の3観点プロジェクト終了時、スプリント振り返り3-8名1-3ヶ月・最も一般的で導入しやすい
・具体的なアクションが出やすい
・問題解決志向
・Problemに偏りがち
・ネガティブになりやすい
YWTやったこと、わかったこと、次にやることの段階的整理個人振り返り、小規模チーム1-5名1週間-1ヶ月・シンプルで理解しやすい<br>・段階的な思考整理<br>・継続しやすい・深掘りが不足しがち
・チーム全体の課題把握が困難
FDLFun(楽しい)、Done(成果)、Learn(学び)のベン図形式チームビルディング、モチベーション向上4-10名1-3ヶ月・ポジティブな雰囲気
・視覚的で分かりやすい
・楽しさを重視
・問題の深刻さが見えにくい
・具体的改善案が出にくい
4LLiked(良かった)、Lacked(足りなかった)、Learned(学んだ)、Longed for(望んでいた)長期プロジェクト、要求分析重要時4-8名2-6ヶ月・多角的な視点<br>・要求や期待の明確化<br>・バランスの取れた振り返り・時間がかかる
・慣れるまで理解が困難
Start/Stop/Continue開始すること、やめること、続けることの3分類行動変容が必要な時、習慣改善3-8名1-3ヶ月・行動に直結しやすい
・シンプルで分かりやすい
・即実践可能
・Why(なぜ)の分析が浅い
・根本原因が見えにくい
Mad/Sad/Glad怒ったこと、悲しかったこと、嬉しかったことの感情ベースストレス発散、感情共有重要時3-6名1週間-1ヶ月・感情の共有ができる
・心理的安全性向上
・ストレス解消効果
・感情的になりすぎる危険
・建設的な議論が困難
象/死んだ魚/嘔吐大きな問題、放置された問題、不満の3つの隠れた課題深刻な問題があるが言いづらい時4-8名2-6ヶ月・隠れた問題の顕在化
・心理的安全性があれば効果大
・インパクトのある気づき
・信頼関係が必要
・ファシリテーション技術必須
・重い雰囲気になりがち
Timeline時系列でイベントと感情を整理長期プロジェクト、複雑な経緯がある時3-10名3ヶ月以上・全体の流れが見える
・因果関係の把握
・客観的な振り返り
・準備に時間がかかる
・記憶の曖昧さ
・複雑になりがち
Good/Bad/Better良かった点、悪かった点、改善案の3ステップシンプルな改善が必要な時2-6名1週間-1ヶ月・初心者にも分かりやすい
・改善志向
・短時間で実施可能
・深い分析は困難
・表面的になりがち
PDCA振り返りPlan/Do/Check/Actionサイクルでの振り返り継続的改善、品質重視時3-8名1-3ヶ月・体系的なアプローチ
・継続的改善文化
・標準化しやすい
・堅いイメージ
・創造性が制限されがち
・時間がかかる
Speedboatボートに見立てて推進力(風)と阻害要因(錨)を特定チームの生産性向上、障害除去4-8名1-3ヶ月・視覚的で分かりやすい
・原因と対策が明確
・楽しく参加できる
・表面的な要因に留まりがち
・根深い問題の分析は困難
Starfish継続/開始/増加/減少/停止の5つのアクション詳細な行動計画が必要な時4-10名1-3ヶ月・具体的なアクションプラン
・段階的な変化を促進
・柔軟性がある
・5つの分類が複雑
・時間がかかる
・優先順位が不明確
Weather Report天気で現在の気分やチーム状況を表現チェックイン、雰囲気確認3-8名1週間-1ヶ月・感情表現が簡単
・短時間で実施可能
・アイスブレイクにも効果的
・具体的な改善策は出ない
・表面的な情報のみ
・問題解決には不向き
Traffic Light信号機の色で状況を赤(問題)、黄(注意)、緑(良好)に分類状況の優先度整理、リスク管理3-8名1-3ヶ月・優先度が視覚的に分かる
・リスク管理に効果的
・シンプルで理解しやすい
・中間的な評価が困難
・詳細な分析は不可
・3段階評価の限界
Rose/Bud/Thornバラ(良いこと)、つぼみ(期待)、とげ(問題)の3要素現状と将来の両方を見たい時3-8名1-3ヶ月・現在と未来の両方を考慮
・ポジティブな要素もある
・自然な比喩で親しみやすい
・抽象的になりがち
・具体的なアクション不足
・深い分析は困難
Plus/Deltaプラス面(良いこと)とデルタ(変更したいこと)の2軸シンプルな改善、短時間実施2-6名1週間-1ヶ月・非常にシンプル
・短時間で実施可能
・ポジティブな表現
・問題の深刻度が見えない
・2軸のみで限定的
・根本原因分析は困難
5 Whys「なぜ」を5回繰り返して根本原因を探る特定の問題の根本原因分析2-5名1-2週間・根本原因の特定
・論理的思考促進
・シンプルな手法
・一つの問題に限定
・複雑な要因は困難
・5回で解決しない場合もある
Sailboat帆船に見立てて目標(島)、推進力(風)、障害(錨・岩)を特定目標達成型プロジェクト、長期計画4-10名2-6ヶ月・目標志向
・包括的な視点
・視覚的で分かりやすい
・準備が必要
・抽象的になりがち
・ファシリテーションスキル必要
WWWWhat Went Well(うまくいったこと)に特化した振り返り成功体験の共有、モチベーション向上3-8名1-3ヶ月・完全にポジティブ
・成功パターンの特定
・チームの自信向上
・問題が見えない
・改善につながりにくい
・現実逃避の危険性
Hopes and Fears希望と不安を共有してチームの期待値を合わせるプロジェクト開始時、チーム結成時3-10名プロジェクト開始時・期待値の調整
・不安の共有で安心感
・チームビルディング効果
・実際の振り返りではない
・継続的な使用は困難
・具体的なアクションが出ない

選択のポイント

チーム成熟度別

  • 初心者チーム: YWT、Good/Bad/Better、Plus/Delta、Weather Report
  • 中級チーム: KPT、Start/Stop/Continue、FDL、Traffic Light
  • 上級チーム: 4L、象/死んだ魚/嘔吐、Timeline、Starfish、Sailboat

目的別

  • 問題解決重視: KPT、象/死んだ魚/嘔吐、5 Whys、Speedboat
  • モチベーション向上: FDL、Mad/Sad/Glad、WWW、Rose/Bud/Thorn
  • 行動変容: Start/Stop/Continue、PDCA、Starfish
  • 関係性改善: FDL、Mad/Sad/Glad、Weather Report、Hopes and Fears
  • 長期振り返り: Timeline、4L、Sailboat
  • リスク管理: Traffic Light、Speedboat、Sailboat

期間別

  • 短期(1週間-1ヶ月): YWT、Good/Bad/Better、Mad/Sad/Glad、Weather Report、Plus/Delta
  • 中期(1-3ヶ月): KPT、FDL、Start/Stop/Continue、Speedboat、Starfish、Traffic Light、Rose/Bud/Thorn
  • 長期(3ヶ月以上): Timeline、4L、象/死んだ魚/嘔吐、Sailboat

特殊用途

  • プロジェクト開始時: Hopes and Fears、Sailboat
  • 緊急事態・重要問題: 5 Whys、象/死んだ魚/嘔吐
  • チームビルディング: FDL、Weather Report、WWW、Hopes and Fears
  • アイスブレイク: Weather Report、Mad/Sad/Glad、Rose/Bud/Thorn

これを見てみると、振り返りというよりも、それぞれのタイミングで物事を考えるフレームワークとして考えたほうがいいですね。
チームで何かしらの問題点や改善点に気づくということもあるけれど、個人でも十分価値がある内容と思います。

結構似通ったものも多いので、いくつかに集約して考えることが出来そうです。
ただ、ほとんど聞いたことがないのは私が振り返りが出来てない駄目エンジニアだからでしょうか・・・。

個人的にはWeather Reportは手軽で面白そうに感じました

Improve Team Communication Using Weather Report Retrospectives
https://www.growingscrummasters.com/keywords/weather-report-retrospective-technique

いやー、思考のフレームワークは色々あって面白いですが、結局のところ何がいいんだっけ?となると手が止まってしまい、誰もが認知しているKPTで収まるという結果を招きがち。
やはり、自分でいくつか試してみる感じですかね

Obsidianで後で読む

試行錯誤を続けているObsidianですが、「後で読む」プラグインを入れてみました。
ちょっといい感じ

そのままの名称「ReadItLater」です。

Pluginをインストールして有効化すると、サイドバーにアイコンが追加されます

URLをクリップボードに入れた状態でアイコンを押すと、対象Webページを読み込んでMarkdownファイルとして保存してくれます

画像も含めてダウンロードして表示してくれるので非常にいい感じです。
デフォルトの設定だと「ReadItLater Inbox」に保存され、画像はassetsフォルダに格納されます。

ただ、読んだあとで不要になった場合にすべての画像が同じassetsフォルダにあるとちょっと削除しづらいな、と考えてプラグインの設定は下記のようにしています。

①にある2つの枠で、保存場所に「%date%」フォルダを追加しています。
%date%はデフォルト設定のままだとYYYY-MM-DD HH:MI:SSのように時刻までついてしまうので、②のところは年月日までにしておきます。

これで、ボタンを押下した日付フォルダにすべてが格納されることになり、不要になった場合は日付フォルダごと消してしまえばいい状態になりました。

少しずつ育てていっている感があっていいです

ObsidianでKindle Highlightを管理する

Kindleで本を読んだときに、いいなと思っている機能の一つがHighlightをWebで見ることができる点だと思っています

Kindle Highlight
https://read.amazon.co.jp/notebook?ref_=k4w_ka_notebook

過去に自分がどういうことに興味を持ったのか?ということを確認することが出来ますし、ブログに記事を投稿する際にも参考にしたりしています。
Audibleにも似たような機能があるといいのですが、音声だと文字起こし範囲の指定が難しいですよね。

最近のAIは賢いもので、これらの”自分が何に興味を持ったのか?”という情報は、これから大事になってくるのではないかと考えています。
そういう意味では、それを再利用可能な状態にしておく方が良いと。
であれば、Obsidianに取り込んでしまおうかという話です

Kindle Highlights

特に何も考えることなくそのものズバリ、「Kindle Highlights」というPluginがあります

プラグインのプロパティとしては下記のものがある

Templatesで、同期したあとにどういう形でノートとして保存するのかを定義可能。
デフォルトでも大きな問題はないのだけれど、自分用に少しいじったものをここに公開しておきます。

FileName

{{title}} - {{author}}

File Content

---
tag: 📚Book
title: "{{title}}"
author: [{{author}}]
---
{% trim %}
{% if imageUrl %}![image]({{imageUrl}}){% endif %}
{% if authorUrl %}
* 著者: [{{author}}]({{authorUrl}})
{% elif author %}
* 著者: [[{{author}}]]
{% endif %}
{% if asin %}* ASIN: {{asin}}{% endif %}
{% if isbn %}* ISBN: {{isbn}}{% endif %}
{% if pages %}* Pages: {{pages}}{% endif %}
{% if publicationDate %}* 出版日: {{publicationDate}}{% endif %}
{% if publisher %}* 出版社: {{publisher}}{% endif %}
{% if url %}* Reference: {{url}}{% endif %}
{% if appLink %}* [Kindle link]({{appLink}}){% endif %}
{% endtrim %}

## 概要・要約

## Highlights
{{highlights}}

Highlight

## location: {{location}} : {{ text | truncate(20) }}
{{ text }} — [link]({{ appLink }})

{% if note %}{{note}}{% endif %}

---

このテンプレートでやるとこんな感じになります。
Highlightされた場所をより見つけやすくするために、位置情報と冒頭の数文字を出している形ですね。

このあたりはもう少し運用して手を加える場所があれば都度見直していこうかと。
ノートを削除してもう一度同期をすれば作られるので、テンプレートの改造を試すのには比較的敷居が低いと感じています。

最後にプラグインのプロパティでSync on Startupがありますが、Obsidianの起動が遅くなるので結局オフにしました

Obsidian起動してから主導でSyncする形で頻度としては十分かと。
思ったよりもこの時間がかかるのが気になってしまうので。

Obsidian の LiveSync を Fly.ioで

Obsidianはだんだん手に馴染んできているもののDynalistと違ってふと手元でメモを取ってそれをPCで確認するということが出来ないのは、正直おもしろくない。

Obsidian公式としてもSync機能は提供されているものの、せっかくデータをローカルに持ってきているという特性。
それを再び相手に明け渡すというのも面白くない

調べてみると、Syncサーバーを自分で立てる。。というか、Obsidianは内部的にCouchDBを使っているようでそれをホスティングしてくれるものを利用するSelf-hosted LiveSyncというプラグインが存在しているので早速試してみる

例によってコミュニティプラグイン一覧からlivesyncと検索すれば出てくる。

プラグインの説明を読むと、Amazon S3でも行けるっぽい。
SetUpの方法は基本的にはGithubにかかれている通りの手順となります。

Setup CouchDB on fly.io
https://github.com/vrtmrz/obsidian-livesync/blob/main/docs/setup_flyio.md

ColabでFly.ioの設定をスタートする

下記ページへアクセス

https://github.com/vrtmrz/obsidian-livesync/blob/main/setup-flyio-on-the-fly-v2.ipynb

”Open in Colab”ボタンを押下するとGoogleアカウントが正しく設定されていれば、GCPのColabを利用してFly.ioをセットアップするためのノートブックが開かれる。

これは、Fly.ioがGUIを基本的に提供しておらず、CLIでセットアップを進める必要があるからである。

下のGithubに「Choose a region and run all blocks」と書いてあったので、”ランタイム”メニューから”すべてのセルを実行”を選択するを最初選んでしまったのだが、最後にサーバーを削除するスクリプトがついているので必ず一つずつ実行してください

セクション[1]が完了するとセクション[2]に移るわけだが、ここではFly.ioへのログインが求められる

上記URLをクリックしてFly.ioへサインアップする必要がある。
ここで注意なのが、Fly.ioはCouchDBを1GB無料枠があるけれど、利用するためにはクレジットカード登録が必要になってしまうというところ。

ここで、Payment Methodを登録しておかないと、Colabのスクリプトは失敗してしまう。

セクション[3]まで完了すると、LiveSyncプラグインへ入力するための情報が表示される。
これが出れば、Colab側の作業は完了。
表示されているURIとPassPhraseは使うので必ずローカルに保存しておく。
そのうえで、画面は閉じずに一旦そのままにして、Obsidianに戻る

ObsidianでLiveSyncプラグインを有効化すると、Setup-URIをすでに保持しているのかを聞かれるので”Yes”を選択する

Colabで指定されたSetup uriを入力する。
これに関してはColab上に”Copy setup uri”というボタンがあるのでそれを押下した値をペーストすればOK

次にPassphraseを入力する。
Colabのセクション[3]を読むとPassPhraseという文言が2つ出てくるのだが、先のキャプチャで書いた、最初に提示されたフレーズを入力する

コンフィグをインポートするか聞かれたので”Yes”を選択した

続いて、この端末をどう扱うかを聞いてくる。
一番上はFly.ioに立てたDB上のデータでローカルを更新するとなっているので、2番目の「initialize new server data」を選択して、サーバーを初期化する形を選ぶ

この設定で進めるかを問われるので、下の選択肢を選択

隠しファイルをどうするかを問われているので、一旦デフォルト設定の”Disable”を選択する。

ちょこちょこ選択肢が出てくるが一旦はデフォルトにしておいてこれで設定は完了。

スマホ側

私が試したのはiOSだが、Obsidianをインストール後、Self-hosted LiveSyncのプラグインを入れて同様に入力。

新規クライアントとして登録する事で無事に同期を取ることが出来た。
いいね。

Obsidian使用1週間

Obsidianを仕事でも使い始めて1週間ほどが経過した。

まだ目覚ましい成果というほどのものが出ているわけではないが、デイリーノートを起点として業務をまとめていく形が徐々に作られている気がする。

タグとかそういうものを利用していくと、これまで散らばっていた情報が整理され、集約されていくので生産性が上がっている気がする。

一方で弊害も出始めている。

疲れるのだ。

これまで結構適当に過ごしていたので、何かの情報が抜け落ちていることがよくあった。
特に先週はいろいろなことが連続しておき、かなり頭を使うことを要求される感じだった。
その中で、デイリーノートを中心にやることを書いてあるので、抜け漏れが少なくなったせいでずっと頭を働かせているような感じ。

違う。
そんな真面目なキャラじゃないんだ、私は。

Obsidian。。。恐ろしい子

Obsidian でノート内の未チェックタスクをリストアップする

Obsidianがこれまで愛用していたメモサービスであるdynalistのチームが開発しているという事を知って、非常に驚くとともにうれしくなりました。

徐々にObsidianを使いこなせればと思っています。
業務PCにいれる許可も取れたのでどういう単位でノートを作っていくかや、どういうふうにリンクを作っていくと効果的なのか。
考え始めるとあれこれ出てきそうですが、そのあたりに凝りすぎて肝心の仕事が進まないと手段の目的化になってしまうので注意が必要です。

ひとまず、”案件”というフォルダを作ってその中になんとなくの単位でノートを作り、作業ログ的にメモ書きを走らせています。

メモ書きを走らせていく中で、その中からTODOが生まれたときにはチェックボックスをつけるのですが、ノートが長くなってくるとなんのTODOが残っているのかが分かりづらいです。

そこで、同じノート内で未チェックのものをノート上部に置くようにしてみました

```dataview
TASK
from "案件"
where file.name = this.file.name and !completed
```

使ったPlug-Inは”Dataview”というもの

多少のタイムラグはあるけれど、現在の内容を下にクエリを走らせて表示してくれる。

しかもDataview中のチェックボックスをOn/OffすることができるのでメモからのTODOリストが自然と出来上がる。

いいじゃないか。

もう一度言う

いいじゃないか。

Obsidianの使い方に関しては先人がいっぱいいるので、いろいろなやり方を試して取り入れていければと思う。

Obsidian の デイリーノートに前日の未実施TODOを引き継ぎたい

少しずつ使い始めている Obsidian 。
まだ使いこなしていると言うには程遠いですが。。。

ToDoをいわゆるAsanaやBacklogなどタスク管理ツール、プロジェクト管理ツールで管理している人もいるとは思うのですが、もう少し細かいタスク。
プロジェクトになっていないようなタスクは基本的にこれまではテキストベースで書いていました。

今回、Obsidianを利用するにあたってデイリーノートの仕組みがせっかくあるので有効活用したいところなのですが、デイリーノートは毎回作り直されてしまうので引き継げません。

コピペすればいい話ではありますが、完了済みのタスクもペーストされてしまうので地味に面倒です。

なんとかならないかな?と見ていたら、良さげなプラグインが。

Templaterを導入

コミュニティプラグインからフィルタでTemplaterを探し出してインストールを押下します。

インストールが終わったら忘れずに有効化します。

続いて、有効化したTemplaterプラグインの設定の中から必要なものを有効化します

有効化する設定としては下記となります

Trigger Templater on new file creation
→テンプレートから新規ファイルを作成した際にTemplaterプラグインのルールに従って内容を作り上げます。今回でいうと、前回のTODOを引っ張ってくる処理を動かすわけですね

引き継ぎの実施

引き継ぎ処理の仕様としては、一旦下記とした

  • ”Work In Progress”セクションから”Memo”セクションまでの間が対象範囲
  • その中でチェックが入っていない行を引き継ぐ
  • 毎日必ずしもデイリーノートを作るとは限らないので、1週間分まで遡って最初に見つけたノートを引き継ぐ

テンプレートへの記載内容は下記となる。
セクション名は適宜変更してほしい。

## Work In Progress
<%*
let addRest = 0; // サブテンプレートから差し込むかどうか
for (let i = 1; i <= 7; i++) {
	const yesterday = tp.date.now("YYYY-MM-DD(dd)[.md]", (i*-1), tp.file.title, "YYYY-MM-DD(dd)[.md]"); // 前回の日付のファイル名を生成
	const yesterdayFile = tp.file.find_tfile(yesterday); // 前日のファイルを取得

	if(yesterdayFile){
		const content = await tp.file.include(yesterdayFile); // ファイルの内容を読み込む
		// "## Work In Progress"から"## Memo"までのテキストを抽出するための正規表現
		const wipOld = content.match(/## Work In Progress([\s\S]*?)\n## Memo/);

		if (wipOld && wipOld[1]) {
		    const taskLists = wipOld[1].match(/^(\s*)- \[ \] .*/gm);
		    if (taskLists && taskLists.length > 0) {
			    uncheckedTasks = taskLists.join('\n');
			    tR += uncheckedTasks;
			    addRest = 1;
		    }
		}
		break;
	}
}
if (addRest == 0) {
  // 進捗部分がない場合はサブテンプレートを書き出す
  tR += await tp.file.include("[[daily-todo]]");
}
%>

## Memo

これで、前回未完了分をコピペし直さなくて良くなって満足だ。

Obsidianをインストール

今更ながら、Obsidianというものがあるということを聞いた。
私自身、普段のメモ書きはVSCodeを使って一応マークダウンで書いているけれど、プレビューをするというわけでもなくほとんどメモ帳。

ただ、あちこちにファイルが散乱してしまうこともあるのでなんとかしたいな、と思っていた。
いきなり仕事PCにいれるわけにもいかないので、一旦は個人のPCへインストールして使い勝手を確認。
良さそうであれば仕事PCへ申請して入れてみたいと思っている

インストール

モジュール自体は公式にインストーラーが置かれている

Download and install Obsidian
https://help.obsidian.md/Getting+started/Download+and+install+Obsidian

インストーラーを起動すると、まずはvaultを作る画面となる。
これは、説明にもある通り諸々を保存するローカルフォルダとなる

何でも良いと思うのですが、一旦baseとした。

そうすると、サクッと立ち上がる。
あまりにもサクッとしすぎていて、何かと思ったくらいサクッと立ち上がってビビった。

このままだとマークダウンエディタという感じ。
そこで、コミュニティプラグインを導入していく。

歯車マークをクリックしてオプション画面を開き、コミュニティプラグインを選択。
有効化したうえで閲覧を押す

プラグインの一覧が出るので選択してインストールを押下する

ここまでが基本的なインストール手順になりそう。
プラグインも豊富に揃っているので、いくつか試してみたいと思っている。