下林明正のブログ

個人的かつ雑多なブログです。

エクストリームプログラミング を読んだ

XPのことを知らないのは微妙だなと元々思っていたのと、仕事上の思想のコアになった二冊 - 下林明正のブログの流れで基本に立ち返る気持ちが強まっていたので、この本を読んでみることにした。

もしかしたら、自分のような人間がXPに触れてこなかったというのは意外に思われるかも知れない。 個人的には、XPは一回り年上の世代というイメージがある(ちなみに、自分は1986年生まれで業界16年目くらい)。 自分の周りでは、自分と同じくらいか若い人たちはあまりXPそのものについては勉強したことがないという人は多かった。 逆に、自分より年上の人たちは当然知ってるよね、という雰囲気もあった。 おそらく、こういった知識を必要としたときに手を取りやすいところにあったのが、ある世代にとってはXPだったり別の世代にとってはスクラムだったりしたのだと思う。 実際のところは知らないので、憶測だけど。

なんにせよ、自分が参考にしているような知識体系の源流にXPがあることは知っていたので、今回勉強してみることにした。


そもそもXPとは何か、ということについては意外と簡潔にまとめられていなかった。「XPとは何か」という章に色々と書かれているので、それを読むのが良さそう。ただ、特定の手続きに則っていればXP、というわけでないことだけは確かだった。つまり、XPはルールやフレームワークなどではない。あえて自分なりにまとめるなら、XPとは仕事に対する態度、というように感じた。

基本的には、大部分の内容は同意できるものだったし、今でも十分に参考になるように感じた。 「大部分の内容は」というのは、分かりやすいところではテストファーストプログラミングやペアプログラミングといったプラクティスについてインターネット上で議論が発生しているのを過去見てきているということがある。 ただ、前述の通りテストファーストプログラミングやペアプログラミングをやってないとXPではないというものではないので、そういうところも含めての参考なのだと思う。


訳者あとがきにはXP本来のあり方とは、「価値、原則、プラクティス」のそれぞれを言葉にして、場合によっては利用者であるあなた自身が自分の言葉を生み出しながら、利用することに他ならない。とまとめられている。 なので基本的には、それらが絶対でないにせよ重要ではありそうだった。

ではまず、XPのプラクティスがどうなのか?というと、大部分が本の冒頭でも触れられている通り現代ではことさら当たり前の取り組み、少なくとも知識としては常識になっているものが多いと思う。

例えば、CIは本当に当たり前になった。「ストーリー」も知らないという人はいないと思う。他にもそういったものが多い。 ただ、全部がそうでもないように感じる。例えば「いきいきとした仕事」は自分はあまり聞いたことがなかった。

価値や原則についてはどうか?と考えると、部分的に別のところで聞いたことがあるような気がする(例えば、XPの価値のひとつである「勇気」は、スクラムの価値基準にも含まれている。「リスペクト」はTeam GeekでいうところのHRTにも含まれている、など)ものも多いが、あまり聞き慣れないものも多いように感じた。例えば、XPの原則にある「人間性」などはあまり言われている印象がない(あっても、機能しているチームを解体することほど愚かなことはないとかそういうくらいで、人間性というほど踏み込んでいない印象)。

今このタイミングでXPについて勉強する価値が特にありそうに感じたのは、きっとこういった(自分にとっては)失伝された知識に関することだと思っている。 もし後の知識体系において意識的に変更が加えられたものであれば、おそらく何らかの意図やアンチパターンがあったのだろう。あるいは、単に分かりやすい・使いやすいプラクティスだけが伝わってその背景が伝わってないのだとすれば、その背景を補完することでより本来の理想像を描くことができるようになる、はず。


