Magnolia Tech

いつもコードのことばかり考えている人のために。

『Clean Agile 基本に立ち戻れ』を読んで、”アジャイル”と”ウォータフォール”について考えた

原著は2019年に出版されていて、日本でも2020年に翻訳されている。

アジャイルソフトウェア開発宣言」が2001年に発表されて、約20年。アジャイル開発の歴史や、考え方、プラクティスなどがコンパクトにまとめられている良書。

アジャイルソフトウェア開発宣言

ちょうど、そろそろもう一回アジャイルについて、自分の中の考え方を整理してみたいと思っていたところだったので、ちょうど良いタイミング、内容だった。

ただちょっと気になったのは、全体としてウォータフォールとの対立軸をものすごく強調しているところ。

冒頭はひたすらウォータフォールではプロジェクトが上手くいかず、アジャイルにより上手くいくようになった、みたいなことが書かれているが、本当にそうなのだろうか?

そもそも「正しいウォーターフォール」などというものがどこかに定義されているのだろうか?工程を区切り、順番に進めていき、最後にリリースする…本書ではウォータフォールについてはそれ以上のことは何も言っていない。ただ上手くいかない方法だと書かれている。

進捗について書かれているところも、ウォータフォールでは上手くいかない例ではなく、「進捗で嘘をつくと上手くいかない例」に過ぎない。そりゃそうだ。

中間管理職の価値観の話も、開発方法論となんら関係ない。ウォータフォールだったら、中間管理職はこんな振る舞いをしなさい、なんてどこにも規定されていない。

一方でアジャイルについては、その考え方、プラクティスなど、さまざまな角度からいかに有効であるか論じられている(当たり前だけど)。

いろいろな方法論を作り出す人たち、おそらく過去にただ一人たりとも、”プロジェクトが上手くいかないことを願って”作業をした人はいないのでは?(ステークホルダーへの説明責任を過剰に意識し過ぎ、そもそもの成果をおろそかにした方法論はひょっとしたら有ったかもしれない)また、アジャイルを採用していないソフトウェアプロジェクトが全部失敗に終わったわけでもない。色々な創意工夫の上に成り立っている。

なので、その辺りは割り引いて読んでいった方が良いのかも。現実の問題に合わせた対応をしないと、結局ソフトウェアは完成しないのだから。


  • プロセスやツールよりも個人との対話を
  • 包括的なドキュメントより動くソフトウェアを
  • 契約交渉よりも顧客との協調を
  • 計画に従うことよりも変化への対応を

アジャイルソフトウェア開発宣言」で語られる4つの宣言…”包括的なドキュメントより動くソフトウェアを”を除くと、アジャイルではないプロセスを採用したプロジェクトでも上手く行っているプロジェクトでは当たり前にやってませんか?個人や顧客を無視したプロジェクトはどんな手法を使っても失敗するし、上手く行っているプロジェクトは現実の変化に対応しているのでは?

ただ、経営層や顧客など、取り巻くステークホルダーの価値観や、視点を変えるために、あえて強く主張するのは、きっと有効。ほんとうにこの本を読むべきなのはアジャイルで開発を行うチームの外にいる人たちではないか、とも言える。成果物をすべて最初にコミットする方法ではなく、ある範囲において柔軟に対応することが求められる価値観を浸透させるための、キーワードとしての、「アジャイル」。

ただ、一方でシステムを要求する側は、大抵は、必要にして最小限と思っている機能を要求している。無駄と思って要求する人はいない、要求した以上はどれも必要な要素だ。

既存のシステムの更改など、最初から既に要求仕様が決まっている、一定以上の規模のソフトウェアを作らなければいけないシチュエーションも存在する。

このギャップをどう埋めるかは、この本には書かれていない。本書は2021年現在でも読む価値は十分にある本だけど、実はもっとも大事なのはここに書かれていないことなのかもしれない。

どうすれば、ここに書かれている方法論が機能する環境を作り出すか?それが実はアジャイルを導入する上で一番大事なポイントなのではないか。


