蚌拠に基づいた蚈画

翻蚳者のメモ 元の蚘事は2007幎に曞かれたしたが、私の意芋では、今日でも完党に関連しおいたす。


゜フトりェア開発者は、䜜業蚈画を䜜成するこずを奜みたせん。 通垞、圌らはそれを完党に攟棄しようずしたす。 「終わったら終わりたす」圌らは、勇敢で陜気な行為がボスによっお承認され、蚈画がうたく忘れられるこずを期埅しお蚀う。



あなたが䌚う予定のほずんどは、゜りルレスな退䌚予定です。 完党に忘れられお、それらはある皮の共有ディレクトリに保存されたす。 数幎遅れお補品をリリヌスした埌、オフィスでファむルキャビネットを芋たず蚀う奇劙な男が、倱敗の理由を議論するために叀いリストを持ち蟌み、誰もが笑いたす。 「芋おください Rubyでシステムをれロから曞き盎すために2週間を蚈画したした」





ただ叫ぶ ただ浮かんでいる堎合。



最倧の利益をもたらすものに時間を費やしたいず思いたす。 そしお、どのくらいの利益が埗られるのかを理解するには、䜜業にかかる時間を知る必芁がありたす。 アニメヌションクリップず金融機胜の数の増加のどちらかを遞択せざるを埗ない堎合、各タスクを完了するのにかかる時間を知るこずは害になりたせん。



開発者がアクティビティを正匏に蚈画しないのはなぜですか これには2぀の理由がありたす。 たず、それは倧きなhemoです。 第二に、蚈画が珟実に察応するずは誰も信じおいたせん。 それでもうたくいかないのに、なぜ時間のスケゞュヌリングを無駄にするのか。



過去1幎間、フォグクリヌクの私たちは、最も肥満のプログラマヌでさえ協力するこずに同意したシステムを開発したした。 そしお、私が知る限り、それは非垞に正確なスケゞュヌルの䜜成に぀ながりたす。 このシステムは、゚ビデンスに基づいた蚈画、たたはDPず呌ばれたす。 このアプロヌチは、実行された䜜業の統蚈の分析に基づいお、 蚌拠が収集され、将来の蚈画を立おるために䜿甚されるずいう事実に芁玄されたす。 その結果、補品のリリヌス日だけでなく、各時点での䜜業完了の確率分垃の信頌曲線も取埗できたす。 次のようになりたす







曲線が急募配になるほど、特定のプロゞェクト完了日がより珟実的になりたす。

方法は次のずおりです。



1.共有...



個々の䜜品が数日たたは数週間で枬定されるスケゞュヌルを芋るず、意味がないこずを理解しおいたす。 蚈画されたアクティビティを、時間単䜍で枬定される非垞に小さなタスクに分割する必芁がありたす。 最倧16時間。



これは、本圓にやりたいこずを明確に理解するのに圹立ちたす。 サブルヌチンfooを䜜成したす。 ダむアログボックスを䜜成したす。 Fizzbottファむルを解析したす。 その結果、サブルヌチンを䜜成し、ダむアログボックスを䜜成し、ファむル解析を実行したため、䞀般的なタスクの時間を簡単に評䟡できたす。



䞍泚意に3週間のタスクたずえば、「Ajax Photo Editorの実装」を䜜成するず、本圓に䜕をしたいのかわかりたせん。 詳现に。 ステップバむステップ。 そしお、行動の正確な蚈画が考え出されるたで、あなたはそれがどれくらいかかるかさえ知るこずができたせん。



最倧タスク期間を16時間に蚭定するこずにより、このいたいたしい機胜を考慮せざるを埗なくなりたす。 しかし、「Ajax Photo Editor」ず呌ばれる3週間の仕事を終えるず、悪いニュヌスがありたす。この瞬間から、あなたは公匏に運呜づけられおいたす。 タスクを完了するための具䜓的な手順を考えるこずなく、必然的にそれらの倚くを忘れたす。



2.費やした時間を数える



正確な芋積もりを取埗するこずは困難です。 䜜業䞭のコンピュヌタヌにすべおを再むンストヌルする必芁がある堎合、仕事、予枬できない゚ラヌ、䌚議の蚈画、幎に数回Windowsサヌビスを提䟛する日からあなたを匕き離すあらゆる皮類のケヌスをどのように考慮するこずができたすか さお、どのように、これらすべおを知らなくおも、特定のタスクを完了するのにどれくらい時間がかかるかを正確に蚀うこずができたすか



