Currently, users of Open 3D Engine (O3DE) only have one primary product manual: The User Guide (we also offer the Atom Guide, which is intended to be rolled into the User Guide at a future date.) While for most project developers and content creators the user guide is intended to be sufficient, O3DE has other audiences:
To support those considerations, there should be an Engine Developer Guide added to o3de.org. The Engine Developer Guide would cover low-level documentation for contributors and engine modification from an official, vetted, quality-controlled source.
Contributors and developers modifying the engine require low-level documentation to perform their tasks. Some existing resources that they have access to which can provide some of this information are: Source code; Header documentation and API reference; RFCs.
While new features in the engine require RFCs, this information is not available for all parts of O3DE. In addition, header documentation and API reference have many issues in the project's current state. In particular, API reference has been a lower priority for developers. Relying on source code can be difficult for even advanced users, especially in cases where there are many abstraction layers. With the modular design of O3DE, this is a particular concern.
While there are long-term solutions to some of these issues such as API reference requirements for source contribution, we need a more immediate stopgap that allows developers to share notes, reference, and other critical implementation documentation. The Engine Developer Guide is intended to serve this purpose, and carrying forward, provide authoritative information on designs and implementation.
The design for a new guide encompasses:
The overall reviewer standards and any required style guide are maintained by a technical SIG in conjunction with SIG Docs-Community. This proposal recommends the following:
No content will be explicitly excluded from the Engine Developer Guide by SIG Docs-Community; Content of the guide will be at the discretion of the technical SIG owning the manual.
However, there is the risk of mixing content across guides, requiring some very specific dividing lines between the style and intended audience of User Guide content and Engine Developer Manual content. The following two examples outline some potential scenarios in which such a conflict happens.
Example 1 - Prototype Feature Documentation
Ada, a developer on the O3DE project, is submitting a prototype feature. This feature is not ready for user-facing documentation, but still requires engineer documentation for people willing to contribute and basic bootstrapping/README information for the feature.
Ada needs to submit both feature documentation (user-facing) and implementation details (engine dev-facing). Ada needs to know where to put each documentation set. There are three possible paths for this documentation to go:
development
branch User Guide. While a feature is in development, we may consider "users" to be alpha/beta testers who would be comfortable working with lower-quality instructions. However, during stabilization for a release, this would require sig-docs-community (relying on other SIGs) to evaluate content in the User Guide for release.Recommendation: Developers who understand where to split their content should Split at time of submission. For developers who are unsure, they should Submit to developer guide and ideally request a reviewer from sig-docs-community for evaluating content for split, to create an issue to split content when the feature is stable.
Example 2 - Gem development File locations
Bill, a project developer looking for information on custom Gem development, comes to the o3de.org site looking for documentation. Bill isn't interested in the workings of the Gem system; Only in the process of constructing a Gem from templates and integrating it with their project. There's now the following point of confusion: Is this information in the "User Guide", or the "Engine Developer Guide"?
This RFC recommends the following to mitigate this sort of problem:
The Engine Developer Manual structure and page serving information will be available only on the development branch, staged at https://development--o3deorg.netlify.app/. We recommend that the Engine Developer Manual also ships in a locked and versioned edition as part of any release.
The Engine Developer Manual will have page content hosted at /docs/engine-dev-guide
(source: /content/docs/engine-dev-guide
) and image/video materials hosted at /images/engine-dev-guide
(source: /static/images/engine-dev-guide
).
The following broad architecture for the Engine Developer Manual is as follows (paths are relative to https://o3de.org/docs/engine-dev-guide
):
_index.md # Overview page, maintained jointly by o3de/maintainers and sig-docs-community
architecture/* # Broad architecture documents
framework/* # Per-framework documentation.
framework/_index.md # Index linking to all framework pages, with a brief overview of the framework.
#framework/azcore # Naming example; Frameworks should be named after their associated binary products.
gem/* # Per-gem documentation. Only provided for Gems included in the O3DE distribution.
gem/_index.md # Index linking to all Gem pages, with a brief overview of each Gem from a technical level.
#gem/networking # Naming example; Gems should be named after the gem name, not any produced artifacts.
Further subdirectories on top of these are at the discretion of the TSC and o3de/maintainers groups who own the Engine Developer Manual. We recommend against further subdirectories for Gems, unless absolutely necessary. Subdirectories for frameworks which have broad topic are recommended; An example would be framework/azcore/allocators
for information on memory allocation systems.
Changes to the root _index.md
or directory structure should require review by sig-docs-community as information architecture stakeholders.
The Engine Developer Manual is intended to be as style-light as possible. The TSC must maintain the style and quality standards, outside of the following requirement set by sig-docs-community and required for all site content: Correct usage of terminology and associated style, for consistency of readability across guides.
If this requirement is not accepted by the TSC, at minimum the Engine Developer Manual must have a requirement that contributors respect trademarks as listed in the terminology. This is a non-negotiable legal requirement.
Acceptance of this RFC and the consequent requirements of maintaining this documentation guide is likely to have an impact on the development of O3DE itself. Such an impact would be determined entirely by the policies established by the TSC or a representative group.
There are no technical changes required to website infrastructure to support this change, other than an addition to CODEOWNERS
to give access to a reviewer group for the Engine Developer Guide.
_index.md
file stubs for the architecture as described if needed.What are some of the open questions and potential scenarios that should be considered?