職員の時間を最適化するための推奨事項
次の Azure Well-Architected フレームワークのコストの最適化チェックリストの推奨事項に該当します。
CO:13 | 職員の時間を最適化します。 職員がタスクに費やす時間をタスクの優先順位に合わせます。 目標は、成果を損なうことなく、タスクに費やす時間を短縮することです。 最適化作業には、ノイズの最小化、ビルド時間の短縮、再現性の高いデバッグ、運用のモックなどが含まれている必要があります。 |
---|
このガイドでは、職員の時間を最適化するための推奨事項について説明します。 この最適化は、勤務時間中にワークロードの設計、実装、運用を行う従業員の生産性と効率を最大化するための戦略的プロセスです。 これには、従業員が仕事に費やすすべての時間を最も効果的に活用できるように、従業員のスキル、強み、タスクを調整することが含まれます。 目標は、職員の可能性や能力が無駄にならないようにすることです。 職員の時間を最適化しないと、従業員の消耗、競争力の低下、生産性の低下につながるおそれがあります。
定義
相談 | 定義 |
---|---|
ノイズ | 実際の問題や傾向から注意をそらすおそれのある、無関係な情報や誤解を招く情報。 |
Signal | システムやアプリケーションの動作とパフォーマンスに関する洞察をもたらす、意味のある関連性の高い情報。 |
技術的負債 | 開発プロセス中にコードをより迅速に提供するために意図的に採用された非効率性、最適ではない設計上の選択、またはショートカットの蓄積。 |
主要な設計戦略
通常、職員にはワークロードで最も大きな費用がかかります。 職員のコストと価値を考えれば、効率的な時間管理が重要であることがわかります。 このガイドでは、勤務する毎時間の可能性を最大限に高める方法について説明します。 従業員が昼も夜もずっと働くことはできないので、各自が指定された時間内に、また短い勤務時間内でも同じように、より効果的に働けるようにすることが重要となります。 目標は、職員の時間をより適切に利用できるようにして、個人にとってもワークロードにとってもメリットを生み出すことです。
最適化ターゲットを設定する
職員の時間に関する最適化ターゲットを設定することは、明確かつ測定可能な目標を確立するプロセスです。 これらのターゲットは、タスクや機能に必要な改善を図るためのガイドラインとしての役割を果たします。 これらのベンチマークを使い、ターゲットに対して成果を評価することができます。 まず、職員の時間を最適化する取り組みの成功を測定するためのメトリックを定義します。 最適化によって達成したい具体的な目標を決定します。 目標の例としては、管理タスクに費やす時間を短縮することや、顧客からの問い合わせ対応にかかる時間を短縮することなどが挙げられます。 職員の時間に関する最適化ターゲットを設定するには、次の戦略を検討してください。
"定量的メトリックを選ぶ": 目標に合った、正確に測定できるメトリックを選択します。 節約された時間、生産性の向上、効率の向上、タスクの完了時間などのメトリックを検討します。
"定性的メトリックを収集する": 定量的メトリックに加えて職員からのフィードバックを収集し、各自の役割に対する満足度を測定します。 このフィードバックにより、職員の時間を最適化する取り組みが従業員の士気とエンゲージメントに及ぼす影響について重要な分析情報が得られる可能性があります。
"ターゲットを設定する": 選択したメトリックごとに現実的で達成可能なターゲットを設定します。 これらのターゲットは、現在のパフォーマンス レベルと目標の改善レベルに基づいている必要があります。
開発時間を最適化する
開発を最適化するには、ソフトウェア開発プロセスを改良して効率を高める必要があります。 その結果、開発者は、機能の改良、特定のワークロードの制約内でのイノベーション、そのワークロードに存在する固有の課題への対処により多くの時間を費やすことができます。
機能の無駄を省く
機能の設計とカスタマイズを行うときは、無駄を省き、シンプルさを維持します。 ワークロードの開発、テスト、保守に必要な時間を増やすおそれがある不要な複雑さや構成オプションは避けます。 ワークロードをシンプルに保ち、的を絞ることで、将来も簡単に適応および最適化できるようになります。
ビルド時間を短縮する
ビルド時間の短縮は、コンパイルとデプロイの生成にかかる時間を最小限に抑えるプロセスです。 ビルド時間が短いほど、開発者がビルドの完了を待つ時間が短縮され、コードの記述と機能の提供に集中できるようになります。 また、ビルド時間が短くなると、開発者はコード変更に対するフィードバックをより迅速に受け取ることができます。 迅速なフィードバックにより、より高速に作業を繰り返して問題を修正することができ、アジャイル開発モデルが促進されます。 ビルド時間が短くなるとビルドの頻度を増やせるので、チームで継続的インテグレーションと継続的デリバリー (CI/CD) などのアジャイル開発プラクティスを採用できるようになります。 ビルド時間を短縮するための戦略を次にいくつか示します。
"ビルド構成を最適化する": ビルド構成の設定を確認し、ビルド プロセスのオーバーヘッドが増える不要なステップやプロセスを排除します。 ビルドをチェックポイント処理し、部分ビルドを事前ビルドと組み合わせると、ビルド時間の短縮と効率の向上に役立つことがあります。 この方法では以前にビルドしたコンポーネントを再利用でき、必要な部分のみをビルドすればよいので、ビルドが高速になり、費やす時間を短縮できます。
"ビルド タスクを並列化する": 同時に実行できるタスクを特定し、それらを並列で実行するようにビルド システムを構成します。 利用可能なコンピューティング リソースを活用します。
"キャッシュを使う": 依存関係、中間ビルド成果物、その他の再利用可能なコンポーネントをキャッシュして、後続のビルドにおける冗長な処理を回避します。
"インクリメンタル ビルドを使う": 不要な再コンパイルを回避するため、ビルド システムがデプロイの前回のビルドから変更された部分のみをリビルドできるようにする手法を実装します。
"ビルド プロセスを分散する": 適用可能な場合は、ビルド プロセスを複数のマシンまたはビルド エージェントに分散して並列処理を使用し、全体的なビルド時間を短縮します。
"インフラストラクチャを最適化する": ビルドを処理するための十分なリソース (CPU、メモリ、ディスク I/O など) をビルド環境に確保します。
運用環境のモックを作成して使う
コンポーネントやサービスのモックを作成し、依存関係をシミュレートすることで、開発者はコードを分離して的を絞ったテストを行うことができます。 モックを使うことで、開発者は、実際の運用環境で再現するのが難しかったり実用的でなかったりする特定のシナリオやエッジ ケースを作成できます。 テスト サイクルを高速化し、並列作業を容易にして、依存関係のトラブルシューティングをなくすことができます。 運用環境のモックを実装する方法を次にいくつか示します。
"モック フレームワーク": モック オブジェクト、スタブ、またはフェイクを作成して依存関係を置き換えることができる、専用のモック フレームワークやライブラリを使います。
"依存関係の挿入": 依存関係の挿入を使用するようにアプリケーションを設計します。これにより、テストやデバッグ中に実際の依存関係をモック オブジェクトに簡単に置き換えることができます。
"サービスの仮想化": サービスの仮想化ツールまたは手法を使って、外部サービスまたは API の動作をシミュレートします。 これにより、開発者は実際のサービスにアクセスせずに統合をテストできます。
"構成駆動型のモック作成": 構成設定またはフラグを使ってアプリケーションの動作を変更し、必要に応じてモックを有効にすることができる、構成駆動型のアプローチを実装します。
"動的かつ条件付きモック作成": 動的かつ条件付きモック作成をサポートするようにアプリケーションを設計します。これにより、開発者は特定の条件やシナリオに応じて、実際のコンポーネントとモック コンポーネントを切り替えることができます。
開発環境を最適化する
目標は、開発者が変更に関する迅速なフィードバックを得ることです。 必要な技術上の変更を行って、開発エクスペリエンスを向上させます。
"コンテナー化": ワークロードをコンテナー化してローカルで実行することを検討してください。 コンテナーは、開発者が運用環境をローカルにレプリケートし、変更をすばやくテストするのに役立ちます。 繰り返し作業とデバッグの高速化が可能になり、開発プロセスがより効率的になります。 また、コンテナーによって、アプリケーションを実行するための一貫性のある分離環境が提供されます。 最後に、アプリケーションのスケーリングとデプロイも簡単になります。
"開発者ワークステーション": 最適な開発者ワークステーションには、適切な統合開発環境 (IDE) が必要です。 最適な開発者ワークステーションを用意すれば、開発者の効率が向上し、さまざまなタスクに必要な時間とリソースが削減されます。 優れた IDE には、プログラミング言語に合わせて調整されたコード補完と構文の強調表示が備わっています。 また、Git などのバージョン管理もサポートされているはずです。 IDE に適切な機能が備わっていれば、開発者は開発中に問題をすばやく特定して修正できるため、デバッグ時間が短縮されます。
"開発者向け環境": 開発者向け環境の制約が多くなりすぎないようにします。 開発者には、過度の制約なしにタスクを完了できるアクセス許可が必要です。それにより、効率的かつ効果的に作業することができます。
運用前環境を最適化する
一般に、運用前環境が運用環境に近いものであるほど、より多くの時間を節約できます。 このような一貫性の向上は、リスクを最小限に抑えるのにも役立ちます。 2 つの環境が近ければ、リリースの機能とパフォーマンスをより適切にテストおよび検証してから、運用環境にデプロイすることができます。 各環境が似ていることは、問題やボトルネックを早期に特定して対処するのに役立ちます。これにより、運用環境で問題が発生するリスクを軽減できます。
トレードオフ: リソース コストと職員の時間のバランスを取る必要があります。 環境が運用環境に近いほど、コストが高くなります。
コンポーネントとライブラリを再利用する
再利用可能なコンポーネントとライブラリを使うと、開発者は時間を大幅に節約できます。 コードの記述、テスト、デバッグを行う代わりに、検証済みのコンポーネントとライブラリを再利用して、より迅速にアプリケーション機能の開発や修正を行うことができます。 必ず、各コンポーネントやライブラリのドキュメントを用意してください。 コードとドキュメントを、GitHub などのバージョン管理を備えた中央リポジトリに格納します。
さらに、NuGet や Maven などのパッケージ マネージャーで使用できる、信頼できる発行元からのオープンソース ソフトウェアやライブラリを使用します。 これらのパッケージ マネージャーは、ライブラリにアクセスして管理するための一元的で信頼性の高いソースを提供します。 パッケージ マネージャーからの信頼できるライブラリを使うことで、生産性をさらに向上させ、コードの開発と保守に費やす時間を短縮できます。
技術的負債を除去する
技術的負債の除去は、健全で効率的なコードベースを維持するために不可欠です。 特定の標準に従い、品質ゲートなどのメカニズムを実装することで、技術的負債に効果的に対処し、コードの全体的な品質を向上させることができます。 このガイダンスをお客様の方法に組み込む方法を次に示します。
"技術的負債の解決に時間を割り当てる": 開発チームの時間の一部を、技術的負債の解決に割り当てます。 まずは、チームの時間の約 20% を技術的負債への対処専用に割り当ててみることをお勧めします。 専用の時間を割り当てることで、開発者はリファクタリング、コード クリーンアップ、コードベースの全体的な品質の向上に集中することができます。
"開発チームに権限を与える": 開発チームが技術的負債の解決の優先順位付けを管理できるようにします。 注意が必要なコードベースの領域を特定し、技術的負債がワークロードの機能に及ぼす影響を理解する役割に最も適任なのは、開発チームです。 チーム内でのオープンなコミュニケーションとコラボレーションを奨励して、技術的負債への対処を効果的に行います。
"優先順位付け": ワークロードの機能への影響に基づいて、技術的負債の各項目に優先順位を付けます。 ワークロードのパフォーマンス、保守容易性、スケーラビリティに最も大きな影響を与える問題に対処することに重点を置きます。 効果的な優先順位を付けることで、技術的負債を除去する取り組みの効果を最大限に高めることができます。
技術的負債の除去は継続的なプロセスです。 それには、予防的なアプローチと開発チームの継続的な取り組みが必要になります。 コードベースに特定の標準を設定してそれに準拠し、品質ゲートなどのメカニズムを実装することで、技術的負債に効果的に対処し、よりクリーンで保守しやすいコードベースを作成することができます。
"コーディング標準を設定する": コードベースに必要な構造、スタイル、ベスト プラクティスを定義する、明確で具体的なコーディング標準を確立します。 このような標準には、名前付け規則、コードの書式設定、ドキュメント、エラー処理などの領域を含める必要があります。 こうした標準に準拠することで、コードベース全体の一貫性と読みやすさを確保できます。
"品質ゲートを実装する": 品質ゲートは、定義されたコーディング標準を適用し、開発プロセスの早い段階で潜在的な問題を把握するメカニズムです。 自動コード レビュー、静的コード分析ツール、継続的インテグレーション パイプラインを含めることができます。 開発ワークフローに品質ゲートを統合することで、技術的負債になる前にコード品質に関する問題を特定して、対処することができます。
職員のコラボレーションを最適化する
職員のコラボレーションの最適化とは、チームのダイナミクス、コミュニケーション、知識の共有を強化するプロセスです。 誤解、重複した作業、無駄な時間を防ぐことが目標です。 これにはサイロの分割、不要な標準の改訂、共有ナレッジ リポジトリの作成、関連するトレーニングへの投資が含まれます。 効果的なコラボレーションにより、繰り返し発生するエラーを減らし、チームの集合的な専門知識を最大限に活かすことができます。 職員のコラボレーションを最適化するには、次の戦略を検討します。
"サイロを排除する": サイロは、共有された知識の不足やタスクの不要なレプリケーションにつながるおそれがあります。 部門間コラボレーションにより、時間を節約し、結果を向上させることができます。 部門間またはチーム間の障壁を取り除いて、部門間の協力を促進します。 部門間での会議、ワークショップ、共同プロジェクトを促進します。 チーム間でのオープンなコミュニケーション チャネルを奨励します。
"標準を最適化する": 不要な標準は、結果の向上につながらず、時間やリソースの無駄を生み出すおそれがあります。 価値を高めずにワークロードを増やしている標準やプロトコルを評価し、改善するか取り除きます。 標準とプロトコルを定期的に確認します。 現場の従業員からフィードバックを受け取ります。 ある標準が価値を高めていない場合は、それを取り除くか修正することを検討してください。
"共有ナレッジ リポジトリを作成する": 共有ナレッジ ベースを設定することで、ミスの繰り返しを防ぎ、トレーニングを支援し、情報の検索にかかる時間を短縮することができます。 すべてのメンバーがアクセスして集合的な知識に貢献できる、一元的な場所を作成します。 ナレッジ マネージメント ツールを採用し、リポジトリを定期的に更新して、チーム メンバーからの投稿を奨励します。
"トレーニングに投資する": プロセス、ツール、プロジェクトのトレーニングに多くの投資を行います。 これにより、各職員がベースライン要件を満たしてからプロジェクトへの貢献を開始することができます。 チームに確立済みの標準とプロセスに関するトレーニングを受けさせることで、定義されたガイドライン内で効率的かつ効果的に作業できるようになります。 チーム メンバーにこうした標準とプロセスに関するトレーニングを受けさせ、自分でそれらを特定する無駄な作業が発生しないようにする必要があります。
プロセスを最適化する
プロセスを最適化するには、不要な手順を排除し、手動作業を減らし、ロールと変更管理を合理化するためのワークフローを調整する必要があります。 この改善により、タスクの効率が向上します。 合理化されたプロセスにより、タスクに必要な時間とリソースが削減されます。 時間の削減は、生産性の向上とコストの削減につながります。 プロセスを最適化するには、次の推奨事項を検討してください。
"ソフトウェア開発ライフサイクル (SDLC) のアプローチを調整する": 最適な SDLC の採用により、少ないオーバーヘッドで高い品質を実現することができます。 現在の SDLC の方法を評価し、より効率的な代替手段を検討します。 スクラム、かんばん、ウォーターフォールなどの手法を調べて採用します。 選択したフレームワークを定期的に再評価して効率を高め、その SDLC が本質的にコラボレーションに適していることを確認します。
"ロールごとに最適化する": 定義済みのロールにより、明確な責任と期待される成果を確認し、効率を高めることができます。 開発者やソリューション アーキテクトなど、各ロールに必要なものを把握して定義します。 チームを拡大する場合は、ハードウェア、ライセンス、アクセス権の観点から各ロールに必要なものを把握する必要があります。
"変更管理を合理化する": 変更を前向きに受容できると、移行がスムーズになり、結果が向上します。 変更を実装するプロセスをスムーズかつ受け入れ可能なものにします。 抵抗するのではなく積極的に参加する文化を育みます。 指導と継続学習を通じて、変更の導入を促進します。 変更に建設的に適応します。
運用タスクを最適化する
ワークロードの運用タスクを最適化することは、ジョブ タスクをより迅速かつわかりやすいものにするプロセスです。 目標は、アクティビティを合理化して効率を高め、リソースを最も効果的に使用することです。 この合理化により、エラー、混乱、遅延を減らしてタスクを完了することができます。 職員の時間が節約されるため、意思決定の迅速化、トラブルシューティング期間の短縮、全体的な効率の向上とコスト削減につながります。 運用タスクを最適化するには、以下の戦略を検討してください。
シグナルに対するノイズの比率を下げる
監視においては、ノイズとシグナルを区別することが不可欠です。これにより、システムやアプリケーションの最も重要な側面にチームが集中できるようになります。 ノイズを除外することは、チームがより迅速に情報に基づいた意思決定を行い、問題をトラブルシューティングし、ワークロードを最適化するのに役立ちます。 問題をより効率的かつ迅速に特定して対処することは、職員コストの削減につながります。
ノイズからシグナルを区別するには、明確な目標とメトリックを定義する必要があります。 ワークロードに関係がある主要業績評価指標 (KPI) とメトリックを特定します。 各メトリックについてしきい値または範囲を設定し、通常の動作と、異常として報告する必要のある動作を指定します。 監視ツールを使ってリアルタイムでデータを収集し、定義されたメトリックを追跡して、問題や改善点の可能性を示すパターンを特定します。
アクションにつながる分析情報を優先します。 ワークロードの低下を示す分析情報に焦点を当て、それらを優先してさらなる調査やアクションを実行します。 フィードバックに基づいて定期的に監視戦略のレビューと更新を行います。
忠実度の高いデバッグを使う
"忠実度の高いデバッグ" とは、ソフトウェア アプリケーションの問題を正確に診断して修正できる機能を指します。 実行時のアプリケーションの動作と状態に関する詳しい分析情報を得ることができます。 忠実度の高いデバッグは、効果的なソフトウェア開発とトラブルシューティングにとって不可欠です。 忠実度の高いデバッグを使うと、開発者は問題をより正確に再現して分析できるため、バグの修正に必要な時間と労力が削減されます。 アプリケーションの動作を理解することで、開発者は情報に基づいた意思決定を迅速に行い、コードの品質を向上させることができます。
"デバッグ ツールを使う": アプリケーションの実行フロー、変数、メモリの状態に関する包括的な分析情報が得られる、豊富な機能を備えたデバッガーを使います。
"詳細なログとトレースを有効にする": ログとトレースのステートメントを使ってコードをインストルメント化し、実行時に関連情報を取得します。 これは問題を診断するのに役立ちます。
"エラー メッセージとスタック トレースを分析する": エラー メッセージとスタック トレースを慎重に調べて、問題につながるイベントのコンテキストとシーケンスを理解します。
テクニカル サポートを強化する
テクニカル サポート業務の効率と有効性を高めます。 繰り返し発生する問題を減らすことで時間が節約され、ユーザーの満足度が向上します。 サポートに関して繰り返し発生している問題を特定し、サポートのシャドウイングによりエンジニアリング チームとサポート チームを統合し、IT クラシック デプロイ モデル プロセスを採用して全体的なサポート負荷を軽減します。
インシデントから学習する
インシデントを分析することで、発生の繰り返しを防ぎ、反応時間を短縮することができます。 過去のインシデントを将来の改善のための学習機会として利用します。 振り返りを実施してインシデントを分析し、改善されるアクションと連絡プロトコルを特定し、包括的なログとメトリックによってシステムの監視を強化します。
堅牢なガバナンスを実装する
標準化によってエラーとやり直しを減らし、一貫した品質とコストの最適化を確保します。 組織内のコンプライアンスと標準化を強化します。 コンプライアンス チェックを自動化し、標準化されたソリューション、アーキテクチャ、ブループリントを推奨します。 意思決定を合理化するために、組織の制約や SLA に沿っていない選択肢を最小限に抑えます。
職員のスキルを最適化する
スキルの向上は、効率の向上とミスの減少につながります。 チームのスキルの開発と向上に投資してください。 職員のスキルを最適化するために、検討すべき推奨事項をいくつか次に示します。
"スキルアップ": コストの最適化と監視に必要なスキルをチーム メンバーに身に付けさせます。 実践的な学習とスキル開発のためのサンドボックス環境を提供します。 チーム メンバーに認定資格の取得を促し、経験豊富な同僚へのシャドウイングを促進します。
"ツール": ツールへの習熟は、タスクを最適化し、コスト管理に役立つ分析情報を得るための重要なスキルです。 職員が必要なツールに習熟しており、新しいツールに適応できることを確認します。 主要なツール、特に監視に関連するツールへの習熟を優先します。 効果的な監視とコスト管理のつながりを強調しながら、システムのさまざまなレイヤーにまたがるデータから意味のある分析情報を抽出できるように職員をトレーニングします。
"専門知識を考慮する": 従業員が持っているスキルと専門知識に合わせてタスクを割り当てます。 各自の長所を活かせるように、適切にタスクを割り当てて効率を最大化します。
Azure ファシリテーション
最適化ターゲットの設定: Azure DevOps には、目標の定義、メトリックの選択、ターゲットの設定のための一連のツールが用意されています。 作業項目の追跡、ダッシュボード、レポート機能などの機能が用意されています。 また、ソース コード管理、継続的インテグレーション、継続的デリバリー、プロジェクト管理などの機能も備わっています。 Azure DevOps を使うことで、チームはプロセスを自動化し、効果的に共同作業を行い、手動作業を減らすことができます。
開発時間の最適化: Azure には、次のような、開発者の時間を最適化するためのさまざまなツールと機能が用意されています。
"開発環境": Azure では、複数の形で開発環境が提供されています。たとえば、Microsoft Dev Box では、開発者ツールがインストールされている Windows VM と Linux VM が提供されます。 Microsoft では、コンテナー化された開発用の Docker VM と、Docker のビルドを可能にする Azure Container Registry も提供しています。
"Azure DevOps との統合": Azure は Azure DevOps と統合され、生産性が向上し、開発プロセスが合理化されます。
"IDE 統合": Azure では、Visual Studio や Visual Studio Code などの人気のある開発ツールとの IDE 統合が提供されます。 この統合により、開発者は各 Azure サービスとシームレスに作業できます。
"標準 SDK とライブラリ": Azure では、すべての Azure サービス用の標準 SDK とライブラリが提供されます。 これらの SDK とライブラリを使うと、開発者はコードを再利用し、Azure サービスの統合と実装にかかる時間を短縮することができます。
"クイックスタート テンプレートとサンプル": Azure には、開発プロセスを高速化できるクイックスタート テンプレートとサンプルが用意されています。
"パッケージ マネージャーと標準ライブラリ": Azure ではパッケージ マネージャーがサポートされており、NuGet パッケージ マネージャーなどの標準ライブラリが提供されます。 これらによって開発を簡素化し、開発者は一般的な機能の実装に費やす時間を短縮できます。
"オープンソースのサポート": Azure にはオープンソース テクノロジをサポートする強力なエコシステムがあるため、開発者は既存のオープンソース ツールとフレームワークを使って時間を最適化できます。
Azure によって提供されるこれらの機能とツールは、開発者が時間を節約し、開発ワークフローの生産性を向上させるのに役立ちます。
運用タスクの最適化: Azure では、コードとしてのインフラストラクチャ (IaC) 機能がサポートされています。この機能により、コードを使ってインフラストラクチャを定義および管理できます。 そうすることで複雑さが軽減され、システムの適応性が向上します。
Azure Monitor は、Azure 上のアプリケーションとインフラストラクチャのパフォーマンスと正常性を可視化する包括的な監視サービスです。 これを使って、テレメトリの収集、アラートの設定、リアルタイム分析情報の取得を行うことができます。 Azure Monitor を使うことで、問題を事前に特定して解決できます。 これにより、トラブルシューティングに費やす時間を短縮できます。
Azure Automation を使うと、Azure での手動による反復的なタスクを自動化できます。 特定のタスクを実行するための一連の手順である Runbook を作成して管理できます。 ルーチン タスクを自動化することで、時間を節約し、職員を解放してより重要なアクティビティに集中させることができます。
職員のスキルの最適化: Microsoft では、トレーニング資料やアクティビティの包括的なスイートを提供しています。 開発者、アーキテクト、ビジネス関係者向けのトレーニングをご利用いただけます。
関連リンク
コミュニティ リンク
コスト最適化チェックリスト
レコメンデーションの完全なセットを参照してください。