本書を読んでアジャイルのすべてが分かるわけではないし、結局何度も実践していく中で自分たちのやり方を見つけていくしかない。プラクティスは揃っているが、それはあくまでプラクティスであり、自分たちの代わりに何かを生み出してくれるわけでもない。

冒頭でアジャイルは軽量なプロセスと書かれている。でも、それはソフトウェア開発に関わる人たちが実際にやることが少ないことを示しているわけでない。

やることはたくさんある。それをいちいち規定しないと言っているに過ぎない。

結局は自分たちが置かれている環境、課題と真摯に向き合い、柔軟にやり方を変え、最終的なゴールに向けてソフトウェアの点から価値を提供できるか?を実行し続けるしかない。それは逆に言えば、アジャイル以外の方法論でも何も変わらないのだけど、ソフトウェア開発プロセスや、ツールチェーン、クラウドの普及・進化などがアジャイルという方法論の効果をより増大させているのは間違いないので、この流れに乗るのが一つの生存戦略だよね、と言われればそれはそう。

「正しいウォータフォール」「きちんと機能するアジャイル以外の方法論」については、この本を読んでもわからないのだけど、この本に書かれていることを誤った方に読み込んで、”目の前の上手くいかない状況はアジャイルじゃないからだ”というラベリングするのだけはよくないなーと思った次第です。


あと、組織をスケールさせる方法はついに分からなかった……。

daiksy.hatenablog.jp

だれか教えてください

設計書には何が書かれてるべきか

Noteからの転載

—-

設計書になにが書かれているべきか、コードの世界と違ってあまりコンセンサスが得られた回答を見たことが無い気がする。

かなり大きめの書店に行っても、「リーダブルコード」に代表される”良いコードの書き方”はかなりプラクティスとしてまとまってきている一方で、”良い設計書の書き方”みたいな本はほとんど見かけない(ごくたまに見かけるけど…それほど印象に残るものは…無かった気がする)。

なぜだろう…と思ったのだけど、結局冒頭のツイートに有るような、「設計書はコミュニケーションツールである」という視点が抜けたまま議論されることが多く、「割と多くの人に納得感が得られる」ところまで到達していないのではないかな。

つまりコンテキスト依存が大きいにも関わらず、オレオレベストプラクティスがその場その場で語られすぎた結果、誰もそれを組織を超えて積極的に流通させていないのではないか?みたいなことを考えていたら🍺飲みたくなってきた。

Excel方眼紙的な設計書があれこれ言われるけれど、それ以上に必要なコミュニケーションが取れないことが一番問題なので、設計書の様式や記載内容は常に「これで必要なコミュニケーションは取れるのか?」という視点を持ち続けたいですね。

プログラミングが上達するコツ

noteからの転載


最後も、独習する上では、割とシリアスな問題ですが…とりあえず本だけ読んでいても全然上達しないですよね。

最初は写経でもいいと思うんですけど、写経する時に絶対にタイプミスとかでエラーメッセージが出ると思います。

その時に、エラーメッセージをちゃんと読んで、意味を調べて…っていう行為を最初の時点でしっかりやると、その後の上達が全然違うんじゃないかなって思います。

本当に全然意味不明なエラーメッセージも多いですけどね

1月のブログの振り返り

f:id:magnoliak:20210202001624p:plain

明らかにやり過ぎた。1ヶ月で1年分のエントリ数を書いてしまった。これは明らかにペースを間違えている。

2月からはもっとゆっくりめのペースでやっていきます。

でも先日「書評ブロガーとしてついにブレイク」と言ってもらったので、それはそれで調子に乗ってしまうかもしれない。


書いたエントリをいくつか振り返ってみる。

blog.magnolia.tech

はてブが500を超えると、けっこう読まれた、と思うのだけど、『理科系の作文技術』のエントリは1000近いブクマがされて、それなりに読まれたと言える。たぶんだけど、タイトルに全部書き切ったのがよかったのかも。この本、古い本だからそれなりに持っている人も多いと思うけど、案外ちゃんと読み切った人はそんな多くないのかも……と思って、せめてここだけは読んで欲しい、と言い切り、読み方を提示できたのが注目されるポイントだったのかも。

