私は3か月前にプロジェクトに取り組んでいましたが、突然別の緊急プロジェクトが現れ、注意を向けるように頼まれました。
明日から、古いプロジェクトに戻ります。私は自分が何をしていたかを正確に覚えていないことに気付きます。どこから始めればいいのかわかりません。
振り返るときはいつでも、離れた場所から数分以内にプロジェクトを文書化できます。ベストプラクティスはありますか?
私は3か月前にプロジェクトに取り組んでいましたが、突然別の緊急プロジェクトが現れ、注意を向けるように頼まれました。
明日から、古いプロジェクトに戻ります。私は自分が何をしていたかを正確に覚えていないことに気付きます。どこから始めればいいのかわかりません。
振り返るときはいつでも、離れた場所から数分以内にプロジェクトを文書化できます。ベストプラクティスはありますか?
回答:
私はあなたの現在の状況では役に立たないだろういくつかのアドバイスを提供したかっただけですが、将来のために今すぐ実装を開始できます。
もちろん、todoリストや問題ログなどの明らかな候補があります。最近追加された問題を見ると、プロジェクトを中止したときに何をしていたのかがわかります。
私が取り組んできた以前のプロジェクトでは、品質管理プロセスの一環としてプロジェクトログを保持することが求められていました。内容はあまり明確に指定されていませんでしたが、そのアイデアは、将来の継続的な作業や完了時のレビュー活動に役立つかもしれないプロジェクトに関連するものの毎日のログを保持することでした。例えば:
プロジェクトの品質に関する観察
このコードはリファクタリングを使用できます
これを機能させるために簡単な実装を行いましたが、ABCの方が良いでしょう。
課題トラッカーに正式に記録したくないTodoアイテム/課題
「このメソッドを機能させる必要
x < 0
がありますが、現在は範囲外です。
設計上の決定 -特に重要な決定。
標準の並べ替え関数はクイックソートを実行しますが、ここでは必要な並べ替え条件の下でアイテムの順序を保持しません。
明らかなアルゴリズムはABCですが、
x
ネガティブになる可能性があるためここでは失敗します。そのため、一般化された形式(Wikipediaリンク)が必要です。
発生した問題とその解決方法。私個人の意見では、非常に重要なことです。問題が発生した場合は、ログに記録してください。
コードをチェックアウトしましたが、エラーXYZ0123が発生したため、最初にコンポーネントCをバージョン1.2以降にアップグレードする必要がありました。
後者の2つのポイントは非常に重要です。私はよく似たような状況や問題に遭遇しました-時には完全に異なるプロジェクトで- 「うーん、これに1日を費やしたことを覚えていますが、再び解決策は何ですか?」
しばらくしてプロジェクトに戻ったときに、プロジェクトログを読み返すと(自分のものでも最新の開発者のものでも)、離れたときのフローに戻り、いくつかのトラップについて警告する必要があります。さもなければ再び落ちるかもしれません。
To Doリストは魔法です。一般に、プロジェクトごとにアクティブなTo Doリストを保持する必要があります。プログラミングに忙しいときでも、何かしなければならないことを考えてすぐにできない場合は、リストに追加します。このリストは、プロジェクトフォルダー内のスプレッドシートまたはテキストファイル、または紙のログブックなど、よく知られた場所に保管してください。
また、プロジェクトを夜通し(または週末に)離れる場合は、ポストイットメモを取り、そのメモに次にすることを書き、それをモニターに貼り付けます。これにより、翌朝すぐに戻ってくる可能性が高くなります。
編集:
私は、to-doリスト(特に、開催地とプロジェクトごとに分けられた優先順位付けされたto-doリスト)が、Getting Things Doneブックの重要な部分であり、非常に影響力があると感じました。
todo
それらをダンプし、あなたのメイクファイルにターゲットすることも有用です。
さて、明日から私は古いプロジェクトに戻り、自分が何をしていたのか、どこから始めたらいいのか覚えていないことに気付きます!
私の推測では、あなたは次のセクションのいずれも行っていません。そのため、todoリストの検索は機能しません。
プロジェクトを文書化する方法を知りたいので、振り返るときはいつでも、離れた場所から数分で行くことができます!
まず、todoを追跡するシステムが必要です。そのようなシステムは今ありますか?現在のプロジェクトワークをどのように管理していますか?
明日はバスにぶつかる可能性があり、私のチームはアクションアイテムの90%をはるかに超える良いアイデアを持っているでしょう。これは、次のことを文書化するための凝集システムがあるためです。
さらに、VCSを使用し、必要に応じてコードをコメント化します。
私は主な開発者であるため、これは私と私のチームに有効です。チームで何らかの問題追跡システムを使用できます。または、アジャイルで作業する際のバックログ。たくさんのオプションがあります。これに本当に興味がある場合は、Getting Things Doneまたは他の関連するタスク管理方法論を読んでください。これは、あなたが説明していることによりほぼ正確に存在します。
システムの詳細は、それが凝集システムであるよりも関連性が低いため、使用します。そしてそれを使用すること。そしてそれを使用します。これは重要。使用しない素敵な完璧なシステムよりも重要です。「私の仕事の大部分はここにあるが、一部は私の頭の中にある」ことをしないでください。そうしないと、プロジェクトに戻ることを嫌います。
また、コードの「何」だけではなく「なぜ」をコメントで説明するようにしてください。「これはIE8のバグを修正することです」と読み、技術的な詳細を単に説明するコメントよりもコードが何をするかを思い出す方がはるかに簡単です。
私の意見では、コードプロジェクトを「再開」するには2つの部分があります。
これは、バージョン管理を正しい方法で行っている場合、それが「他の頭脳」になることの1つです。
どこでやめましたか?コードを頻繁にコミットしている限り、最後の変更セットを確認してください。それはおそらくあなたの心の中で何かをジョギングします。そうでない場合は、最も古いコミットから順に、過去のいくつかを見てください。
左何をしなければならない、バックログは、その目的役立つはずである(またはto-doリスト、または何でもあなたはそれを名前を付けたいの。将来のための基本的項目)。
私はフルタイムのソフトウェア開発者ではありません。私は夜と週末にハッキングするプログラマーです。このため、仕事やその他のプログラミング以外のものが優先される場合、コードをひと目でプルアップすることなく、何日も何週間も行くことができます。上記は非常に効果的であることが証明されています。
これは完全な答えを意図したものではありません。VCSやプロジェクト管理ソフトウェアの使用方法など、重要なことを言及している非常に優れたものがすでにいくつかあります。他の人にも役立つと思います。
人々は通常、TODOは、彼らが行う予定のもののために示しています作る将来的には、しかし、プログラミングは濃度を必要とするため、私たちは中断することができますので、任意の時点で、私が書き留めて、それが役に立ったと評価していました、私が今やっているにも何または数秒で開始しようとしているもの。あなたは、ゾーンにいると感じて、あなたはおそらくそれだけであなたを打つそのソリューションを忘れることができなかったのAHAの瞬間が、あなたの同僚はあなたに彼の感染つま先の画像を表示するためにあなたのキューブによって低下したときに、あなたがしています自分の腕をかじり始めてようやく彼を取り除くことができるようになったのは、Post-It™のメモだけであったとしても、簡単なメモを書き留めておいたほうがよい場合があります。
もちろん、他のより永続的なメディアの方が良いかもしれません(私はOmniFocusが特に好きです)が、20分で終了してPost-It™を捨てたとしても、少なくともどこかにあることがポイントです。その情報が有用になること、クライアントにタイムシートや請求書を貼ったり、上司/クライアントがあなたが何に取り組んでいて覚えていないかを尋ねられたときに気づくかもしれません。これらすべてのメモをボックス、引き出し、またはフォルダーにドロップすると、大きな中断(中断プロジェクト)が発生したときに、それらを一目で確認して、コードを取得するために行った多くのことを思い出すことができますプロジェクトに戻ったときに見つけてください。
机の横に3 "x 4"のホワイトボードがあるので、プロジェクトを開始するときに、プロジェクトで感じるすべての問題の解決策をブレインストーミングできます。それは、アーキテクチャ図、ユースケース、リスクと障害のリスト、またはあなたに関連があると思われるものです。
より形式化されたアプローチでは、紙または電子形式の「成果物」として図やユースケースなどを生成する必要がありますが、それにより多くの余分な作業が発生し、一連のサブプロジェクトになりますメインプロジェクトの実際の目的から離婚し、あなたがしなければならないが誰もあまり注意を払わない正式なプロセスのほんの一部です。ホワイトボードは、少なくとも私の経験では、実際に機能する最も単純なものです。それはあなたが望むように(カメラで)永続的であり、最も重要なことはあなたがすぐにあなたのアイデアをダウンさせることを可能にします。
ペンを手に持ったほうがいいと思うので、白い面に思いを投げかけるのは自然に思い浮かびますが、それがあなたに当てはまらない場合は、関連するものを判断するのに役立ついくつかの質問があります:
(最初にアイデアを書き留めるとき、私はそれらが現在の自分に意味をなすことだけを心配します。いったんアイデアが落ちたら、私はそれらをより批判的に見て、変更を加えて自分の将来の自分や他の人に意味を持たせることができます。最初に書き留めるときに他の人とコミュニケーションを取ることは、作家のブロックにつながる可能性があります-競合する目標によって詰まった心。
少なくとも3 "x 4"のまともなホワイトボードを購入し、通常作業をしているスペースに掛けるためにお金を使うことをお勧めします。物理ホワイトボードには、仮想システムと比べて多くの利点があります。
会議室でホワイトボードを使用し、携帯電話でスナップショットを撮ると、多くの利点が失われます。プログラミングでお金を稼ぐなら、まともなホワイトボードのコストに見合うだけの価値があります。
あなたが別のプロジェクトを持っている場合は、あなたのホワイトボードを埋めたものを中断し、あなたの携帯電話上のスナップショットに頼る必要があるかもしれませんが、少なくとも、あなたは持っているだろうことを 3ヶ月で「緊急」プロジェクトが終了したときに、あなたがする必要があります他に戻ります。ホワイトボードで再作成する場合は、おそらく15分しかかからず、プロセスで大幅に改善できる可能性があります。これにより、わずかな時間の投資が非常に価値があります。
飛行機のメタファーは役立つと思います。プロジェクトの開始と完了は飛行機の飛行に似ています。フライトの途中で脱出した場合、飛行機は空中に座って戻ってくるのを待つだけではなく、現在のプロジェクト/フライトから次のプロジェクト/フライトまで移動する何らかの方法が必要です。実際、フェニックスからファーゴへのフライトの途中で、デンバーからデトロイトへの別の飛行機に乗るためにそのフライトを中断する必要があると言われた場合、デンバーに最初の飛行機を着陸させる必要があります幸運にもあなたの飛行経路からそれほど遠くない-実際の中断が常にそうであるとは限らない)そして誰かが貨物と乗客をどうするかを理解しなければならない。彼らはただ座って永遠に待つのではありません。
プロジェクトのこの点は、あるプロジェクトから別のプロジェクトに移行するのに多大な時間を費やし、対処しなければならない多くの損失を残すことです。
このプロジェクトでは、あなたが仕事をしながら、あなたの頭の中に行くたくさん明らかにし、必然的にそこにあるすべての考えはない書かれたメディアにシリアライズすることができ、そしてないそれらの思考のすべてのイオタある直列化復元時にシリアライズさが残りますが。書面で自分の考えを部分的に捉えることはできますが、非常に損失の多い形式です。
問題(私が見るように)は、プロジェクトマネージャーや他のビジネスパーソンがプロジェクトを一連のステップと見なし、しばしばガントチャートに明示的な依存関係がない限り)順序を並べ替えることができ、人々の間で簡単に配布できることですまたはビジネスにとって最も便利になるまで遅らせます。
プログラミングを何度も行ったことのある人なら誰でも、ソフトウェアプロジェクトをレゴブロックのように扱うことができず、好きなように移動できることを知っています。少なくとも、空の旅の比theは、利害関係者が、気まぐれに並べ替えられる一連の異なるステップとして明確に扱うことができないことを考えることができる具体的なものを与えると思います。少なくとも、このような中断にはコストがかかるという点を理解しやすくします。もちろんそれは彼らの決定ですが、あなたは彼らがあなたに別のプロジェクトを与えるために1つのプロジェクトを中断する前にこれを認識させたいです。闘争するのではなく、役に立つ情報と開発者の役に立つ視点を提供し、あなたから必要なことは何でもできるようにしますが、伝えなければ知らない情報を提供するだけです。
3か月前のバージョン管理ソフトウェアでプロジェクトの履歴を調べることができます。コミットメッセージと最新のdiffを読んで、何に取り組んでいたのかを把握してください。
問題管理システム(RedmineやGitHubなど)と組み合わせて、適切な分岐およびマージ戦略を備えたソース管理システムを使用すると、行った変更を区分化し、方向性を与え、欠落している「コンテキスト」を次のように文書化できます。ワークフローの自然な部分。
たくさんの長い答えがあります。これは私に最も役立つものについての短いものです:
ただし、Diffs、Commitコメント、Post-It notes、Todo-Lists、またはKanban-Boardは、コンテキストがないために時間の経過とともに誤って解釈される可能性があります。したがって、最も重要なことは次のとおりです。
main
。これは、かなりのサイズのプログラムではかなり抽象的です。その後、さらに深く掘り下げて、たとえばプログラムがそれ自体をクリーンアップする方法のアーキテクチャを確認できます。さらに、クリーンなコードとは、関数/変数/などを意味します。意味のある名前を持ち、その意味について声明を出す。私が代わりにSpaghetti / Write-Only-codeを書く場合、翌朝/月/年に目を覚まし、自分のコードを見ると、wtf-did-i-do-thereしか考えられません。それは同じだ...
振り返るときはいつでも、離れた場所から数分以内にプロジェクトを文書化できます。
まず、これはプロジェクトにいくつかの高レベルの説明とコード構造があり、数分で簡単に把握できることを意味します-明らかな構造とコメントのない無数のコード行とは対照的です。
ベストプラクティスはありますか?
以下は、非常に小規模から非常に大規模なプロジェクトで20年以上のキャリアを通じて採用したベストプラクティスであり、私と私のチームに役立っています。プロジェクトの成長に応じて、リストされている順に適用します。
バージョン管理を使用すると、何がいつ、誰が変更を適用したかを無料で追跡できます。また、いつでも以前のバージョンに簡単にフォールバックできます。
コードをモジュール化します(言語とプログラミング環境に応じて、クラス、モジュール、パッケージ、コンポーネントを使用します)。
コードを文書化します。これには、各ファイルの上部にある要約ドキュメント(これは何をするのか、なぜ?どのように使用するのか)、および関数、プロシージャ、クラス、およびメソッドのレベルの特定のコメント(何をするのか?引数と戻り値/型?副作用?)。
TODO
FIXME
コーディング中にコメントを追加します。これは、コードベースに必然的に入り込み、後でWTFを要求するという癖の理由を思い出すのに役立ちます。。例えば:
//TODO shall actually compute X and return it
... some code that does not compute X yet (maybe returns a fixed value instead)
//FIXME make this constant time instead of n^2 as it is now
... some code that works but is not efficient yet
図を描くの習慣作り、私が好む、このような個人的にモジュール/オブジェクト/システム間での通話などのシーケンスとして文書構造と複雑な振る舞いをしUMLetをそれを使用するために迅速であるとして、素晴らしいグラフィックを作成し、そして最も重要なのはあなたの方法で取得していません。しかし、もちろん、あなたが仕事をするのを見つけるどんな描画ツールも使うべきです。このような図面の目的は、システムを詳細に指定することではなく、簡潔に伝えることであることに注意してください(!!)。
早い段階で単体テストを追加します。単体テストは、回帰テストに適しているだけでなく、モジュールの使用法のドキュメントの形式でもあります。
コード外部ドキュメントを早い段階で追加します。プロジェクトの実行と開発に必要な依存関係、インストール方法、実行方法を説明したREADMEから始めます。
反復的なタスクを自動化する習慣を作ります。たとえば、コンパイル/ビルド/テストサイクルは、何らかの形式でスクリプト化する必要があります(JavaScriptの使用grunt
、Python fabric
、JavaなどMaven
)。これにより、戻ってきたときにすぐに慣れることができます。
プロジェクトの成長に伴い、ソースコードドキュメントを生成してドキュメントを追加します(何らかの形式のJavaDocスタイルのコメントと、そこからHTMLまたはPDFを生成する適切なツールを使用します)。
プロジェクトが単一のコンポーネントを超えて成長し、より複雑な展開を行う場合は、設計とアーキテクチャのドキュメントを必ず追加してください。繰り返しになりますが、この目的は、詳細ではなく構造と依存関係を伝えることです。
プロジェクトの追跡、ToDoリスト、Trelloなどに関する提案に加えて、TDDを実践している場合は、プロジェクトに戻るたびに実装する新しい失敗したテストで常にプロジェクトから離れることが役立ちます、来週、または来月)
座って「テストの実行」を行い、中断したところから再開します。
next-steps
ます。リビジョン管理アプローチの詳細についてのあなたの懸念が、何かに戻ったときにあなたの脳をキックスタートする助けとしての失敗したテストの基本的な前提とどう関係するのか分かりません。ここでも、これは、などのバックログ、TODOリストなどの標準的なアプローチに加えて、提案された
私は自分がやった仕事の日記を毎日つけています。今日は何をしましたか、今日は困難でしたか、次のステップは何でしたか、未来のために今日どんなアイデアを持っていましたか。また、その日がどのようなものだったかについても少し説明します。興味深い会話や会議はありましたか?怒りや喜びがありましたか?これは、後で日記を読むときに物事を把握するのに役立ちます。
しばらくしてプロジェクトに戻ったときに、ジャーナルの最後のいくつかのエントリを読んで、プロジェクトの速度を確認しました。開発プロセスを思い出すには、これらの日々の詳細がすべて非常に重要です。彼らは、製品の使い方だけでなく、プロジェクトでの作業がどのようなものであったかを思い出させるので、todoリストや通常のプロジェクトドキュメントと比較して、大きな違いをもたらします。
私にとって、プロジェクトを再開する最も簡単な方法は、作業に関するメモを常に記録することです。Microsoftの「OneNote」は、メモのページを保持およびグループ化するのに特に適していることがわかりました。特に、検索バーを使用すると、何かに関するメモをすばやく簡単に見つけることができます。
OneNote内で、プロジェクトの進行を再開するのに役立ついくつかのことを次に示します。
毎日/毎週のログ -毎日または毎週の進捗状況のログを保存して、プロジェクトですでに行った進捗状況を把握できるようにします。
To Doリスト -私は一般的なTo Doリストを持っていますが、私が取り組んでいるプロジェクト用に別のTo Doリストを保持して、プロジェクトのためにまだやっていることを覚えています。コードに// TODO:アイテムを残すこともあります。
プロジェクトノート -指摘事項には、問題/プロジェクトトラッキングアイテムへのリンク、コードスニペット、発生した問題、決定事項、解決策の計画と説明、コード変更のリスト、コードリポジトリディレクトリへのリンク、プロジェクトの電子メールおよびリンクが含まれますプロジェクトのドキュメント。
そのため、プロジェクトに戻るたびにメモを開くことができ、ほとんど瞬時にプロジェクトの進捗状況、残された作業量、思考の列を見ることができます。