私がメンバーになっている開発チームは最近、アジャイルの実践に従って作業するように適応しました。これにより、自分で金メッキコード(およびドキュメント)を止めることができず、結果として、当初の要件をはるかに上回って要件を満たすソリューションを提供できたときに、当初の見積もりを超えることができるという事実を個人的に強調しました。
私の倫理は、コードに執着しすぎて、リファクタリングしてn次のレベルに仕上げる前にリリースすることはめったにないという点で、強迫観念に接していると思います。これに気付いてうれしいですが、自分の進捗状況に満足するように態度や考え方を変えて、予定どおりにリリースするにはどうすればよいですか?
最高は十分に良い敵です
いつでも、より多くのテストを実行し、より優れたドキュメントを作成し、これらのコーナーケースを探し出し、機能が不足していると思われるものを記入し、アーキテクチャをよりきれいにすることができます。それは終わらない。しかし、それは終わらなければなりません。満たされなければならない期日、完成する製品の部分に依存する外部の制約があります。製品の1つの小さな部分で完璧さを追求することは、製品全体を傷つけます。
まず、この問題がもっと多くの開発者にあることを望みます。ソフトウェアが予想よりも遅くリリースされることになるのではなく、より高品質のリリースになる可能性があるためです。
独自の当初の見積もりを超えている場合は、見積もりの一部として「金メッキ」のステップを含める必要があるかもしれません。それらがあなた自身の見積もりではない場合、おそらくあなたはそれらを公式化することに関与すべきです。
いずれにしても、リリース期限がある場合は、それを守る必要があります。 「金メッキ」は、リリースを遅らせるべきではない最後のステップとして残す必要があります。それがリリースの一部として含まれている必要があると絶対に感じている場合は、自分の時間(つまり、稼働時間外)に「ゴールドメッキ」を追加することを検討してください。
あなたがすべきことは、あなたの「金メッキ」のステップをあなたのチームや経営陣に持ち込み、それらがなぜ重要であると思うのかを話し合うことです。これらのステップが有益であることを彼らに納得させることができれば、それらは将来のリリースの一部になるはずです。
金メッキソフトウェア
ソフトウェアの説明として金メッキが使用されているのを初めて見たのは Barry Boehmによる論文 で、彼は次の根本的な原因を述べました。
金メッキ。設計前の固定要件仕様は、ソフトウェアの金メッキを促進する傾向がありました。ユーザーが要件について尋ねたところ、「この機能が必要かどうかわからないが、念のため指定することもある」とよく言われます。
彼の説明では、 スパイラルソフトウェアライフサイクルモデル を含む彼の研究で説明されている方法を使用することをお勧めします。このプロジェクトでは、サイクルごとに1つのシリーズのプロトタイプを作成するようスコープが設定され、スパイラルが大きくなるにつれて、フル機能の製品。スパイラルはソフトウェア研究者の間で幅広い影響を及ぼし、滝とアジャイルの間の重要な架け橋でした。スパイラルの重要な制限は、スパイラルの周りで毎回、サイクルが長くなり、より高価になることです。
アジャイルの場合と同様に、スパイラルは、より狭い範囲でスコープを設定し、チームが要件を完了するのに十分な期間、プロジェクトの成果物をスケジュールすることで、金メッキを回避しようとします。スクラムのようなアジャイルメソッドが優れている1つの方法は、反復によって長くならない時間枠でスクラムスプリントを行うことです。論文によると、プロジェクト管理は個々の開発者よりも金メッキに大きな影響を与えるようです。
時間ボクシングの才能
タイムボックスを設定できることは非常に重要ですが、バイナリスキルではありません。あなたはそれを持っていないか、それを欠いています。あなたはそれが上手か下手か。それが上司からであれ、あなたからであれ、金メッキを止めることはできないと誰も言っていないなら私は好むでしょう。それは個人的、広範、そして永続的なものに聞こえます。
根本原因の分析は、いくつかの問題の特定に役立つ場合があります。私は彼ら全員があなたを指さないだろうと確信しています、そしてあなたがサイコパスで作業しない限り、あなたのチームの他の人々は彼らのアジャイルスキルセットを改善するために同様のニーズを見ることになるでしょう。問題なく誰かを知っているなら、あなたは彼らをあまりよく知りません。改善する必要がないと思っている人を知っていると、彼らは自分自身をあまりよく知りません。
あなたが特定した改善が、あなた自身の意識とチームからの助けによって解決できるものであることを願っています。しかし、これで終わりではありません。あなたのレビューを書いている上司またはマネージャーからの私の期待は、彼らが部下を成功させるよう指導することもできるでしょう。これは、計画からアジャイル(またはアドホックからアジャイル)への切り替えなど、組織が革命的な変化を遂げているときに特に重要です。
迅速でダーティまたはリスク管理のプロトタイプ?
ある方法でタスクを実行するよう要求していたマネージャーがいました。
速くて汚いが、美しさのもの。
彼はこれの愚かさを知っていて、それは彼の苦痛なユーモアのセンスの一部でした。多くの人々はこのようなことを言っており、彼らは真面目です。どこかに、改善されたテクノロジーまたはアプローチで問題を緩和する妥協または機会があります。
タイムボックスに合わせるために何を犠牲にできますか?
ケントベックは、第2版 Extreme Programming Explained の第1章で、速く動くために何が必要かについて語っています。彼の答えは、「お客様に価値を生み出すために必要なことだけを行う」ということです。
リスク
同じ本の初版で、ベックは次のように言って、リスクを制御することについてのベームの見方に彼の方法論にとって重要であるともう少し詳しく示しています。
「リスクはソフトウェア開発の基本的な問題です」
どちらのエディションでも、ベックは8つの一般的なリスクをリストして説明し、その後にXP(または拡張により、アジャイル)が特定の方法でそれぞれに対処するという主張が続きます。より小さな増分とより速い反復を使用することにより、リスクが大きくなりすぎて処理できなくなる前に、物事をコースに戻すことができます。
十分性のメンタリティ
ベックは、 山岳民族と森の人々 に関するストーリーのコンテキストでリソースについて議論し、「充足性の精神」と呼ばれる概念を紹介します。あなたの状況に関連して、彼は「十分な時間があったらどうしますか」と尋ねます。本のプレビューとして利用できるこの最初の1つの章だけが、XP(および他のアジャイルメソッド)が時間のような制約について考える方法について考えるための多くの食料を提供するかもしれません。
強制は病気ではなく症状であるかもしれません
何年も前に、先延ばしの多くは恐怖に起因すると述べた先延ばしに関する本を見ました。あなたが始めなければ、あなたはミスをしないし、多分あなたは批判されないでしょう。強要と完全主義は、私たちの道徳的感覚が私たちに先延ばしよりも優れていると告げるものを与えますが、おそらく同じ結果をもたらします。多分あなたは別の形で先延ばしに問題を抱えていると考えますか?
批評と競争
スクラムのようなアジャイル手法では、先延ばしのために批判または処罰される機会はこれまでになく高まっています。それは悪循環です。私は非難されているので先延ばし、私は先延ばしので非難されています毎日のスクラム会議では、達成したことをチームに報告する日から常に1日以内なので、常に警戒しています。
理想的なチームでは、スクラムは先延ばしを修正する機会を毎日与えます。助けが届くまでに、間違いが大きくなる時間はありません。チームは常に信頼できるべき場所ではありません。そのため、チーム内のリーダーは、物事が前進することを許可するために、批判または批判の恐れのいずれかに積極的に取り組む必要があるかもしれません。
私たちの仕事の世界では、チームの各人も他の人と競争する必要があります。仕事の成果と栄光を分かち合うチームを持つことを信じるのは少し精神分裂症ですが、その後、そのメンバーの20%に報酬を与え、メンバーの10%以上を処罰または追放する年間パフォーマンス管理プロセスを使用します。 70%の過半数がインセンティブなしでベストを尽くすと偽っています。これは部屋のWRTでチームワークを促進する大きな象だと思います。ケントベックの話を参照すると、山岳民族であることへの深い文化的つながりを示しています。
進むべき道
アジャイルチームのメンバーとして、何が機能するかについて研究し、他の人と対話することは良いことです。チームがTDDを使用してツールでユニットテストを自動化している場合は、最善を尽くして指導する人に相談してください。上司またはマネージャーが文書化のアプローチに問題がある場合は、上司またはマネージャーが好きな方法、または誰が好きな方法でそれを行っているかを調べ、彼らのアプローチに従います。それが生のコーディング速度に要約される場合、それがより速くコーディングするために必要なものを調査します。
リーダーは、自分の問題(他人の問題ではない)について率直に話し、チームがどのようにアジャイルマリンスタイルに移行できるか(つまり、誰もいません)残された)。チームの全員が同じ能力を持っているわけではありません。チームメンバーのペアリングを検討したり、関係する人々の補完的な強みを強調できるタスクや役割を割り当てたりすることが適切な場合があります。スキルの成長または改善を計画することは、上司と部下の両方にとって仕事のやりがいのある部分である必要がありますが、効果的であるためには早期かつ頻繁に行う必要があります。
あなたも楽しみのためにプログラムしますか?また、仕事でのプログラミングの面白さを制限する制約にも悩まされており、それを補うために、家で新しいプロジェクトを立ち上げて「正しく実行する」こともあります。この分割により、私のニーズと会社のニーズの両方を満たすことができます。
または、プログラミング以外の新しいスキルを開発して、オフタイムに(最終的には)ジョブが提供できないものを満足させることができます。 ;)