diff --git a/docs/_advanced/deferring_initialization.md b/docs/_advanced/deferring_initialization.md
new file mode 100644
index 000000000..36710f00f
--- /dev/null
+++ b/docs/_advanced/deferring_initialization.md
@@ -0,0 +1,35 @@
+---
+title: Deferring App initialization
+lang: en
+slug: deferring-initialization
+order: 8
+---
+
+
+Bolt offers a way to defer full initialization via the `deferInitialization` option and to call the equivalent `App#init()` in your code, putting more control over asynchronous execution required for initialization into your hands as the developer.
+
+_Note: If you call `start()` before `init()`, Bolt will raise an exception._
+
+
+```javascript
+const { App } = require('@slack/bolt');
+
+// deferInitialization is one of the options you can set in the constructor
+const app = new App({
+ token,
+ signingSecret,
+ deferInitialization: true,
+});
+
+(async () => {
+ try {
+ // Must call init() before start() within an async function
+ await app.init();
+ // Now safe to call start()
+ await app.start(process.env.PORT || 3000);
+ } catch (e) {
+ console.log(e);
+ process.exit(1);
+ }
+})()
+```
diff --git a/docs/_advanced/ja_deferring_initialization.md b/docs/_advanced/ja_deferring_initialization.md
new file mode 100644
index 000000000..6e4f90dc2
--- /dev/null
+++ b/docs/_advanced/ja_deferring_initialization.md
@@ -0,0 +1,35 @@
+---
+title: アプリの初期化の遅延
+lang: ja
+slug: deferring-initialization
+order: 8
+---
+
+
+Bolt は `deferInitialization` というオプションを使うことで、アプリの初期化処理の完了を遅延させることができます。このオプションを使う場合、あなたのコードの中で遅延された初期化処理部分に対応する `App#init()` メソッドを呼び出す必要がありますが、こうすることで初期化に必要となる非同期処理の実行をよりコントロールすることが可能となります。
+
+_注意: `init()` メソッドを呼び出す前に `start()` メソッドを呼び出した場合、 Bolt は例外を発生させます。_
+
+
+```javascript
+const { App } = require('@slack/bolt');
+
+// deferInitialization はコンストラクターで指定できるオプション
+const app = new App({
+ token,
+ signingSecret,
+ deferInitialization: true,
+});
+
+(async () => {
+ try {
+ // 非同期関数の中で start() メソッドを呼び出す前に init() メソッドを呼び出すこと
+ await app.init();
+ // init() メソッドを呼び出したので、`start()` メソッドを安全に呼び出すことができる
+ await app.start(process.env.PORT || 3000);
+ } catch (e) {
+ console.log(e);
+ process.exit(1);
+ }
+})()
+```
diff --git a/docs/_tutorials/ja_reference.md b/docs/_tutorials/ja_reference.md
index 14450ac55..185ef3291 100644
--- a/docs/_tutorials/ja_reference.md
+++ b/docs/_tutorials/ja_reference.md
@@ -116,6 +116,7 @@ App オプションは、`App` のコンストラクターに渡します。
| `clientOptions.slackApiUrl` | Slack Web API で使用するエンドポイントをカスタマイズできます。これが使用されるのはほとんどがテスト用途です。 |
| `socketMode` | 真偽値を指定するオプションで、`true` に設定するとアプリは[ソケットモード](/bolt-js/ja-jp/concepts#socket-mode)で起動します。ソケットモードは WebSocket のコネクションを通して Slack からのデータを受信する機能です。デフォルトは `false` です。
| `developerMode` | デベロッパーモードを有効にする真偽値です。 `true` に設定したとき、`logLevel` は `DEBUG`、 `socketMode` は `true` に自動的に設定されます。しかし、 これらの二つのプロパティを明示的に設定した場合、それらの設定が `developerMode` による設定よりも優先されます。さらに、デバッグをしやすくするためのカスタムの OAuth エラーハンドラーも提供されます。また、全ての Slack からのリクエストのボディがログ出力されるため、トークンのようなセンシティブな情報がログに含まれる可能性があります。デフォルトは `false` です。|
+| `deferInitialization` | アプリの初期化を遅延させる真偽値です。有効にすると非同期の `App#init()` メソッドを手動で呼び出す必要があります。 また `init()` メソッドは `App#start()` を実行する前に呼び出さなければなりません。 デフォルトは `false` です。 |
> Bolt のclientは [Node Slack SDK](/node-slack-sdk) の `WebClient` のインスタンスです。そのため、Node Slack SDK のドキュメントも合わせて参照すると、開発時の理解に役立つでしょう。
diff --git a/docs/_tutorials/reference.md b/docs/_tutorials/reference.md
index 34e40a57a..5a4dae279 100644
--- a/docs/_tutorials/reference.md
+++ b/docs/_tutorials/reference.md
@@ -114,6 +114,7 @@ App options are passed into the `App` constructor. When the `receiver` argument
| `clientOptions.slackApiUrl` | Allows setting a custom endpoint for the Slack API. Used most often for testing. |
| `socketMode` | Option that accepts a `boolean` value. When set to `true` the app is started in [Socket Mode](/bolt-js/concepts#socket-mode), i.e. it allows your app to connect and receive data from Slack via a WebSocket connection. Defaults to `false`.
| `developerMode` | `boolean` to activate the developer mode. When set to `true` the `logLevel` is automatically set to `DEBUG` and `socketMode` is set to `true`. However, explicitly setting these two properties takes precedence over implicitly setting them via `developerMode`. Furthermore, a custom OAuth failure handler is provided to help debugging. Finally, the body of all incoming requests are logged and thus sensitive information like tokens might be contained in the logs. Defaults to `false`. |
+| `deferInitialization` | `boolean` to defer initialization of the app and places responsibility for manually calling the `async` `App#init()` method on the developer. `init()` must be called before `App#start()`. Defaults to `false`. |
> Bolt's client is an instance of `WebClient` from the [Node Slack SDK](/node-slack-sdk), so some of that documentation may be helpful as you're developing.