カテゴリー: Agile

  • XP本読書会10回目のふりかえりのふりかえり

    この記事は Agile459 retrospective for 2018 Advent Calendar 2018 のエントリーです。

    単一のコードベース

    読書会のときは、以前に手掛けたAndroidのカメラアプリが頭の中にあって、機種依存で苦労したことを考えていたのですが、今思えば他の仕事(ウェブサイト)でも派生させてそのままになっているコードも存在していて、このあたり一つに集約する努力が足りていないなぁとあらためて反省。

    今、この記事を書きながら考えているのですが、共通部分を派生させて使いまわすのではなくて、共通部分を完全に分離して、汎用的に使えるように作り込めば良いはず。今、すでに複数のプラグインでメンテナンスが必要になっている部分を切り出して汎用化する方向で検討してみます。

    交渉によるスコープ契約

    新規案件だと、過去の習慣もあってひとかたまりで見積もってしまいがち。部分的にリリースして、その状況で次のステップに進めるように、契約を分けておくと良さそうです。一つ一つの機能の価値を確認しながら進めていく感じですかね。

    (余談)読書会とは別の Code Kata について

    先月、GDCRを松山で実施したことがきっかけとなって、この1月ほど Codewars で Kata の練習をしています。(参考:最近の勉強ツールあれこれ

    レベルはまだ 6kyu で、問題も 7kyu の Fundamentals を中心に練習しているのですが、問題によっては解いているうちにプロパティやメソッド、変数の状態など強制的に使わされる感じのものがあったり、あるいは問題を解くと、他の人のコード例も見えるので、そこで自分のコードの拙さに愕然としたりという状況ですが、まぁとにかくとても良いトレーニングになっています。

    日常の仕事の中だとスキルアップに時間を費やすのはなかなか難しいかもしれません。ですが、適切なコードを書けるかどうかで効率とか品質は全然違ってくると思います。そのためには日常のトレーニングが重要。あまり難しい問題だと、続かないかもしれないので、比較的簡単な問題を様々な言語で引き続き進めてみようと思います。

  • インクリメンタルなデプロイ – XP本読書会9回目のふりかえりのふりかえり

    この記事は Agile459 retrospective for 2018 Advent Calendar 2018 のエントリーです。

    インクリメンタルなデプロイ

    ここでは失敗事例が結構なまなましく語られていて、とても強い気持ちが感じられるセクションです。規模の大きなシステムで長期間にわたって開発が続く場合、期日にまとめてリリースしようとしてたいていの場合失敗する。しかも、数ヶ月とか1年が過ぎると、そもそもの要望が大幅に変わって来たり。スケジュールが大幅に遅れて、かなり無理をして新たなシステムに移行したものの、個々の機能にあれこれ問題が発覚して、そのような状況で大幅な変更とか、まぁ対応できるわけがありません。ですが、なんだかよく聞くようなストーリーです。

    直前の「本物の顧客参加」にもつながりますが、部分的にでも使える状態にして、実際に使ってもらって、そのフィードバックをもとに次の機能を進めていく。その積み重ね。問題があれば、速やかに対応。日数が経過してからだと、対応にも時間がかかったりしますが、そうでなければ対応も比較的楽ですよね。そうして、ちゃんと機能するものが積み上がっていって、しかもこまめにフィードバックも得ているので、あるタイミングで大幅な変更で混乱、という事態にもなりにくいと思います。あるいは、多少大きめの変更が発生するとしても、それまでの実績があるので、その時点での変更コストが見通しやすい。

    チームの継続とか縮小とか

    チームを継続しながら適度なローテーション、てどうでしょう。意図してローテーションというのはあまりされていないような気もします。おそらくですが、個人のスキルに依存するばかりで、チームとしてのパフォーマンスに対する意識が低いのではないかと。対象とする分野とか業種によって、それぞれ要求されるスキルとかノウハウが異なるとは思いますが、それを固定化することがチームとか組織としてはたして良いのかどうか。例えば、ある分野で培ったノウハウを別のチームに持ち込んでみると、そこで新たな気づきにつながって、組織全体としてパフォーマンスが上がる可能性もあると思います。

    コードの共有

    個人の責任で追い詰めたところで何も解決しないどころか、時間のロスやモチベーション低下につながりますよね。チームでコードを共有して、チームで責任を持つと思えば、自然と個々のコードの品質も上がって、チームとしての評価も上がるはず。

    といった感じで今日はこの辺で終わりにします。

  • メトリクスとか – XP本読書会8回目のふりかえりのふりかえり

    この記事は Agile459 retrospective for 2018 Advent Calendar 2018 のエントリーです。

    メトリクスが気づきにつながることもある

    読書会のときに「数値化できていないなぁ」と書いておきながら、今、この記事を書きながら実践できていない(放置状態)ことに気がつきました。何か方法を考えないと…

    Git Webフック
    このあたりを活用してみるか…
    といいつつ、何もないところからスマートに行こうとして、結局何も進まないことになりそうなので、コミット履歴をもとにして、数値化できるものを手で拾うところから始めてみます。

    さて、プラクティスのマッピングについて。

    なるほど、気になるキーワードを書き出して、絵にしてみれば良いんですね。読書会の当時は、あまりピンときていなかったのですが、今になって腹落ちした感じです。普段だと、キーワードとか何か言葉なり文章なりを書くとしたら、こういうブログ記事でもそうですが、エディタとかで整然と書くだけで、それでは変化がなくて発見につながらない。そうではなくて、紙の上に向きや形を変えながらキーワードの関係を手で描いてみる。それを共有することでさらなる発見につながる。という感じですかね。

    ところで、この一連の読書会のふりかえりをしていて思ったのですが、一度読むとなかなか自分では解釈を変えられない、というか、思い込みのまま読み過ごしてしまうことが多い、ということです。せっかく良いことが書いてあっても、勘違いしたままで、後で読み直しても、最初の解釈のままだったり。あるいは、なかなか頭に入ってこないセクションがあったとして、やはり後で読み直しても同じ感じで、そのままやり過ごしてしまうとか。もちろん自分の読解力の問題もあると思いますが、でもこういう読書会であれば「自分はこう思うんだけど…?」と投げかけてみることで違う解釈が聞けたりすると学びになりますよね。

    あと、最近気になるのはアジャイルが △△ vs ○○ という構図で表現されることが多くて、アジャイル手法だと □□ だから注意しないといけない、というコメントなど。XPとかアジャイルとかの本で書かれているのは、過去の様々なプロジェクトでいろいろ問題があって、どこも同じような問題を抱えていて、それをどうやって改善してきたか、どうすればみんなが少しでも幸せになれるか、というノウハウの集大成のようなものだと思っています。もちろん、こうすれば必ずうまくいくということではなくて、状況に応じて何を適用するかという判断も必要と思います。ですが、アジャイルを否定するためのあら探しをしたところであまり生産には結びつかないと思います。もちろん、何か問題点に気がつけば対策を考えるなり改善していけば良いわけで。

    それと、自分の組織やチームの中だけでは気がつかないことも多く、こういうコミュニティの中でディスカッションすることで、いろいろと気づきや改善、プラクティスにつながったりするんだと思います。

    自分に言い聞かせるような感じで、なんども同じことを書いている気がしますが、ご容赦のほど。

    今日はこのへんにしておきます。

  • 主要プラクティス – XP本読書会7回目のふりかえりのふりかえり

    この記事は Agile459 retrospective for 2018 Advent Calendar 2018 のエントリーです。

    この時期にSlackでコミュニケーション取り過ぎの問題があって、今思えば自分の使い方も良くなかったと反省。どちらかというとプライベート寄りのチーム、仕事用のチーム、その中間的なチームに参加していて、通知を受けたり書き込んだりする時間帯の切り替えができていなかった感じです。
    今でも切り替えができていないので、通知とかステータスの設定を見直してみます。

    Slack 通知の仕組み
    おやすみモードによる通知の一時停止

    さて、まずはペアプロについて。

    Agile459ではこれまでにGDCRを3回開催していて、昨年のAgile Japanサテライトではモブプログラミング、そして今年の夏にはTDDBCも開催しましたので、ペアプロの有効性についてはコミュニティの中で共通認識が持てていると思います。ただし「ペアとパーソナルスペース」に書かれているような気配りについてはこれまで意識が低かったと反省。

    例えば、Wikiのまとめにも書きましたが、以前使っていたアウトドア用の腕時計。そのバンドの裏側に着け心地を良くするための皮が貼ってあり、どうやらその部分が汗臭くなっていたみたいで臭いを指摘されたことがありました。指摘されたときは分からなくて、その腕時計が故障して買い換えた時に、「あーもしかしたら腕時計のバンドの臭いで迷惑を掛けていたかも」と反省。

    自分では気がつかないこともあるので、ペアで作業する際の注意点などチーム内で話し合う機会が適宜必要と思いました。

    次に、ゆとり(Slack)

    最近、働き方が変わってきているようで、その中で、この「ゆとり(Slack)」の考え方が重要かもしれません。

    重要度の低いタスクを含めること

    とありますが、これは調整のために外す(対応しない)こともできるし、比較的簡単なものでも実現することで評価につながることもあります。臨機応変に対応するためのタスク。

    それと、毎日の仕事の中で集中というか効率よく仕事ができる時間は実際には割と短いものだと思います。タスクを詰め込み過ぎず、ゆとりを持って、それ以外の環境であるとか、スキルアップのための学びであるとか、そういう時間も日々確保することで、より質の高い仕事につながっていくと思います。

    そして、インクリメンタルな設計。

    新規に取り組んだものは、その時点で要件を満たすことができた試作レベルと割り切って、機能追加とか何らかの改修をする際に、気がついた時点でリファクタリングを進めていくことでより良いものに仕上がっていくと思います。もちろん、リファクタリングを進めるにはテストコードによる動作保証が前提になります。言い換えれば、テストコードによってシステム全体の動作確認が取れる状態になっていれば、いつでも気軽にリファクタリングに取り組むことができます。

    という感じで、今日はこのあたりまで。

  • XPのプラクティス – XP本読書会6回目のふりかえりのふりかえり

    この記事は Agile459 retrospective for 2018 Advent Calendar 2018 のエントリーです。

    第6章の冒頭に、

    「プラクティスとは、XPチームが日常的に行うものである。…」

    という説明があって、その後に「…、機械的な作業になってしまう。…」
    読書会の時にこの部分を読んで、過去に関わったプロジェクトで、テスト工程をペアで手作業で行うというなかなか残念なプロジェクトを思い出しました。のちの改修とか機能追加などを考えれば普通に自動化すべき部分だと思うのですが、リリース前のテストは手をかけて苦労することがルールみたいな感じでした。。。

    さて、読書会の議論のなかで「どのプラクティスが導入しやすいのか?」という話があって、いやおそらくそういう方法から入るんじゃなくて、何に困っているかという具体的な問題の洗い出しが必要で、それに対して、じゃあこのプラクティスをやってみれば、というようなやり取りがありました。

    あと、全員同席の部分。

    過去の仕事場を振り返ってみると、個人スペース、もしくはオープンスペースのどちらかはありましたが、両方を使い分けるような環境はなかったと思います。あと、オープンスペースといっても、単に机が並んでいるだけのごく一般的な職場なので、本に書かれている会議室を占有する感じのオープンワークスペースというのは心に刺さる部分でした。

    個人が集中して作業できる環境と、チームメンバーが集まってコミュニケーションをしながら作業できる環境。両方があるのがポイント。

    そして「チーム全体」の終わりのほうにある「タスクの切り替え時間」。
    いろいろ忙しくて、あれもこれもみたいな状況になるのを仕方ないとするか。いや、その切り替えにはどうしても時間がかかるので、できるだけ一つの仕事に集中できるようにスケジュールなり人員なりを調整するなど。

    この回の終わりは「いきいきとした仕事」でした。
    長時間働くのは良くないですね。以前は当たり前のように毎日遅くまで仕事をしていましたが、単に時間をかけてコードを書くよりも、できるだけ短時間で切り上げて、環境を整えるとか、こういう本で手法を学ぶとか、プログラミングのスキルを学ぶなど。それと、健康に配慮して体を動かすとか、そうやって生活の質を上げることで結果として仕事の成果も上がるようにしていきたいですね。

  • Agile459のコミュニティについて

    この記事は Agile459 retrospective for 2018 Advent Calendar 2018 のエントリーです。

    私自身、Agile459のコミュニティに参加して8年ほどになります。
    おもに @kkd 氏が中心となって、県外から講師を招いてセミナーを開いたり、Agile Japanのサテライトを開催したり、読書会(アジャイルサムライ、エクストリームプログラミング)を開催したりしています。

    参加するまではアジャイル開発についての知識がなく、キーワードとしては知っていたかも知れませんが、どう実践するとかそういうノウハウがない状態でしたが、毎年の様々なイベントの中で少しずつですが、自分の知識として身について、仕事の中で実践できるようになってきました。

    今の時代に対しては、自分の進歩のスピードに多少(?)問題があるかも知れませんが…(^^;

    少し残念なのは、その年々で参加者が入れ替わっていく感じで、継続して参加している運営スタッフもそれぞれ興味分野が違ったりするので、なかなかコミュニティとしての運営がまとまらない状況があります。例えば特定のプログラミング言語や技術に特化したコミュニティだと、わりと継続的にあるいは定期的に勉強会が開催されるようになってきてはいますが、アジャイルというキーワードだと、対象とする範囲が広すぎるのか、具体的な必要性が見えにくいのか、内容によってはたくさんの参加もあるのですが、イベントが終わると一気に疎遠になってしまう感じがします。

    前のエントリー 今年(2018)のAgile459のふりかえり の最後の部分にも書きましたが、自分の仕事の中ではなかなか変えることができない、あるいは気がつかないことが、外のコミュニティに参加することで気がついて改善につながったりすることもあると思います。仕事の進め方とか、開発方法とか、日常の仕事の中で何か疑問に感じるけれど、何となくそのままやり過ごしていることなど、もしあればAgile459のコミュニティに参加して議論してみると、何か発見があるかも知れません。

    あと、コミュニティの運営ですが、8年も経つとウェブサイトまわりもいろいろと変わってきて、見直しが必要な時期になっていると思います。ただ、これも仕事や家庭とは別の活動になるので、なかなか時間を取って進めるのは難しい。それと、中に時間が取れる人がいたとしても、その人ばかりが手をかけてしまうと、その人じゃないとわからない(弄れない)状況になってしまって、時間とともに破綻してしまう可能性もあります。このあたりも、せっかくのアジャイルのコミュニティーなので、うまくチームとして回せる環境を作ることができればと、ぼんやりですが考えています。

  • XP本読書会5回目のふりかえりのふりかえり – 機会とか品質とか責任とか

    この記事は Agile459 retrospective for 2018 Advent Calendar 2018 のエントリーです。

    XP本読書会の5回目は5章の後半でした。

    機会と失敗はつながる部分があって、失敗とか何か問題があった場合にネガティブになるんじゃなくて良い方向に向かせるための機会ととらえることがポイント。反省も必要だけどそればかりではしんどいですし、さらに大きな問題につながる可能性もあるわけで、そうならないうちに気がつけたと思えば良いんじゃないかと。テストケースを追加してみるとか、テストの仕方を変えてみるとか、機能自体を見直してみるとか。

    あと、失敗したら急いで対処するんじゃなくて、まず失敗した状況を共有。対処できたらまた共有。そうすることで落ち着いて対応できるし、時間がかかったらかかったでエビデンスにもなるし、のちの教訓とかノウハウにもつながると思います。

    次に品質について。

    仕事の中で品質を求めることができなくて(あきらめて)、プライベートで品質に対する欲求を満たしていたという話の中で「盆栽」というキーワードが上がって、「盆栽」といえば波平の「ばっかもーん!!」ですよね、みたいなところから脱線。まぁそれはそれで面白かったです。面白かったというか、オンライン読書会の中で一番脳が活性化した瞬間だったかもです。

    で、品質と責任の部分もつながると思います。誰かの成果物の品質がどうとか、誰かに責任を押し付けたところで、プロジェクト全体としては何の解決にもならないわけで、解決にならないどころかそれこそ時間の無駄。それよりも、プロジェクトのチームとして品質を良くしていくとか、責任を共有することが大切。そうすれば信用とか期待につながりますよね。

    本の内容とは少し外れますが、この頃に自分の課題として「リファクタリング」というキーワードがあって、なかなか進めることができていなかったのですが、


    このコメントがすごく良いヒントになって、仕事のタイミングと重なってリファクタリング進行中です。

    読書会に参加したことで、そういう課題意識を持てたし、継続的に考えることで実践にも繋がったと思います。

  • XP本読書会4回目のふりかえりのふりかえり – 自己相似性とか

    この記事は Agile459 retrospective for 2018 Advent Calendar 2018 のエントリーです。

    XP本読書会の4回目は5章の途中でした。この頃は参加者がわりと多くて、その分あまり進まなかった様子。
    それと、ディスカッションのまとめもSlackのタイムラインをWikiへコピペしていたので、ログがちょっとわかりにくい。後日、記録用にHackMDを使うようになりました。

    さて、自己相似性の部分ですが、あらためてその部分を読んでみると、わかりやすくて重要と思いました。

    • 四半期単位:テーマを選んでストーリー単位で組み立てていく。
    • 週単位:ストーリーを選んでテストを組んでいく。
    • 数時間単位:テストを書いて、実装していく。

    小さなループ(TDD)を繰り返して、ストーリーとして組み立てて、テーマとして完成させるような流れ。
    なので、小さなループがちゃんと回る(動く)のがポイントですね。

    あと、「ふりかえり」のところにあった「ソフトウェアプロセスばかり考えている」の部分。方法論にとらわれ過ぎて、生産性に繋がらないのはよろしくないですし、開発のことを考えるのは良いけれど、管理するために資料を作らないといけないとか、プロダクトとは直接関係のない物に対してリソースが消費されるのは避けたいですね。フラットなチームとかフラットな組織であれば、そのあたりの無駄も少なくなると思います。

  • XP本読書会3回目のふりかえりのふりかえり

    この記事は Agile459 retrospective for 2018 Advent Calendar 2018 のエントリーです。

    XP本読書会の3回目は4章から5章あたりでした。

    このあたりで思いつくのは人間性(Humanity)の達成感について。

    以前、VBとかC#で業務用アプリを開発していた頃、設計書を読みながらプログラムを書き進めていたわけですが、リビジョン管理やTDDができていない頃で、ソースコード中にコメントを書いて、今日はこの辺までできてこのあたりが未実装とか、プロジェクトフォルダをzipに固めてファイル名に日付を入れてアーカイブとして残したりとか、よろしくない仕事の仕方でした。

    そういうやり方だと、最終的にプログラムが完成するまで、ただただ不安な状況が続きます。「〇〇の機能ができていない」とか「△△はどうやって実装すれば…?」とか、そういうモヤモヤしたことがたくさんあるまま、中途半端な状態で切り上げて帰る日々。

    完成に近づいて、一通りテストができる状態になって、やっとそういうモヤモヤした雰囲気から少し解放される感じです。なので、仕事の中で達成感を感じることがとても少ない状態でした。

    それが、アジャイル開発を学ぶようになって、さらにTDDを経験することによってずいぶんと仕事の仕方が変わりました。比較的小さい単位で課題を設定して、テストコードを書いて実装して red -> green を繰り返す。課題が完了したら commit(push) して close して次の課題へ。

    こういうサイクルで仕事ができるようになったので、greenにするとかcloseするタイミングで都度達成感を感じることができます。課題管理の中で、必要になりそうな技術資料などメモっておくこともできますし、テストコードを仕様書と思えば、ソースコード内に必要以上にコメントを書くこともありません。

    もちろん、完成にたどり着くまでのプレッシャーとかストレス的なものは多少ありますが、それよりも従来と違って、日々の仕事の中でサイクルを回した分だけ小さな達成感を得ることができるので、気持ちよく仕事を終えることができますし、翌日のモチベーションにも繋がります。

    さらに、テストコードで何がどこまでできているかがすぐにわかるので、翌日とか翌週とか時間をおいてもスムーズに作業を続けることができます。以前のやり方のままだったら、今頃どうなっていたんだろうと。おそらくコードを書くのは難しくて、他の仕事をしていたと思います。

    とはいえ、まだまだ仕事の仕方について改善できることはいろいろあると思いますし、XP本を読んでいくらか理解できたとしても、実践はまだまだこれからです。なかなか自分だけでは実践までたどり着けないと思うので、コミュニティに参加しながらできることを進めていきたいと思います。

  • XP本読書会2回目のふりかえりのふりかえり

    この記事は Agile459 retrospective for 2018 Advent Calendar 2018 のエントリーです。

    4章のコミュニケーションについて。

    どんどん成果が上がらないが時間が過ぎていく。悪循環を思い出す。
    経験が浅いとコミュニケーションがうまく取れない。

    与えられた仕事は自分の責任でやらないといけないと思って、ディスプレイに向かってコーディングを進めようとするものの、スキル不足や課題の理解度の問題などで一向に進まない状況。
    最近であれば、バックログによる課題の管理やTDDで必要なものを小さく切り出して積み上げていくなど、仕事の進め方がずいぶん変わりましたが、昔はそのような方法を知らず、大きな課題を丸ごと完成させようともがいていたような気がします。そういうときは遠慮とかしている場合ではなくて、とにかく自分の手が進むようになるまで相談するべきと思いました。先輩はもとより後輩の新人がサクサク仕事を進めていたりすると、余計に自分で頑張らないと、と思ってしまいますが、上下関係なく、少しでも仕事の成果を出すにはどうすれば良いかを割り切って考えるべきだったのだろうと思います。

    コミュニケーションを取りすぎる人がいる。

    自分にも当てはまることではあるのですが、コミュニケーション重要、といってもそればかりで肝心の仕事が進まないのでは意味がなくて、程度の問題とは思います。ただ、昨年(2017)のアジャイルのサテライトで実践した Mob Programming をふりかえってみると、コミュニケーションの取りすぎも問題なくて、どちらかというと、チーム全員で議論しながらプロダクトが仕上がっていくような、そういうスタイルもあるので、コミュニケーションで問題になるのは1対1の場合かもしれません。1対1だとすべて問題、ということではなくて、1対1のコミュニケーションが長い時間続くと本筋から外れていることが多いですよね。

    と書いていると、このような記事のお知らせがメールで届きました。
    アジャイルなチームを改善するアイデア集「101 ideas for agile teams」で僕が学んだこと
    元の記事と合わせて読んでみようと思います。