前置きがかなり長くなったけど、その上で自分が特に気になったのは以下のような点だった。

  • 制約があっても、最善を尽くすことはできる
    • 制約に心を奪われると、ゴールから遠ざかってしまう
  • XPは(中略)実践するのがとても楽しい。
  • 原則
    • 人間性
    • 冗長性
      • ソフトウェア開発の重要で困難な問題は、複数の方法で解決すべきである。ひとつの解決策が完全に失敗しても、その他の解決策で惨事を食い止めることができるからだ。

      • 自分にはこういう態度が足りてないと思う。原理主義的だし怠惰なので一つの解決策でなんとかしようとしがち
  • 主要プラクティス
    • いきいきとした仕事
      • 長時間労働に対してここまで明確にNOを突きつけているのは珍しく感じる
  • イニシアチブをとれる。いい表現だなと思った
  • 制約理論
    • ボトルネックを潰していくことを制約理論と呼ぶとそれらしさが増す気がする
    • あまり効果がないことでおなじみのウォーターフォール型の開発スタイルだ。

    • ここで純粋なウォーターフォール的な図で紹介されている
      • やはりここでも対比的に紹介されていた
      • 脇道に逸れるけど、個人的にはなぜこういった純粋なウォーターフォールが国内外で大流行した(らしい。自分は関わったことが無いが……)のか歴史的な経緯にちょっと興味がある。前世紀のテイラー主義、フォード主義的な思想が自然と受け継がれた結果だったのだろうか。マネジメントの世紀 を読んだ - 下林明正のブログはソフトウェア開発の文脈に限定されていなかったので、その答えにはなってなかったような記憶
    • 経営幹部の支援がない場合は、たとえ評価や保護が得られなくても、自分自身でよりよい仕事をする覚悟を持たなければいけない。

  • 第一版ではストーリーポイントを紹介していたが、この第二版では実時間での見積もりの方が好み、とのこと
    • 理由はよくわからない
    • 特定の個人に結びついた予想作業時間ではないことに注意。「ペア時間」という単位を紹介している。どうやら、平均的なペアが何時間取り掛かったら完了させられるか、という単位らしい
  • 建築のメタファーがよく使われるが、根本的な欠陥があるという話
    • 建築の世界では、逆方向に進めることが難しい。ソフトウェアの世界では簡単。という根本的な違いがあるため
    • 論点となるのは、設計をするかどうかではなく、設計をいつするかである。

    • 個人的にあまりピンときてない点として、実際には言うほど逆方向に進めることは簡単ではないというのがある
      • もちろん建築と比べたら圧倒的に簡単なんだろうけど、ソフトウェア開発においても「経済性」の観点から実質的には逆方向に進めない、ということはよくある印象
    • 最終責任時点の概念は分かる
    • まあ、事前設計や初期設計が重要ではないと言ってるわけではないので、矛盾はしてないのかも。ただ、その重要性についてあまり言及されてないように感じる点に引っかかりがあるだけかも
  • トヨタ生産方式
    • ムダを排除するために必要なフィードバックを手に入れるには、アウトプットをすぐに利用する必要がある。

    • トヨタ生産方式がさらに源流にあることは知っていたけど、この一文でその辺りの理解がより明確になったような気がする

全体を通して印象に残ったのは、やはり「人間性」が重視されているように感じる点だった。 あまりここまで明確に重視されていることは多くないような気がする。 個人的には共感できる考え方なので、覚えておきたい。

訳者あとがきによると、パターンランゲージはXPのみならずアジャイル開発手法を理解する上で重要なものらしい。 アレクサンダーの書籍やパターン、Wiki、XP ―― 時を超えた創造の原則 WEB+DB PRESS plusを読むと良いとのこと。 この辺りもまた気が向いたら読んでみたい。

力があって技が活きる

昔、合気道をやっている友達に「合気道ってガリガリの爺さんが筋力を使わずに技だけで相手を制圧していくようなイメージがあるけど、実際に合気道の道場に行くとみんな身体も鍛えてて筋力がすごい」と言われたことがあって、印象に残っている。

自分は格闘技のことはよく知らないのだけど、たしかに現実の格闘技の世界で技のみで強い選手というのは見聞きしたことがないし、そもそも重量別に階級が分かれていたりもする。 身も蓋もないけど、勝つためにはまず前提として力が必要で、同じくらいの力だった場合に技が勝敗を分ける、ということなのだと思う。

ソフトウェア開発もきっと同じで、まず前提としてソフトウェアを開発するためのプリミティブな力=技術力が必要で、その上で色々な方法論が活きてくるのだと思う。 成熟した競争環境では、力と技を兼ね備えた者が勝つ。

ただ実際は、別に一人の人間がすべてを兼ね備えている必要は別にない。 専門家同士がチームを組んで開発するのが一般的だと思う。 むしろ一人で何でもかんでもやろうとするのは、どうがんばっても身体は一つしかないという物理的制約にぶち当たる。 専門家同士がうまく分担して働いたほうが大きな仕事を経済的に行える場合も多いだろう。