実際、䜕もありたせん。



したがっお、タむムシヌトを保持しおください。 各タスクの䜜業時間を远跡したす。 したがっお、最初の掚定倀ず比范しおどのくらい時間がかかったかを振り返っお蚈算できたす。 開発者ごずに、次のようなデヌタを収集する必芁がありたす







グラフ䞊の各ポむントは、掚定リヌドタむムず実際のリヌドタむムを備えた1぀の完了したタスクです。 芋積りを実際のコストで割るず、芋積りず比范しおタスクがどれだけ早く完了したかがわかりたす。 時間が経぀に぀れお、各開発者の速床履歎を蓄積したす。





専門家が経隓を積むに぀れお、評䟡の質が向䞊したす。 したがっお、たずえば6か月よりも叀い环積速床統蚈を完党に削陀するこずをお勧めしたす。



ただデヌタを蓄積しおいない新しい評䟡者がチヌムに来た堎合、最悪の事態を想定したす-圌が半ダヌスの実際のタスクに察凊できるようになるたで、圌に幅広い速床で虚停の物語を割り圓おたす。



3.未来をモデル化する



補品の正確なリリヌス日を蚈算するために単玔にグレヌドを加算するずいう最初の誘惑に抵抗しおください。 それは正しく聞こえたすが、実際には根本的に間違ったアプロヌチです。 モンテカルロ法を䜿甚しお、倚くの可胜な結果を​​モデル化する必芁がありたす。 モデリングプロセスでは、数癟の可胜な将来のシナリオを䜜成できたす。 これらの結果はそれぞれ確率の1に察応したす。その結果、将来の各日付でプロゞェクトが完了する確率のグラフを䜜成する機䌚が埗られたす。



特定の開発者の予想される結果を蚈算するには、問題の各評䟡を、ステップ2で収集したこの開発者の統蚈からランダムに遞択した速床に分割する必芁がありたす。たずえば、







100回繰り返したす。各「合蚈」は確率の1に察応したす。これにより、特定の日付にプロゞェクトが完了する確率を蚈算できたす。



䜕が起こるか芋おください





もちろん、モンテカルロシミュレヌションの各ラりンドでは、時間ごずの情報を暊日に倉換する必芁がありたす。 各プログラマヌの仕事のスケゞュヌル、䌑日、週末などを考慮する必芁がありたす。 たた、プロゞェクトの各反埩は、最新の開発者が䜜業を完了したずきにのみ完了するずいう事実に同意する必芁がありたす-これだけがチヌム党䜓の䜜業の完了を意味したす。 そのような蚈算は非垞に綿密に行う必芁がありたすが、幞いなこずに、綿密な蚈算はコンピュヌタヌが䞊手くやるこずです。



匷迫性障害は必芁ありたせん


圌の釣り旅行に関する䞊叞の果おしない物語をどうするか たたは、明癜な理由もなく出垭を䜙儀なくされる営業䌚議ずは コヌヒヌブレむク 初心者が職堎を立ち䞊げるのを手䌝うために半日過ごしたしたか



ブレットず私がフォグクリヌクのためにこの手法を開発したずき、時間の損倱に぀ながるものを非垞に心配しおいたしたが、同時に事前に予枬するこずはできたせんでした。 堎合によっおは、盎接コヌディングよりも時間がかかりたした。 これを䜕らかの方法で考慮し、タスクスケゞュヌルに含める必芁がありたすか







もちろん、必芁に応じおそれを行うこずができたす。 そしお、蚌拠に基づいた蚈画は匕き続き機胜したす。



しかし、あなたはする必芁はありたせん 。



珟圚のタスクの実行時間に倱われた時間を単玔に远加した堎合でも、 DPは正垞に機胜するこずがわかりたす。 どんなに奇劙に聞こえおも、この堎合にDPを䜿甚するず、さらに良い結果が埗られたす。



小さな䟋を考えおみたしょう。 できるだけ単玔化するために、非垞に予枬可胜なプログラマヌJohnを思い぀きたす。Johnの仕事は、フィヌルドにアクセスするための1行のメ゜ッドを䜜成するこずです。 圌が毎日やるのは



private int width; public int getWidth () { return width; } public void setWidth (int _width} { width = _width; }
      
      





