The Clean Coder ch3 Saying Yes

The Clean Coder勉強メモ

Saying Yes

  • 著者が昔テラダイン社でERという製品を作っていた話

    • 電話でボタン押下して対話的に回答するやつ
  • 作ったはいいがどう売ったものか…
  • 予算は底をつき、結局、CDSというプロジェクトに変異した

    • Craft Dispatch System
    • 修理工を派遣するやつ
  • CDSプロジェクトに変異した後、ERの特許がいつの間にか切れるよりもずっと前のこと
  • 著者は「ERプロジェクトを再開する必要がある、お金になるはず」とCEOに告げた
  • CEO「収益化する方法を見せてくれたまえ、そうしたらそれを信じてERプロジェクトを再開しよう」
  • 著者は、収益化の方法を考えるのはCEOの責任と思っていた

    • (私はソフトウェアの人間であり、金勘定を考える責任はない)
  • ERプロジェクトを再開したい気持ちとの相反する感情
  • 「やります…いえ、やると思います」

    • 【補】できると確約できないものをコミットメントしない

A Language of Commitment

Say.Mean.Do. (by Roy Osherove)

  • コミットメントの三段階

    1. やると言う
    2. 本気で言う
    3. 実行する
  • この三段階を伴わない人々多し

    • ネットワークが遅いときのネットワーク管理者

      • 「新しいルータが必要」
      • 何もしないだろう
    • コードをチェックインする前に手動テストするよう指示したとき

      • 「今日中にはやりたい」
      • 本当にやってくれているか明日再度尋ねる必要がありそう
    • 上司

      • 「皆きびきびやろうじゃないか」
      • 真に意味するところは「君、きびきびやれ」
      • 上司は急ぐ気なし
  • 有言実行の者はめったにいない

    • 有言不実行の者

      • 「やります」と本気で言っているがやらない者
      • 本気で言っていない者

        • 「痩せなきゃ」とか
  • 強要して「やります」と言わせることはできるが、すべきでない
  • 使っている言葉から、本気でやろうとしているかどうかを汲み取ることができる

Recognizing Lack of Commitment

  • 約束がコミットメントでないことを匂わせる言葉

    • 〜する必要がある

      • 「痩せる必要がある」とか
    • 〜したい、できたらなあ

      • 「時間があれば」とか
    • 〜しよう (Let us)

      • 「いつか会いましょう」
      • 英文で言うと、“I …”じゃない
  • 注意して聞いてみると、身の回りはこういった言葉で溢れている

    • あなた自身も使っている
  • 誰かの仕事に影響を与えるような約束に、こういった言葉を使うのは良くない
  • 本当のコミットメントとは?

What Does Commitment Sound Like?

  • コミットメントでない言葉の特徴

    • 「ぼくの責任ではない」
    • 管理する立場ではなく、「犠牲者」として振る舞っている
  • コミットメントするということは、その仕事を管理下に置くということ
  • コミットメントは次のような形

    • 「私は…までに…します」

      • 「するかも」ではない。「(必ず)する」
    • 1人以上の人の前で宣言する
  • ここにおいて、結果は2通り。やり遂げるか、そうでないか
  • やり遂げられなかった場合、約束を破ったかどで避難されることうけあい

    • おっかない。自分を追い込む
  • 本気で「やります」と宣言できない理由

    • 誰かの仕事に依存している
    • 実現可能かかわからない
    • 着手したはいいものの、予想外のことなどがあり、実現できないことがある

It wouldn’t work because I rely on person X to get this done.

  • 完了はできないにせよ、完了に近づける努力はできるでしょう
  • 例: インフラ待ち

    • インタフェースだけ切ってそれに対して処理を書いておくとか

It wouldn’t work because i don’t really know if it can be done.

  • 例: 「実現可能か不可能かを見極める」ことは実現可能=コミットメントできるでしょう
  • 例: 「25個の不具合をリリース前にすべて修正する」は実現不可能かもしれない
  • 以下はコミットメント可能だろう:

    • 25個の不具合の再現を試みる
    • QAチームの隣に座って、25個の不具合の再現を見る
    • 不具合修正に今週いっぱい使う

It wouldn’t work because sometimes i just won’t make it.

  • 予想外のことが起きることもある

    • それが人生というもの
  • 「やります」とコミットメントした相手にすぐ報告
  • 例: 交通の混雑が原因で、予定時刻までにミーティング会場のカフェに到着できなそう

    • 可及的速やかに出席者に告げる
    • 近くのカフェに変えるなり、ミーティング自体を延期するなり対応できる
  • 例2: 不具合を修正していて、当初想定よりもやっかいな不具合だとわかった

    • すみやかにチームに共有する
    • チームで取り組むなり(ペアプロ、ブレスト等)、不具合の優先度を下げるなりして対応できる