大事なのは、必要な能力をチーム全体として担保できているか、うまく協調できているのか、ということだと思う(あとはそもそも、成熟した競争環境に身を置かない、というのもある)。

一方で自分自身を省みると、技術力が足りてないとは思う。役割を分担したとしても、うまく協調するためには相手のことをある程度は理解している必要がある。自分が腕力を発揮しないといけない状況に追い込まれることもある。その辺りは、うまく自分自身をモチベートしていきたい。

仕事上の思想のコアになった二冊

ふとここ十数年の自分の仕事について内省していると、二冊の本が頭に浮かんだので読み返していた。

shimobayashi.hatenablog.com

久しぶりに読み直して、想像以上に自分がこの本の影響を受けてることが分かった。 プロジェクトマネジメントに関しては十数年間この本の内容をなぞり続けていたと言っても過言ではない。

スクラムに限定しない内容になっているのが改めて良い。 今となってはとりあえずスクラムとなりがちだけど、常にスクラムがマッチするわけじゃない。 根底となる考え方や、やり方が一つじゃないことをしっかりと教えてくれていた。

「誰もがこの働き方を気に入るわけじゃない」という言葉にも、以前よりも重みを感じる。

shimobayashi.hatenablog.com

この本は多分、読んだ当時はあんまりピンときてなかった。 それでも今回この本のことが思い浮かんだのはきっと「この本に書いてあったような気がする」ことを色々と経験してきたからだと思う。

そんなわけで、久しぶりに読み返してみると「めっちゃ良いじゃん」となった。 チームで働くこと、会社で働くことに関して清濁併せてまとめられていて、とても共感できるようになっていた。

本のタイトルから受ける印象に反して、チーミングに限らず個人的なキャリアや働き方について考える際にも参考になる本だと思う。


なぜこの二冊が頭に浮かんだのか?ということを考えてみると、根本的には自分がこういう仕事をしたいからだと思う。 それぞれの本の中でも認められているように、別にこれらの本に書いてあるようなやり方が唯一の正解では無い。 けど、自分はその価値観や考え方に共感しているのだと思う。 理屈じゃなくて、感情の話。

じゃあ、これまでの自分が実際どうだったか?と思い返してみると、至らなかった点は多々あるけど、その中でも「楽しさ」や「幸福」といったものについてあまり真剣に向き合ってこなかったと反省している。 結局、楽しくなければモチベーションが続かないので、持続的でも効率的でもなかった。

「それがぼくには楽しかったから」とはよく言ったもので、ある人にとっては苦痛な仕事が別の人にとっても苦痛であるとは限らないし、むしろ楽しかったりすることがある。 そういうギャップがあると活躍しやすいので、そういう居場所をつくったり見つけたりするのも大事だと思った。

この辺りの話はマンガでやさしくわかるコーチング を読んだ - 下林明正のブログからうっすらと考え続けていたけど、自分なりに咀嚼できたような気がする。

GitLabに学ぶ 世界最先端のリモート組織のつくりかた を読書会で読んだ

読書会そのものや監修者の方々との質問会の内容に関しては以下の記事に書いた通り。

developer.hatenastaff.com

なのでこの記事では、個人的な読書メモをしておく。 全部自分で読んだわけではなく、読書会での要約の共有で把握している部分も多いので注意。

全体的な印象としては、リモートワークを軸足にしつつそこに留まらないGitLab社運営のメンタルモデルに関して書かれていたように思う。 バリューが考え方のトップレベルにあって、そこから派生して色々なルールなどが定められているような感じだった。

必然的にトップマネジメント寄りっぽい雰囲気もあると感じるけど、個人やチーム単位での考え方の参考にできる部分も多々あると思った。

以下、個人的に印象に残った箇所(本が扱ってる範囲が広いのでしきい値高めに絞ってます)。

  • ダイバーシティ、インクルージョン、ビロンギング
  • Disagree, commit, and advocate
    • ヒエラルキー型の意思決定とコンセンサス型の意思決定のバランスの取り方
    • DRIの概念などとセットになっている
    • 説明しなくて良い、という話ではない
  • カルチャーマッチではなくバリューマッチ
    • カルチャーを流動的なものとみなし、カルチャーをより良く成長させられる人材化どうかという観点で採用する
  • すべての人が昇格を目指す必要はない
    • インクルーシブであるとは言えない
  • 基本的に報酬額は下げない
    • 下げてもモチベーションは上がらない・財務インパクトは微々たるもの、とのこと
  • パフォーマンスが不足している従業員の改善に際して協力を仰げるチームメンバー・リレーションズ・スペシャリストという役職がある