私は知っおいたす-これは信じられないほど愚かな䟋ですが、確かにあなたは䌌たようなこずに埓事しおいるプログラマヌに䌚ったこずがありたす。



それにしおも、各アクセス方法の実装には2時間かかりたす。 ぀たり 圌のタスクの実行時間の芋積もりは次のずおりです。



{2、2、2、2、2、2、2、2、2、2、2、2、...}



このかわいそうな人には、カゞキを捕たえるこずに぀いおの2時間の䌚話で絶えず圌を邪魔するボスもいたす。 もちろん、ゞョンは「カゞキに぀いおの退屈な䌚話」ずいうタスクを自分のスケゞュヌルに远加するこずもできたすが、それは政治的に近芖県的なものです。 代わりに、ゞョンは単に倱われた時間を珟圚のタスクに垰したす。 その結果、コストは次のようになりたす。



{2、2、2、2、4、2、2、2、2、2、4、2、...}



それに応じお速床



{1、1、1、1、0.5、1、1、1、1、0.5、1、...}



次に、䜕が起こるか考えおください。 モンテカルロシミュレヌションでは、各グレヌドが0.5で割られる確率は、ゞョンの仕事が䞊叞によっお䞭断される可胜性に正確に察応したす。 したがっお、 DPは正しいスケゞュヌルを䜜成したす



実際、 PDは、最も现心の泚意を払う開発者よりもはるかに優れた䞭断を考慮する可胜性がありたす。 それがずおもうたくいく理由です。 これは私が人々にそれを説明する方法です。 プログラマヌが䞭断されるず、圌は遞択に盎面したす



  1. 仕事のスケゞュヌルにすべおの䞭断を远加するこずで倧きな隒ぎを起こしお、経営者が釣りに぀いお話すのにどれだけの時間を費やすかを芋たり、
  2. 仕事のスケゞュヌルに远加するこずを拒吊し、その結果ずしお珟圚のタスクが空䞭に「ハング」するこずを拒吊し、 完党に正確な掚定倀を修正するものがないため、釣りに぀いおの愚かな䌚話だけで、 招埅するこずさえしたせんでした ...


...ずにかく、 DPは 、どのタむプのパッシブアグレッシブな開発者を扱っおいるかに関係なく、 同様の完党に正確な結果を提䟛したす。



4.プロゞェクトを積極的に管理する



すべおの蚭定が完了したら、プロゞェクトを積極的に管理しお、期限内にプロゞェクトを配信したす。 たずえば、タスクを優先床に埓っお゜ヌトするず、将来の䜜業を蚈画するのに圹立ち、必芁に応じお優先床の䜎い機胜を削陀できたす。







各開発者の完了予定日に関する分垃も確認できたす。







䞀郚の開発者この図のMiltonなどは、期限が非垞に䞍正確であるため、問題の原因になりたす。タスクのコストをより適切に芋積もる方法を孊ぶ必芁がありたす。 他の開発者Janeなどには正確な完了日がありたすが、プロゞェクトの完了が遅れたす。タスクの䞀郚を他の埓業員に移すこずを考える必芁がありたす。 䞀郚の開発者私倧䞈倫はたったくクリティカルパスではありたせん-圌らは攟っおおくこずができたす。



プロゞェクト境界


DPは、すべおを现かく蚈画しおいる堎合に最適です。 ただし、おそらくいく぀かの蚈画倖のものを実装する必芁がありたす。 新しいアむデアが登堎し、営業マネヌゞャヌはそこにないものを玄束し、取締圹䌚の1人は、GPSサポヌトずフィヌルドを暪切っお移動するゎルファヌの心電図を芳察する機胜を備えたゎルフモバむルアプリを実装する玠晎らしいアむデアを思い付きたす。 これはすべお、初期蚈画の準備䞭に予枬できなかった遅延に぀ながりたす。



理想的には、これらすべおのために特別なバッファを提䟛する必芁がありたす。 そしお真実は-あなたの蚈画にバッファを远加する



  1. 機胜に関する新しいアむデア
  2. 競争力のある察応
  3. 統合異なる開発者が䜜成したコヌドを1぀のシステムに結合
  4. デバッグ時間
  5. ナヌザビリティテストおよび最終補品でのテスト結果の䜿甚
  6. ベヌタテスト


したがっお、蚈画倖の機胜を実装するずきが来たら、い぀でも適切なバッファヌからピヌスを切り離しお、それを䜿甚しお䜜業するこずができたす。



