diff --git a/lib/private/legacy/OC_App.php b/lib/private/legacy/OC_App.php
index a3c429c9ce4803ae2b9d824cedb71db838b70d1d..85fd8c99f05342312f87e183c75e8964b22e251a 100644
--- a/lib/private/legacy/OC_App.php
+++ b/lib/private/legacy/OC_App.php
@@ -149,9 +149,6 @@ class OC_App {
 		// in case someone calls loadApp() directly
 		self::registerAutoloading($app, $appPath);
 
-		/** @var \OC\AppFramework\Bootstrap\Coordinator $coordinator */
-		$coordinator = \OC::$server->query(\OC\AppFramework\Bootstrap\Coordinator::class);
-		$coordinator->bootApp($app);
 		if (is_file($appPath . '/appinfo/app.php')) {
 			\OC::$server->getEventLogger()->start('load_app_' . $app, 'Load app: ' . $app);
 			try {
@@ -176,6 +173,10 @@ class OC_App {
 			\OC::$server->getEventLogger()->end('load_app_' . $app);
 		}
 
+		/** @var \OC\AppFramework\Bootstrap\Coordinator $coordinator */
+		$coordinator = \OC::$server->query(\OC\AppFramework\Bootstrap\Coordinator::class);
+		$coordinator->bootApp($app);
+
 		$info = self::getAppInfo($app);
 		if (!empty($info['activity']['filters'])) {
 			foreach ($info['activity']['filters'] as $filter) {
diff --git a/lib/public/AppFramework/Bootstrap/IBootstrap.php b/lib/public/AppFramework/Bootstrap/IBootstrap.php
index 581c7d6636ad63c821eef4e15096a860b19e7b3e..770c830e7354fca22daef3e17042e7fb1a8e026a 100644
--- a/lib/public/AppFramework/Bootstrap/IBootstrap.php
+++ b/lib/public/AppFramework/Bootstrap/IBootstrap.php
@@ -38,6 +38,13 @@ interface IBootstrap {
 	public function register(IRegistrationContext $context): void;
 
 	/**
+	 * Boot the application
+	 *
+	 * At this stage you can assume that all services are registered and the DI
+	 * container(s) are ready to be queried.
+	 *
+	 * This is also the state where an optional `appinfo/app.php` was loaded.
+	 *
 	 * @param IBootContext $context
 	 *
 	 * @since 20.0.0