あたりが特に印象に残った。

一方で、最近だとウォルマート、多様性支援を中止-今後「DEI」という用語使わず - Bloombergといったニュースもあったり、各社が徐々にリモートワークからオフィスワークへ回帰するような動きも見られたりと、世間の流れ的には揺り戻しが起きているようにも感じる。 どんな流れがあって、自分たちはどこに居て、どんな強み・弱みがあって、どこに行きたいのか、ということを意識していきたい。

フォロワーからリーダーに転身するときに、何を意識するとうまくいきやすいのか

  • フォロワーからリーダーに転身するときに、何を意識するとうまくいきやすいのか?ということを考えていた
    • リーダーとかフォロワーという言葉は意味が曖昧だけど、ここでは「自ら課題設定して解く人」と「渡された課題を解く人」くらいの意味
  • 結論としては、まずはロジックツリーで課題を分解する癖を付けてくれ、で良いような気がしてきた。ロジックツリーが以下を満たすからだと思う
  • 実践できていると、他者に説明可能な状態になっていることも期待できる
    • 説明してもらえると、リーダーのマネージャーはそのリーダーに安心して任せられる。説明がおかしかったらサポートしようになる
    • 課題の対処に今の枠組みを変える必要(権限の不足など)があるなら、枠組みを変える提案も含めてして欲しい。一方、枠組みを変えるにはそれなりの妥当性が必要。なので、説明可能であって欲しい
    • 仮に誰にも説明する必要が無かったとしても、説明不能な考えはどこかが破綻している可能性が高いので避けたい
    • 関連: 提案の型 - 下林明正のブログ
  • さらに付け加えるなら、実際には最初に立てた計画通りに全部うまくいくなんてことは無いので、検査と適応を繰り返していって欲しい

課題を明確にし、分解し、優先順位を付け、他者に説明できる状態を作ることが重要。また、計画に柔軟に対応する姿勢も必要。

他者育成について考える際に自分が意識していること

話す機会が多いわりにどこにもまとめられてなかったので書いてみる。

主には以下の3つを意識している。

これらを総合すると、大筋は以下のステップになると考えている。

  1. 本人のキャリア意向をヒアリングする
  2. チームとしての意向を決める
  3. 各意向を考慮しつつ、SL理論でいうところの指示型〜援助型の領域がどんなところにあるか見極める
  4. 領域に応じたタスクアサインをする
  5. ティーチング・コーチングを通じて関わり、評価とフィードバックのループを回すことで育成する

特に誰に習ったというわけでもなく個人的に知っていることを繋げたという感じなので、より良い考え方がある可能性は高いと思っている。何か知ってたら教えてください。

未来、人、コードベースの観点で考えていたソフトウェア開発へのアプローチ

ソフトウェア開発 カテゴリーの記事一覧 - 下林明正のブログに仕事っぽいことはよく書いてるけど、2023年はあまり書いてなかった。

2023年前半~中盤に関しては大まかには logmi.jp で話していた通りという感じなので、それ以降をふりかえるには良いタイミングだし忘れないうちに軽く書き出しておこうという気持ちになった。

未来、人、コードベースの3つの観点で主に考えていた

実現したい未来を考えて、その実現に不足していることは何か考えて埋めていく、というアプローチを基本的に取っている。

なので、実現したい未来に対して主に不足を感じているのが人やコードベースだったということだろう(あくまで「実現したい未来に対して」というところに注意)。

よく参照しているエンジニアリングマネージャ/プロダクトマネージャのための知識体系と読書ガイド #マネジメント - Qiitaの分類に当てはめてみるなら、

  • 未来=プロダクトマネジメント
  • 人=ピープルマネジメント
  • コードベース=テクノロジーマネジメント

と言えるかも知れない。

コードベース以外にテクノロジーマネジメントで考えることはあるだろうけど、単に今の主要な関心がそこにあるというだけだと思っている。他の分野についても同様。なので、将来的には変わっていくはずだし、変えていきたい。

プロジェクトマネジメントが登場していないのも多分そういうことで、自分がプロジェクトマネジメントを比較的得意にしていてそこに関してはある程度満足できる状況に改善できたつもりなので、主要な関心ではなくなってきているのだと思う。