しかし、倚くの新しい機胜が远加され、すべおのバッファが䜿甚されるずどうなりたすか さお、この堎合、 DPの助けを借りお取埗したプロゞェクトの玍品日は倉曎されたす。 しばらくしお倉曎を远跡できるように、各営業日の終わりに完了日の確率分垃のスナップショットを䜜成する必芁がありたす。







X軞で蚈算日をマヌクし、Yはプロゞェクトの完了日です。 図には3぀の曲線が瀺されおいたす。䞊の曲線は95の確率での結果に察応し、平均曲線は50に察応し、䞋の曲線は5に察応したす。 これらの曲線が互いに近いほど、プロゞェクトの完了の可胜性のある範囲が狭くなりたす。



完了日が絶えず遅れおいる堎合曲線が昇順、問題が発生しおいたす。 すべおが1日1日以䞊延期される堎合、既存の䜜業を完了するよりも早く新しい䜜業を远加したす。プロゞェクトは決しお完了したせん。 確率分垃がより密になる曲線が収束する堎合、これは実際に特定の日付に向けお出発するこずを意味したす。



ちなみに


プロゞェクト蚈画の長幎にわたっお私が気づいたいく぀かの事柄を以䞋に瀺したす。



1.䜜業を実行するプログラマのみが、䜜業に必芁な時間を評䟡できたす。 開発者に任せるこずなく、管理者がタスクのスケゞュヌルを䜜成するシステムはすべお、倱敗する運呜にありたす。 特定の機胜を実装するプログラマヌだけが、目暙を達成するために必芁なステップを知るこずができたす。

2.発芋された゚ラヌを修正し、元のタスクに費やした時間を割り圓おたす 。 発生する問題がわからないため、各゚ラヌを事前に修正するこずはできたせん。 新しいコヌドで゚ラヌが怜出された堎合、それを修正するのにかかった時間を、正しく実装されおいない元のタスクに割り圓おたす。 これにより、 DPは、 動䜜するコヌドだけでなく、 完党にデバッグされるたでの時間を予枬するのに圹立ちたす。



3.開発者に期限を短瞮するようプレッシャヌをかけさせないでください。 経隓䞍足のプログラムプロゞェクトマネヌゞャヌは、倚くの堎合、プログラマヌの䜜業を「やる気」にしお、タスクを完了するための優れた「き぀い」信じられないほど短い蚈画を立おるこずができるず考えおいたす。 この皮の動機は完党に脳みそだず思いたす。 スケゞュヌルに合わないずき、私は運呜づけられ、萜ち蟌んで、動機付けが党くないように感じたす。 公匏の蚈画を先に進めるずき、私は熱心で生産的です。 蚈画は心理ゲヌムの堎所ではありたせん。



マネヌゞャヌがこれを行う理由



プロゞェクトの開始時に、技術マネヌゞャヌはビゞネスマンず䌚い、タスクのリストを受け取りたす。 圌らの意芋では、玄3か月かかりたすが、実際には12です。䜜成のすべおの段階を考えずにプログラムを䜜成する堎合、垞にn時間かかりたすが、実際には4n以䞊を費やす必芁がありたす。 実際の䜜業スケゞュヌルを䜜成するずき、すべおのタスクをそれに远加し、プロゞェクトが圓初意図したよりもはるかに倚くの時間が必芁であるこずを理解したす。 これはビゞネスマンを混乱させたす。



無胜なマネヌゞャヌは、問題を解決するために人々をより速く働かせる方法を芋぀けようずしたす。 このアプロヌチには、珟実ずの接点がほずんどありたせん。 远加のスタッフを雇おうずするこずもできたすが、スピヌドを䞊げるには時間がかかりたす。その間、圌は50の効率で䜜業し、同時にトレヌニングを䜙儀なくされる埓業員の生産性を䜎䞋させたす。



スタッフを完党に燃え尜きさせるこずなく、 䞀時的に生のコヌドを蚘述する速床を10向䞊させるこずができたす。 小さな成果。これは、皮苗を食べるこずを連想させたす。 もちろん、人々にリサむクルを匷制するず、デバッグ時間が2倍になり、遅れおいるプロゞェクトはさらに遅くなりたす。 カルマから逃げないでください。



nから4nを取埗するこずも、取埗するこずもできたせん。成功したず思われる堎合は、䌚瀟のティッカヌを送信しおください。削枛したす。



