diff --git a/design b/design
new file mode 100644
index 00000000..846c6378
--- /dev/null
+++ b/design
@@ -0,0 +1,18 @@
+cdist using the push principle (triggered by server)
+
+% server
+   cdist-deploy-to <client-hostname>
+      cdist-preprocess  # fills up variables with content
+         cdist-explore  % client # explores client configuration
+      cdist-compile     # parses configuration, creates internal state in cconfig format, verifies
+      cdist-link        # uses cconfig output, creates executable
+      cdist-transfer    # transfer executable to client
+      cdist-execute     % client # execute resulting executable
+
+Operation on the server is run as "cdist" user.
+Operation on the client is run as "root" user.
+
+cdist using the pull principle (triggered by client)
+% client
+   cdist-trigger <server-hostname> # connects to server
+      cdist-deploy-to <client-hostname> % server: see above