未来

これに関してはオープンインターネットで語れることはあまり無いけど、どれくらい先の未来について主に考えるべきか考えるべき、という気持ちになることもあった。

例えば、食べ物が無くてめちゃくちゃ辛いという状況だとしたら、人生計画はどうしようとか悠長に考えている場合じゃ無くて、まずは目先の食べ物を確保することに注力した方が良いと思う(動物的だ)。逆に、人生計画について考えてみた方が良い状況というのもあると思う。

今、自分がどんな状況にあるのか、それを踏まえて何について考えるべきなのか、考えてみても良いと思う。

あとは、未来について定期的に話す機会を持つことも重要だと改めて感じた。思った以上に、話してみるとギャップがあることに気づけたり、逆にギャップがないことを確認できたりするものなので。

育成方針表というのを手元でつくって運用した。 内容としては、こういう理由でこの人にはこういう風に成長して欲しい、なのでこういうアプローチをしてみよう、というもの。 そして、育成方針表を見ながら会話する定例も実施した。

両方とも、普段から常に意識して仕事するのは難しいので、意識的に視点を切り替えようとする試みだったと思う。 もう少し言い換えると、普段は「現在」に着目しがちなので、意識的に「未来」に目を向けるように仕組み化した、ということだったと思う。

そして育成について考えていて気付いたこととして、SL理論的な関わり方は前提として、形式知を流し込む→経験させる→暗黙知を獲得していってもらう→自立させる、という流れを強く意識し始めた。

この中でも重要視しているのは「型」で、型というのは形式知のエッセンスだと感じている。 特にリーダーシップの発揮について関心があったので、例えば以下のような型をまとめていたりした。

shimobayashi.hatenablog.com

他には例えば、開発プロセスについて話すときは未だに

scrapbox.io

を良く参照している。

手前味噌的な型の紹介に比重が寄ってしまった。本来は、世間一般の型に寄せた方が無難だと思う。ただ、自分が不勉強なせいなのか分からないけど、世間一般の型が分からないときには自分自身の経験を形式知として抽出するのはやってもいいと思う。世間一般の型も最初はそうして生まれた物だろうし。

こういうのは守破離と言ってしまっても良いかも知れない、再発見ですね。

「人を育成できるというのは傲慢だ」みたいな言説もたまに見かける気がするけど、メンバーシップ型雇用をやってる限り避けられない問題だと思うし、自分自身も育ってきたし育てられてきたという自認がある。 一方で、人が急に育つことは稀で、全く変化が無いということも稀という印象もある。 なので、気長に取り組んでいくべきトピックなのだと思っている(これはつまり、急ぐなら育成に軸を置いてはいけないということでもある!)。

コードベース

コードベースに限らずテクノロジーマネジメントに関しては自分が明るくないところなので、アプローチに難儀している(だからこそ主要な関心として残っている)。 一方、別に自分だけで全部やらなきゃいけないわけじゃないので、テックリードとタッグを組んで取り組んでいた。

これに関しても「人」と同様の理由で、技術的方針をテックリードと一緒にまとめた上で、定例を実施して未来視点に意識的に切り替えるようにしていた。

そうして状況を進めることはできたけど、最近はまた スクラムで余白をつくるにはどうするといいのか - 下林明正のブログ に書いていたような問題が出てきたなと思っている。 これはこれでどうするか考える予定。

演繹と帰納

一歩引いて、少しメタにふりかえってみる。

2023年に読んでから良く思い出すエントリーとして、

ashiki-feelings.blogspot.com

があった。 サッカーのことも数学のことも全然知らないけど、演繹と帰納という分類が強く印象に残っている。

ここに書いた自分の考え方を分類するなら、きっと演繹なのだと思う。 別にこれに限らず、自分は演繹的なアプローチを好む性格だと思っている。

ただ、メンターと話していて「下林さんの演繹的な姿勢は基本的には正しいと思うけど、それがうまくいかなかったときにも演繹的な姿勢に拘りすぎるところがあるよね」的なことを言われて、以前からそれは本当にそうで、自分が抱える問題だと改めて認識するようになった。

なので2024年は、うまくいかないことが出てきたときに帰納的な考え方で頭の中のモデルを更新できるようになりたい。 うまくまとまりましたね。