vmaruninティッカヌコメントの解釈

「...ティッカヌを送っおショヌトさせおください」

ショヌトショヌトポゞションを開くずは、株を借りお売り、䟡栌が䞋萜したら株を買っお負債を返枈するこずです。

蚀い換えれば、Joelは、䌁業が開発期間を4nからnに短瞮できれば、すぐに取匕所に転萜するずいう事実に資金を投入する準備ができおいたす。





4.スケゞュヌルは朚補のブロックが入った箱です。 箱に入れるこずができない朚補のブロックがいく぀かあるず仮定するず、2぀の遞択肢がありたす。倧きな箱を取るか、いく぀かのブロックを取り陀くかです。 プロゞェクトを6か月で提䟛したい堎合、䜜業蚈画に埓っお12になりたすが、リリヌス日を延期するか、䞀郚の機胜を攟棄するだけです。 朚補のブロックを取り陀いお枛らすこずはできたせん。



特に、珟実的なスケゞュヌルの䞻な利点の1぀は、関数を匷制的に削陀するこずです。 なぜそれが良いのですか



2぀の機胜を思い぀いたず想像しおください。 最初の、非垞に䟿利なものは、補品を本圓に矎しくするこずができたす。 もう1぀は非垞に単玔であり、プログラマぱンコヌドできる瞬間を埅぀こずができたせん「芋お<blink>」。ただし、実際の利点はありたせん。



プロゞェクト蚈画を立おない堎合、プログラマヌはそもそもシンプルで興味深い機胜を実装したす。 その埌、圌らは締め切りを砎り、有甚で重芁な機胜を実珟するために配達日をシフトする以倖に遞択肢はありたせん。



実装の開始前にスケゞュヌルが䜜成されおいる堎合、いく぀かの機胜を犠牲にし、簡単で面癜いタスクを取り陀き、有甚で重芁なこずだけを行うこずを決定する必芁があるこずがすぐにわかりたす。 アプリケヌションの䞀郚の機胜を事前に砎棄するこずを匷制するこずにより、より売れるより優れた機胜のセットを備えたより良い補品を䜜成するのに圹立ちたす。



Excel 5で䜜業しおいたずき、予定されおいた機胜のリストは膚倧であり、リリヌススケゞュヌルからの非垞に深刻な遅れを瀺しおいたした。 「私の神」ず私たちは考えたした。「これらはすべお非垞に重芁なものです。 マクロ線集りィザヌドなしでどのように生きるのか”



結局のずころ、遞択の䜙地はありたせんでした。プロゞェクトの実装に絶察に必芁なもの以倖はすべお切り取りたした。 この決定は誰にも適合したせんでした。 どうにか萜ち着くために、砎棄された関数を完党に攟棄せず、それらの実装をExcel 6に転送しただけだず確信したした。



Excel 5が完成に近づいたずき、Eric Michelmanず私はExcel 6仕様の䜜業を開始し、Excel 5に実装する時間がなかった関数のリストを調べたした。 これは、想像できる最も䞋品な機胜リストの1぀でした。 それにリストされおいる関数はどれも実装に倀したせん 。 スケゞュヌルに合うように機胜を切り捚おるプロセスは、圌に提䟛できるプロゞェクトにずっお最高のサヌビスでした。 これが行われおいなかった堎合、Excel 5の実装には2倍の時間がかかり、半分は䞍芁ながらくたからなり、互換性のために時間の終わりたで維持する必芁がありたした。



おわりに


蚌拠に基づいた蚈画の䜿甚は非垞に簡単です。各反埩の前に詳现な芋積もりを準備するのに1〜2日かかり、特定のタスクで䜜業を開始したずきを蚘録するために毎日数秒かかりたす。 メリットは非垞に倧きく、珟実的なプロゞェクト蚈画です。



珟実的な䜜業スケゞュヌルは、優れた゜フトりェアを䜜成するための鍵です。 そもそも最良の機胜を実装するこずを奚励し、最終アセンブリに䜕を含めるかに぀いお正しい決定を䞋すのに圹立ちたす。 これにより、補品が向䞊し、䞊叞が幞せになり、顧客を喜ばせ、䜕よりも17:00に正確に家に垰るこずができたす。





メ゜ッド名の翻蚳を手䌝っおくれたtruezemezに感謝したす。




All Articles