blog.magnolia.tech

しばゆーさんのエントリに触発されて書いたエントリ。自分が考えたこと、行動したことを、ものすごく細かく分割して、書き出してみると面白いな、といつも思っていて、自分が技術書とかをじっくり読んでいるとき、どんな読み方をしているんだっけ?っていうのを極限まで分解してみた。解像度が変わってくると、意味が変わってくる……という発見がある。

blog.magnolia.tech

これはずっと言い続けていることの本質というか、要はこれだ、という気持ちの濃縮版。どこかでもう少しまとめたいと思っていて完結編的なものを書きたい。

blog.magnolia.tech

これはけっこういいキーワードを引っ張れた気がする。「自動化」と「見える化」の二つがいつも嫌な言葉だなって。

blog.magnolia.tech

blog.magnolia.tech

blog.magnolia.tech

noteに書き散らしていたことを転載してみたエントリ。ものごとを視点を変えてみるとどうなるんだろう?という話ばかりしている気がする。

blog.magnolia.tech

blog.magnolia.tech

この辺も普段考えたことを書き出してみたエントリ。

blog.magnolia.tech

雑に書いてしまったので、まだあまりまとまっていないんだけど、これはほかの人が書かないことをかけたなーって思っている。


これはなかなか書けたぞ!というエントリが必ずしもブクマを集めるとは限らない所も悩ましいし、面白い。

blog.magnolia.tech

これなんかかなりの渾身のエントリだったんだけどなーと思ったり。

まぁでも、栗林健太郎さんに拾ってもらえたので、5000兆点でいいかな、とも言える。

2つ目のバグを見つけるためになにをすればいいか

バグを一つ見つけたら、たぶんあと30個は潜んでる、知っているんだ


バグに関して一番難しいのは、「正しくバグレポートを書くこと」ではないかと思う。

  • なぜそれがバグと思われるのか?
  • 何と比較しているのか?仕様書?思い込みではない根拠は?
  • 本来の期待する挙動は何なのか?
  • 再現するためのコードや条件は何か?
  • 改修の優先度や期限はいつか?

など……誤りを誤りと特定し、他の人に納得させるためには正確な情報と、それを表現する文章力が求められる。GitHubのissueのテンプレートの仕組みが年々整備されていくのをみても、いかに自由に書かせても正しく書けないか、よく分かる。

この辺りは最初の頃にシニアなエンジニアに散々直されて覚えていくものだと思う。


さて、次に難しいのは「2つ目のバグを見つけること」ではないか。見つけたバグは直すしかない。しかし、きっとマネージャーはそのバグレポートに対して、次の言葉を発するはずだ。

「他に類似のバグは無いの?調べた?」

そう、バグは一つ有れば、たいてい同じ原因で混入した類似のバグが、2つ目、3つ目とさらに潜んでいる可能性が高い。

そしてたいていバグは偏在しているので(当たり前だけど、バグは自然発生しないので、満遍なく分布するはずがない)、正しい観点に従って調査しないと探すのに無限の時間がかかってしまう。

ではどうやって二つ目のバグを見つけるか?その方法は極論すると3つではないか。

  • 直接原因に着目する 参照したドキュメントが間違っていた、仕様の解釈を誤っていた、レビューの指摘が間違ってた……間違いの原因が特定されれば、同じプロセスで作られた箇所にはどうようのバグが潜んでいる可能性が高い……そして、この手の原因は、作り込んだ本人であれば容易に思いつく

本人が思い付かないものはたいてい一貫性か、整合性の欠如だ。ただ、これらは既存の成果物だけを見てもなかなか抽出・特定ができず、検証のための成果物を作る必要がある。

  • 一貫性に着目する バグの内容が、”同じでなければならない要素”が同じでない場合、やはり”同じでなければならない要素”を全部抜き出し、”同じになっているか”検証する。

  • 整合性に着目する 例えば状態遷移の考慮漏れなどは、そもそも設計の整合性が積み上げられてないことが原因なので、状態遷移図やデータパターン図を書き出して確認する

