diff --git a/doc/changes/unreleased.md b/doc/changes/unreleased.md
index 79e701b8..a5481c81 100644
--- a/doc/changes/unreleased.md
+++ b/doc/changes/unreleased.md
@@ -1 +1,9 @@
# Unreleased
+
+## Summary
+
+This release describes naming conventions for SaaS instances in the User Guide.
+
+## Documentation
+
+* #145: Described SaaS instance naming conventions in the User Guide
diff --git a/doc/user_guide/user-guide.md b/doc/user_guide/user-guide.md
index d721f232..25c98789 100644
--- a/doc/user_guide/user-guide.md
+++ b/doc/user_guide/user-guide.md
@@ -1,5 +1,26 @@
# SaaS API for Python User Guide
+## Naming SaaS instances
+
+SAPIPY offers function `timestamp_name()` to name database instances.
+
+In case of left-over SaaS instances, the generated name is intended to identify who created the database, when, and for which project.
+
+Exasol SaaS limits database names to max 20 characters.
+
+SAPIPY function `timestamp_name()` uses the following format: <time><random><pst>`-`<user>
+
+* <time> 5 characters hex `0-9a-f` encoding the minutes since new year UTC.
+* <random> 5 random hex characters `0-9a-f` to avoid duplicate names.
+* <pst> optional project short tag, truncated to not exceed the maximum name length.
+* <user> name of the current user. On GitHub runners typically "runner", also truncated.
+
+Example: `10aa5dd99cSAPIPY-run`, was generated from
+* <time> `10aa5`hex = `68261`dec minutes since new year = February, 17 09:41
+* <random> `dd99c`
+* <pst> `SAPIPY`
+* <user> `run`, probably truncated from `runner`
+
## Raise Error on Response Status Code Other Than 200
The default behavior of the API client is to return a response with a status code and optionally an attribute `parsed` containing the returned data.