Summary

  • コミットメントすることはおっかなく感じられるかもしれない
  • が、コミュニケーションにまつわるトラブルを解決するのに役立つ

    • 見積もり
    • 締切
    • 面と向かってのコミュニケーションの事故
  • 有言実行の真面目な開発者として扱われるだろう

Learning How to Say “Yes”

  • いかにして「No」と言うのかと同じくらい、いかに「Yes」と言うかも重要

The Other Side of “TRY”

  • こんな会話:

    • Marge「金曜までにレーティングエンジンモジュールは終わる?」
    • Peter「可能かと」
    • Marge「ドキュメンテーション含めて?」
    • Peter「終わるように頑張ります(try)」
  • これは「try」の濫用

    • 前章で述べた「余計な労力がかかる」の意ではない
    • Peterは「そうかもしれない、そうでないかもしれない」の意で使っている

      • 「Yes/No」の質問への回答として曖昧
  • Peterの回答はかくあるべき:

    • 「ドキュメンテーションに数時間かかるので、月曜なら可能です。ただし火曜までかかるかも」
  • 不確実性をちゃんと提示している点で、より誠実な対応

Commiting with Discipline

  • つづき

    • Marge「YesかNoで答えて。金曜までにドキュメンテーションは終わる?」
    • Peter「No。実装とドキュメンテーションが確実に終わるのは火曜」
    • Marge「『火曜』とコミットメントしている?」
    • Peter「はい。火曜までに準備します」
    • Marge「火曜だと本当に困る。新しくアサインするWillyの手待ちが発生してしまう。実装を後回しにして、ドキュメントを先にできないか?」
    • Peter「無理です。モジュールのコードからドキュメントを自動生成するので」
    • Marge「月曜朝までにドキュメントを完成させる方法はない?
  • ここでPeterは決断を迫られる

    • Peter「土曜日を数時間使えば月曜に間に合う可能性がある
  • 確度が変わるにすぎない、ということはちゃんと告げるべき

    • Marge「月曜に終わると期待していい?」
    • Peter「確実とは言い切れない」
  • それでは不十分かもしれない

    • Marge「確実でないと困る。月曜までに終わるとコミットメントできる方法はない?」
  • ここでPeterは、規律を破る衝動にかられる

    • 規律を破らないのがプロ

      • 著者の経験によれば、規律を破ったところで、開発は加速しないばかりか遅くなる
    • プロである時点で、次のような標準を維持することは既にコミットメント済なのである

      • テストを書く
      • コードはクリーンである
      • システムの他の部分を壊していない
    • これ以外のいかなるコミットメントも二の次
  • 会話はこう続く:

    • Peter「悪いけど、確かに言えるのは『遅くとも火曜』ということだけ。スケジュールがめちゃくちゃになるのは申し訳ないけれど、それが現実」
    • Marge「早く終わってくれることを期待しているんだけど」
    • Peter「確実なのは『遅くとも火曜』ということだけ」
    • Marge「OK. Willyにあたってスケジュールを再調整してみる」
  • あるいは、Margeも万策尽きるかも

    • Marge「無茶を承知で言うんだけど、これが月曜に間に合わないと本当にクリティカルで。どうにかならない?」
  • ここにおいて、Peterは週末のほとんどを費やすことを覚悟する

    • Peter「土日を費やすことを家族と相談する。OKをもらえたら月曜までに終わらせるよ。」
    • Peter「月曜朝、Willyに会って、滞りなく仕事を進められることを確認する。終わり次第帰って、月火曜休みをもらうから」
  • プロは自分の限界を知っている

    • 土日をまるまる費やせば月曜に間に合うこと
    • その場合、自分は疲れ果てて、月火曜は使い物にならないこと

Conclusion

  • プロは頼まれたこと全部に「yes」と答える必要はない
  • とはいえ可能な限り「yes」と答える道を模索すべき
  • プロが「yes」と言うときは、コミットメントの言葉を使う

    • 約束を違わぬよう

英語

  • ambivalence

    • 相反する感情
  • pathetic

    • 感傷的な
  • mishap

    • 不運、事故、災難
  • live up to

    • (期待等に)沿って、従って
  • strike a chord

    • 心に響く
    • 感情的な反応を引き起こす
  • preach

    • 説教する