そして、最後にこれがやってくる。

  • とにかく全部見直す 一番効果は低く、方法論でも無いのが「全部見直す」……これでバグが見つかることも当然あるが、観点が定まらず効率は悪い……これが単に説明責任上の行為にならないように注意する必要がある……ただし、上位のエンジニアを連れてくる口実にはなるかもね:)

2つ目のバグを見つけるのは、全体を把握し、プロセスの適切性や、一貫性、整合性が担保されていなければならないポイントを掴む必要がある。


なお、一つ目のバグを特定し、レポートし、修正し、管理し、未来において類似のバグを発生させないための教訓を残す方法については、名著『デバッグの理論と実践』という本が有ります。ちょっと厚いなーとは思いますが、全部網羅されてて、エクササイズには良い本です。半年くらいかけてでも読みましょう。

音楽サブスクリプションサービス時代に、もう一度かつて買い集めたディスクガイドを引っ張り出す

Suburbia Suite―Future Antiques

Suburbia Suite―Future Antiques

2000年代前半にいわゆるディスクガイドみたいな本をたくさん買ってた時期がある。あの頃、おそらく渋谷系を通過した人たちが社会に出て、渋谷系の元ネタだったソフトロックなどの名盤をリイシュー盤する企画を通したり、積極的に買ったりすることができる年代、経済的余裕が有るゾーンに突入していったからじゃないかと勝手に思っている。そして、リイシュー盤と共に、ディスクガイドもたくさん出版されていたように記憶している(あと、コンピレーションアルバムもすごく充実していた)。

当時、近所にあった古本屋さんで、棚の一角だけ明らかに特定スタッフの趣味と思われる異様に充実したリイシュー盤新品CDが並ぶコーナーが有って、よくそこでSmall Circle of Friendsや、Salt Water Taffyや、beach boysのアルバムを買い漁っていた。

それぞれの筆者の(当時はたいていDJだった)独自の視点で切り取られ、カタログとして並んだ曲の数々……ジャケットとその解説を見るだけでもいくらでも読み耽ることができた。

ただ、リイシュー盤も気になった音源がすべて買えるわけでもないし、ディスクガイドや、コンピレーションアルバムで気になった一曲を元にアルバムを買ってみると案外その1曲以外はあまり良くない、ということも多かった。

また、取り上げられている音源は、ディスクガイドという性質上どうしても古いものもたくさんあるし、レアな(紹介されてもそもそも誰も買えないような)作品も多かった。

そして、2021年時代はサブスクリプションで定額聞き放題になったので、改めて当時のディスクガイドに載っている曲を検索してみると、それなりに揃っていることに気がついた。

というわけで、古本屋に行って、ディスクガイドを買い漁って、音楽サブスクリプションサービスで検索しまくると、とても良い音源に出会えるのでおすすめです。

TECHNO definitive - NEW EDITION - (ele-king books)

TECHNO definitive - NEW EDITION - (ele-king books)

  • 発売日: 2021/03/03
  • メディア: 単行本(ソフトカバー)

コードとビジネスの距離は近いのか、遠いのか

noteで書いた記事からの転載

なお、まだ焼肉は奢られていません


「コードとビジネスの距離」というテーマで焼肉5回食べれるくらい語るためには、どんなことが話せそうか考えてみた。

  • コードはビジネスの写像であるか?または、そうあるべきか?

  • コードとビジネスは相互に影響を及ぼす、という現象

  • エンドユーザーコンピューティングについて

  • コードからビジネスに近づくアプローチと、ビジネスからコードへ近づくアプローチ

  • コードと、データと、運用と

お腹いっぱいになれそうな気がしてきたぞ。

結局は、複雑なビジネス要求が有ったときに、コードはどうやってそれを実現していくのか、そして実現しないのかって話なんだけどね。

要望が有れば一つ一つ書いて行こうと思います。

焼肉奢ってください。